Hi all. I recently buy 2 different si4703 boards (same pcb layout but different pcb color). The red pcb mounts si4703 with C16 firmware onboard and the purple pcb instead comes with C19 firmware.
I use an ESP32 board to pilot the boards and, with C16 firmware, I'm capable to drive correctly the board even if the sound is not clear but croaking. No response from the module with C19 firmware. I've tested several libraries, with same results.
This is the sketch i used
#include <SI470X.h>
#define RESET_PIN 12 // On Arduino Atmega328 based board, this pin is labeled as A0 (14 means digital pin instead analog)
#define SDA_PIN 21 //
// I2C bus pin on ESP32
#define ESP32_I2C_SDA 21
#define ESP32_I2C_SCL 22
#define MAX_DELAY_RDS 40 // 40m?s - polling method
long rds_elapsed = millis();
SI470X rx;
void showHelp()
{
Serial.println("Type U to increase and D to decrease the frequency");
Serial.println("Type S or s to seek station Up or Down");
Serial.println("Type V or v to set EXTVol ON or OFF");
Serial.println("Type + or - to volume Up or Down");
Serial.println("Type M or m to MONO or STEREO");
Serial.println("Type P to spacing 100");
Serial.println("Type G or g to set AGC ON or OFF");
Serial.println("Type 0 to show current status");
Serial.println("Type ? to this help.");
Serial.println("==================================================");
delay(1000);
}
// Show current frequency
void showStatus()
{
char aux[80];
sprintf(aux,"\nYou are tuned on %u MHz | RSSI: %3.3u dbUv | Vol: %2.2u | %s ",rx.getFrequency(), rx.getRssi(), rx.getVolume(), (rx.isStereo()) ? "Yes" : "No" );
Serial.print(aux);
}
void setup()
{
Serial.begin(115200);
while (!Serial) ;
// The line below may be necessary to setup I2C pins on ESP32
Wire.begin(ESP32_I2C_SDA, ESP32_I2C_SCL);
rx.setup(RESET_PIN, ESP32_I2C_SDA);
rx.setVolume(6);
rx.setFmDeemphasis(1);
delay(500);
// Select a station with RDS service in your place
Serial.print("\nEstacao 106.5MHz");
rx.setFrequency(10650); // It is the frequency you want to select in MHz multiplied by 100.
// Enables SDR
rx.setRds(true);
rx.setRdsMode(0);
rx.setSeekThreshold(30); // Sets RSSI Seek Threshold (0 to 127)
showHelp();
showStatus();
}
void loop()
{
if (Serial.available() > 0)
{
char key = Serial.read();
switch (key)
{
case 'V':
rx.setExtendedVolumeRange(true);
break;
case 'v':
rx.setExtendedVolumeRange(false);
break;
case 'M':
rx.setMono(true);
break;
case 'G':
rx.setAgc (true);
break;
case 'g':
rx.setAgc (false);
break;
case 'm':
rx.setMono(false);
break;
case 'P':
rx.setSpace(1);
break;
case '+':
rx.setVolumeUp();
break;
case '-':
rx.setVolumeDown();
break;
case 'U':
case 'u':
rx.setFrequencyUp();
break;
case 'D':
case 'd':
rx.setFrequencyDown();
break;
case 'S':
rx.seek(SI470X_SEEK_WRAP, SI470X_SEEK_UP);
break;
case 's':
rx.seek(SI470X_SEEK_WRAP, SI470X_SEEK_DOWN);
break;
case '0':
showStatus();
break;
case '?':
showHelp();
break;
default:
break;
}
delay(200);
showStatus();
}
delay(5);
}
Tested 4 different board (2 for every firmware versions) with same results. Someone can help me ?? Thanks