Simple test¶
Ensure your device works with this simple test.
1# SPDX-FileCopyrightText: 2018 Tony DiCola for Adafruit Industries
2# SPDX-License-Identifier: MIT
3
4# Simple demo of using the SI4743 RDS FM transmitter.
5
6import time
7import board
8import digitalio
9import adafruit_si4713
10
11# Specify the FM frequency to transmit on in kilohertz. As the datasheet
12# mentions you can only specify 50khz steps!
13FREQUENCY_KHZ = 102300 # 102.300mhz
14
15# Initialize I2C bus.
16i2c = board.I2C() # uses board.SCL and board.SDA
17
18# Initialize SI4713.
19# si4713 = adafruit_si4713.SI4713(i2c)
20
21# Alternatively you can specify the I2C address of the device if it changed:
22# si4713 = adafruit_si4713.SI4713(i2c, address=0x11)
23
24# If you hooked up the reset line you should specify that too. Make sure
25# to pass in a DigitalInOut instance. You will need the reset pin with the
26# Raspberry Pi, and probably other devices:
27si_reset = digitalio.DigitalInOut(board.D5)
28
29print("initializing si4713 instance")
30si4713 = adafruit_si4713.SI4713(i2c, reset=si_reset, timeout_s=0.5)
31print("done")
32
33# Measure the noise level for the transmit frequency (this assumes automatic
34# antenna capacitance setting, but see below to adjust to a specific value).
35noise = si4713.received_noise_level(FREQUENCY_KHZ)
36# Alternatively measure with a specific frequency and antenna capacitance.
37# This is not common but you can specify antenna capacitance as a value in pF
38# from 0.25 to 47.75 (will use 0.25 steps internally). If you aren't sure
39# about this value, stick with the default automatic capacitance above!
40# noise = si4713.received_noise_level(FREQUENCY_KHZ, 0.25)
41print("Noise at {0:0.3f} mhz: {1} dBuV".format(FREQUENCY_KHZ / 1000.0, noise))
42
43# Tune to transmit with 115 dBuV power (max) and automatic antenna tuning
44# capacitance (default, what you probably want).
45si4713.tx_frequency_khz = FREQUENCY_KHZ
46si4713.tx_power = 115
47
48# Configure RDS broadcast with program ID 0xADAF (a 16-bit value you specify).
49# You can also set the broadcast station name (up to 96 bytes long) and
50# broadcast buffer/song information (up to 106 bytes long). Setting these is
51# optional and you can later update them by setting the rds_station and
52# rds_buffer property respectively. Be sure to explicitly specify station
53# and buffer as byte strings so the character encoding is clear.
54si4713.configure_rds(0xADAF, station=b"AdaRadio", rds_buffer=b"Adafruit g0th Radio!")
55
56# Print out some transmitter state:
57print("Transmitting at {0:0.3f} mhz".format(si4713.tx_frequency_khz / 1000.0))
58print("Transmitter power: {0} dBuV".format(si4713.tx_power))
59print(
60 "Transmitter antenna capacitance: {0:0.2} pF".format(si4713.tx_antenna_capacitance)
61)
62
63# Set GPIO1 and GPIO2 to actively driven outputs.
64si4713.gpio_control(gpio1=True, gpio2=True)
65
66# Main loop will print input audio level and state and blink the GPIOs.
67print("Broadcasting...")
68while True:
69 # Print input audio level and state.
70 print("Input level: {0} dBfs".format(si4713.input_level))
71 print("ASQ status: 0x{0:02x}".format(si4713.audio_signal_status))
72 # 'Blink' GPIO1 and GPIO2 alternatively on and off.
73 si4713.gpio_set(gpio1=True, gpio2=False) # GPIO1 high, GPIO2 low
74 time.sleep(0.5)
75 si4713.gpio_set(gpio1=False, gpio2=True) # GPIO1 low, GPIO2 high
76 time.sleep(0.5)