From 2695fa78c9ccf6945f1764df40d8f3a38e3175ba Mon Sep 17 00:00:00 2001 From: nnakapa Date: Sat, 17 Feb 2024 11:26:03 +0900 Subject: [PATCH] Modified for Japanese and World users --- examples/rda5807m_simpletest.py | 17 +++++++++---- tinkeringtech_rda5807m.py | 42 ++++++++++++++++++++++----------- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/examples/rda5807m_simpletest.py b/examples/rda5807m_simpletest.py index ad658f7..ea3c9fb 100644 --- a/examples/rda5807m_simpletest.py +++ b/examples/rda5807m_simpletest.py @@ -1,26 +1,31 @@ # SPDX-FileCopyrightText: Copyright (c) 2022 tinkeringtech for TinkeringTech LLC +# SPDX-FileCopyrightText: 2024 Norihiko Nakabayashi, modified for Japanese and World users # # SPDX-License-Identifier: Unlicense # pylint: disable=global-statement, too-many-branches, too-many-statements import time import board +import busio import supervisor from adafruit_bus_device.i2c_device import I2CDevice import tinkeringtech_rda5807m # Preset stations. 8930 means 89.3 MHz, etc. -presets = [8930, 9510, 9710, 9950, 10100, 10110, 10650] +# presets = [8930, 9510, 9710, 9950, 10100, 10110, 10650] +# Preset stations for Tokyo, Japan. +presets = [7800, 7950, 8000, 8130, 8250, 8470, 8970, 9050, 9160, 9240, 9300] i_sidx = 3 # Starting at station with index 3 # Initialize i2c bus # If your board does not have STEMMA_I2C(), change as appropriate. -i2c = board.STEMMA_I2C() +# i2c = board.STEMMA_I2C() +i2c = busio.I2C(board.GP1, board.GP0) # Receiver i2c communication address = 0x11 vol = 3 # Default volume -band = "FM" +band = "FMWORLD" # "FM" or "FMWORLD rds = tinkeringtech_rda5807m.RDSParser() @@ -31,6 +36,7 @@ rdstext = "No rds data" + # RDS text handle def textHandle(rdsText): global rdstext @@ -42,8 +48,9 @@ def textHandle(rdsText): # Initialize the radio classes for use. radio_i2c = I2CDevice(i2c, address) -radio = tinkeringtech_rda5807m.Radio(radio_i2c, rds, presets[i_sidx], vol) -radio.set_band(band) # Minimum frequency - 87 Mhz, max - 108 Mhz +radio = tinkeringtech_rda5807m.Radio(radio_i2c, rds, band, presets[i_sidx], vol) +# radio.set_band(band) # Minimum frequency - 87 Mhz, max - 108 Mhz + # Read input from serial def serial_read(): diff --git a/tinkeringtech_rda5807m.py b/tinkeringtech_rda5807m.py index d8664c1..7e50800 100644 --- a/tinkeringtech_rda5807m.py +++ b/tinkeringtech_rda5807m.py @@ -1,5 +1,6 @@ # SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries # SPDX-FileCopyrightText: Copyright (c) 2022 tinkeringtech for TinkeringTech LLC +# SPDX-FileCopyrightText: 2024 Norihiko Nakabayashi, modified for Japanese and World users # # SPDX-License-Identifier: MIT """ @@ -100,14 +101,8 @@ class Radio: address = 0x11 maxvolume = 15 - # FMWORLD Band - freq_low = 8700 - freq_high = 10800 - freq_steps = 10 - rssi = 0 - # Set default frequency and volume - def __init__(self, board, rds_parser, frequency=10000, volume=1): + def __init__(self, board, rds_parser, band="FM", frequency=10000, volume=1): self.board = board self.frequency = frequency @@ -130,10 +125,18 @@ def __init__(self, board, rds_parser, frequency=10000, volume=1): self.interval = 10 # Used for timing rssi checks - in seconds self.initial = time.monotonic() # Time since boot - # Band - Default FMWORLD + # Band - Default FM # 1. FM # 2. FMWORLD - self.band = "FM" + self.band = band + # FMWORLD Band + if band == "FM": + self.freq_low = 8700 + else: + self.freq_low = 7600 + self.freq_high = 10800 + self.freq_steps = 10 + self.rssi = 0 # Functions saves register values to virtual registers, sets the basic frequency and volume self.setup() @@ -186,7 +189,15 @@ def set_freq(self, freq): self.frequency = freq new_channel = (freq - self.freq_low) // 10 - reg_channel = RADIO_REG_CHAN_TUNE # Enable tuning + # Changes bands to FM or FMWORLD + band = self.band + if band == "FM": + r = RADIO_REG_CHAN_BAND_FM + else: + r = RADIO_REG_CHAN_BAND_FMWORLD + reg_channel = ( + r | RADIO_REG_CHAN_SPACE_100 | RADIO_REG_CHAN_TUNE + ) # Enable tuning reg_channel = reg_channel | (new_channel << 6) # Enable output, unmute @@ -200,6 +211,7 @@ def set_freq(self, freq): # Save frequency to register self.registers[RADIO_REG_CHAN] = reg_channel + self.save_register(RADIO_REG_CHAN) time.sleep(0.2) @@ -230,14 +242,16 @@ def format_freq(self): """docstring.""" # Formats the current frequency for better readabilitiy freq = self.frequency - + """ sfreq = str(freq) sfreq = list(sfreq) last_two = sfreq[-2:] sfreq[-2] = "." sfreq[-1] = last_two[0] sfreq.append(last_two[1]) - return ("".join(sfreq)) + " Mhz" + return ("".join(sfreq)) + " MHz" + """ + return "{:.1f} MHz".format(freq / 100) def set_band(self, band): """docstring.""" @@ -434,7 +448,7 @@ def get_rssi(self): # Get the current signal strength self.write_bytes(bytes([RADIO_REG_RB])) self.registers[RADIO_REG_RB] = self.read16() - self.rssi = self.registers[RADIO_REG_RB] >> 10 + self.rssi = self.registers[RADIO_REG_RB] >> 9 # 10 -> 9 return self.rssi def get_radio_info(self): @@ -443,7 +457,7 @@ def get_radio_info(self): self.read_registers() if self.registers[RADIO_REG_RA] & RADIO_REG_RA_RDS: self.rds = True - self.rssi = self.registers[RADIO_REG_RB] >> 10 + self.rssi = self.registers[RADIO_REG_RB] >> 9 # 10 -> 9 if self.registers[RADIO_REG_RB] & RADIO_REG_RB_FMTRUE: self.tuned = True if self.registers[RADIO_REG_CTRL] & RADIO_REG_CTRL_MONO: