I2S output FM Tuner with RDS

I2S output FM Tuner using RDA7088 with RDS display using ESP-01 and OLED

Public Chat
Similar projects worth following
In this project we are going to explore RDS and I2S features of RDA7088 through I2C bus. Since plenty of Arduino libraries available for FM tuner, RDS and IR remote controll, this project attempted with Arduino IDE with ESP8266 support. It is much simpler, easier and fastest way to implement the I2S and RDS features on RDA7088 using ESP-01 with Arduino IDE with ESP8266 support. This project using ESP-01 and OLED(128x32) or LCD modules for displaying RDS information.

FM tuner RDA7088 is capable of processing RDS information as well apart from I2C bus and I2S output support!

Compared to my I2S output FM tuner project, FM tuner, IR remote control and I2S DAC remains the same.  

PIC10F200  replaced by ESP-01 and display module is added(LCD or OLED).

In ESP-01 out of four possible GPIOs only three GPIOs are used.  GPIO1 still available for future use.

FM tuner, OLED or LCD and EEPROM IC(24C0X) shares the same I2C bus.  EEPROM  used to remember the last used channel frequency and volume settings.  The GPIO3 input is used for IR remote receiver input(RX) pin.

Both LCD(I2C bus compatible 4 pin type) and OLED(4 pin type) modules were used for testing.  

Since with ESP-01 we have enough memory, speed and processing power it is much easier to develop the software using Arduino IDE with readily available libraries.

We can use any FM tuner Arduino library supports RDA Microelectronics tuners.  We can easily adopt the OLED or LCD modules from available Arduino libraries.  We can easily adopt any available IR remote control Arduino library.

The Wi-Fi feature of ESP-01 is NOT used in the project.  We can enable the Wi-Fi feature of ESP-01 for remote access, monitoring and OTA firmware update. Same setup tested with ESP-12, ESP32 and working fine. Since currently we are using just three I/O port pins, decided to use ESP-01.

ESP-01 pin map

       GPI00 - SDA(FM tuner + OLED or LCD + EEPROM)

       GPIO2 - SCL(FM tuner + OLED or LCD + EEPROM)

       GPIO3 - Rx - IR receiver 

If we enable the I2S output of RDA7088 the following GPIO pins will be assigned to the I2S signals

       PIN# 01 - GPIO1 - WS

       PIN# 16 - GPIO2 - SD

       PIN# 15 - GPIO3 - SCK

Even if we enable the I2S, still we will be getting the analog output on LOUT & ROUT pins concurrently!

We are using 32.768kHz crystal for RCLK required for the  tuner. The RDA7088 tuner supports 12MHz, 13MHz, 19.2MHz, 24MHz, 26MHz & 38.4MHz external RCLK for operation.  If we have any of the above frequency readily available or any PLL capable of generating any of the above mentioned frequencies then we can eliminate the 32.768kHz crystal used to generate the RCLK. 

REGISTER 04H and 06H details of RDA7088

REG 0x04

//         -[B#FEDCBA98]-  
//             ||||||||______(08)-AFCD AFC disable 0- afc work; 1- afc disabled
//             |||||||_______(09)-SOFTMUTE_EN If 1, softmute enable
//             ||||||________(10)-RDS_FIFO_CLR 1 = clear RDS FIFO //RDSR _MODE???
//             |||||_________(11)-DE De-emphasis 0 = 75 μs; 1 = 50 μs
//             ||||__________(12)-RDS_FIFO_EN 1 = RDS fifo mode enable.
//             |||___________(13)-RBDS 1 = RBDS mode enable 0 = RDS mode only
//             ||____________(14)-STCIEN 1 = IINT ENA : STCIEN = 1 will generate low pulse on GPIO2
//             |_____________(15)-RDSIEN 0 = Disable 1 = Enable Setting STCIEN = 1 will generate a low pulse on GPIO2
  Wire.write(0b01000000);     //  Wire.write(0b01000000);
//         -[B#76543210]-  
//             ||||||||_______(0)-GPIO1[1:0] 00 = High impedance 01 = Reserved
//             |||||||________(1)-GPIO1[1:0] 10 = Low 11 = High
//             ||||||_________(2)-GPIO2[1:0] 00 = High impedance 01 = Interrupt (INT)
//             |||||__________(3)-GPIO2[1:0] 10 = Low 11 = High
//             ||||___________(4)-GPIO3[1:0] 00 = High impedance 01 = Mono/Stereo indicator (ST)
//             |||____________(5)-GPIO3[1:0] 10 = Low 11 = High
//             ||_____________(6)-I2S_ENABLED 1-ENABLED : 0-DISABLED
//             |______________(7)-GPIO1_INT_EN???
  Wire.endTransmission(); // stop transmitting

 REG 0x06

Read more »

  • 1 × RDA7088 Single chip FM tuner
  • 1 × 32.768kHz crystal Crystal for RCLK 3x8 or 2x6
  • 1 × Ams1117 3.3v LDO
  • 1 × ESP-01 Esp8266ex module
  • 1 × OLED 128x32 SSD1306 OLED module

View all 12 components

View project log

  • 1
    PT8122 and TM8122 I2S DAC (16 bit)

    I2S DAC

    Tested with above two DACs and working fine.

View all instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates