Introduction: Use Si4703 FM Breakout Board on Arduino Uno

Picture of Use Si4703 FM Breakout Board on Arduino Uno

In this post, I will demo how to use SI4703 FM Breakout Board on Arduino Uno
Si4703 FM breakout board for the Silicon Laboratories Si4703 FM tuner chip.

Beyond being a simple FM radio, the Si4703 is also capable of detecting and processing both Radio Data Service (RDS) and Radio Broadcast Data Service (RBDS) information.

The Si4703 even does a very good job of filtering and carrier detection. It also enables data such as the station ID and song name to be displayed to the user.

Using this board we are able to pick up multiple stations just as well as with a standard FM radio.

The board breaks out all major pins and makes it easy to incorporate this great chip into your next radio project.

Also, by plugging headphones into the 3.5mm audio jack, you effectively use the cable in your headphones as an antenna! Therefore, this board does not require an external antenna if using headphones or a 3.5mm audio cable longer than 3 feet.

Step 1: Step 1 Hardware Prepare

Picture of Step 1 Hardware Prepare

We need this hareware

1  x Arduino Uno
1  x Breakout Board for Si4703 FM Tuner
Several Jumper wires

Step 2: Step 2 Wiring Diagram

Picture of Step 2   Wiring Diagram

3V      of      Arduino -> VCC     of    Si4704
GND  of      Arduino ->  GND   of     Si4704
A5     of      Arduino ->  SCLK  of     Si4704
A4     of      Arduino -> SDIO   of     Si4704
D2     of      Arduino ->  RST    of      Si4704

Step 3: Software Prepare

#include <Si4703_Breakout.h>
#include <Wire.h>

int resetPin = 2;
int SDIO = A4;
int SCLK = A5;

Si4703_Breakout radio(resetPin, SDIO, SCLK);
int channel;
int volume;
char rdsBuffer[10];

void setup()
{
  Serial.begin(9600);
  Serial.println("\n\nSi4703_Breakout Test Sketch");
  Serial.println("==========================="); 
  Serial.println("a b     Favourite stations");
  Serial.println("+ -     Volume (max 15)");
  Serial.println("u d     Seek up / down");
  Serial.println("r       Listen for RDS Data (15 sec timeout)");
  Serial.println("Send me a command letter.");

  radio.powerOn();
  radio.setVolume(0);
}

void loop()
{
  if (Serial.available())
  {
    char ch = Serial.read();
    if (ch == 'u')
    {
      channel = radio.seekUp();
      displayInfo();
    }
    else if (ch == 'd')
    {
      channel = radio.seekDown();
      displayInfo();
    }
    else if (ch == '+')
    {
      volume ++;
      if (volume == 16) volume = 15;
      radio.setVolume(volume);
      displayInfo();
    }
    else if (ch == '-')
    {
      volume --;
      if (volume < 0) volume = 0;
      radio.setVolume(volume);
      displayInfo();
    }
    else if (ch == 'a')
    {
      channel = 930; // Rock FM
      radio.setChannel(channel);
      displayInfo();
    }
    else if (ch == 'b')
    {
      channel = 974; // BBC R4
      radio.setChannel(channel);
      displayInfo();
    }
    else if (ch == 'r')
    {
      Serial.println("RDS listening");
      radio.readRDS(rdsBuffer, 15000);
      Serial.print("RDS heard:");
      Serial.println(rdsBuffer);     
    }
  }
}

void displayInfo()
{
   Serial.print("Channel:"); Serial.print(channel);
   Serial.print(" Volume:"); Serial.println(volume);
}

<a href="http://learn.linksprite.com/wp-content/uploads/2014/08/Arduino-code.jpg"><img class="aligncenter" alt="Arduino code" /></a>

Step 4: Step4 X-CTU

Picture of Step4 X-CTU

1. We need to install the X-CTU

You can click here to download the X-CTU:  X-CTU2
You can refer to the original post to download the post: http://learn.linksprite.com/arduino/use-si4703-fm-breakout-board-on-arduino-uno%EF%BC%882%EF%BC%89/

2. Open the X-CTU.exe, then click the terminal, you will see

.Si4703_Breakout Test Sketch
.===========================
.a b     Favourite stations
.+ -     Volume (max 15)
.u d     Seek up / down
.r       Listen for RDS Data (15 sec timeout)
.Send me a command letter.

Follow the command letter, you can
click the “+”,”-”, you can change the volume
Click the “d”,”u”, you can find the FM you like

Comments

Luisdlahuerta made it! (author)2016-05-27

Very nice!!! thanks for share

KevinO38 (author)2016-01-17

When I try to compile the code above, I get many warnings on Wire.h such as "libraries\Si4703_Breakout\Si4703_Breakout.cpp:184:10: error: 'class TwoWire' has no member named 'send"

Wire.send(high_byte); //Upper 8 bits

*

Is there a different Wire.h than the one included with the latest Arduino install? Thanks in advance for any help you can provide.

Kevin

GiedriusK1 (author)KevinO382016-03-06

Wire.h have updated names of some methods.
You need to change it in your Si4703_Breakout.cpp too:
receive() change to: read()
send() change to: write()

Also instead of #include <WProgram.h> you should change to #include <Arduino.h>.
I hope it helped.
Giedrius

20000leghe (author)2015-11-25

Is there possibility to get date & time from RDS information?

sbsivertsen (author)2015-08-14

I have absolutely no clue so this is probably a stupid question but is it possible to convert the Si4703 FM Breakout Board to tune into AM and another frequency?

piefonta (author)sbsivertsen2015-08-20

For AM and FM, you must use si4735. si4703 is only FM.

mounrouset (author)2015-06-04

seamster (author)2014-09-26

Nice.

About This Instructable

16,007views

31favorites

License:

More by Yanny Guo:Use pcDuino as Photo Booth ControllerUse Si4703 FM Breakout Board on Arduino UnoUse SIM900 GPRS/GSM Shield on pcDuino
Add instructable to: