Why
I wanted a radio that receives DAB+ and FM and plays it on my own Bluetooth speaker or headphones with good quality, without going through a phone. Most DAB+ radios have their own small speaker, and the ones with Bluetooth usually receive it instead of transmitting it. So I designed my own.
How it works
The audio path is fully digital, I²S at 48 kHz / 24-bit:
- Si4684 (Silicon Labs) DAB+/DAB/FM tuner, antenna on SMA
- ADAU1701 SigmaDSP (Analog Devices): EQ, source mixing, bass and stereo enhancement. It's the I²S clock master, and every audio source goes through it
- Feasycom FSC-BT1035 (Qualcomm QCC3056): Bluetooth 5.2 with aptX, aptX HD and aptX Adaptive
- ESP32-S3: host controller with Wi-Fi and BLE. It boots the other chips, runs a REST API, streams web radio into the DSP and handles OTA updates with automatic rollback
FM/DAB antenna → Si4684 → I²S → ADAU1701 → I²S → BT1035 → aptX
The DSP program was designed in SigmaStudio and can be updated over Wi-Fi without reflashing the ESP32.
Firmware
ESP-IDF, C++23. The core logic (EQ design, RDS/DAB label parsing, JSON) runs on the host under unit tests; drivers are thin components on top. Features so far:
- FM with RDS (station name, radio text, alternate frequencies) and DAB+ with dynamic labels, slideshow and band scan
- Web radio streaming, mixed into the same DSP path
- Presets and audio profiles stored on the radio
- Alarms, sleep timer and NTP clock
- OTA firmware updates from GitHub releases, with a 60-second confirm and automatic rollback
iPhone / iPad app
A SwiftUI app finds the radio on the local network and controls everything: tuning, presets, EQ, web radio, alarms and firmware updates. It's in beta on TestFlight.
The board
- 6 layers, impedance-controlled, 50 × 90 mm, two solid ground planes under the RF, crystals and USB
- Three antenna zones: the ESP32 and BT1035 2.4 GHz antennas on opposite corners, FM/DAB on SMA, with keep-outs on every layer
- USB-C power, 3.3 V buck plus a low-noise 1.8 V LDO for the tuner
Fabrication and assembly by PCBWay
The board was fabricated and assembled by PCBWay, who sponsored part of the cost ($100). With a QFN tuner, an LQFP DSP, two 2.4 GHz modules and a USB-C connector on a 6-layer stack-up, hand assembly wasn't realistic. The lead times were the normal technical ones for this kind of job. The only part they don't stock is the FSC-BT1035, which I soldered by hand.
What helped me most was their support. During bring-up I couldn't get the Si4684 tuner to work, and on a board like this it's hard to tell whether the problem is hardware or firmware. PCBWay's support team helped me check the board and the assembly, which let me rule out hardware problems and find the real cause.
You can order the board from the shared project page on PCBWay (link below). Disclosure: PCBWay gives me a small percentage of those orders as store credit.
What's next
Version 2 is in the works: an ADAU1452 DSP instead of the ADAU1701, a BQ25896 charger for battery operation, and an FSC-BT1058 Bluetooth module. The layout has been reviewed with BoardLab.it, a PCB analysis tool I develop.
Links
- GitHub repository → https://github.com/manvalan/DigiRadio
- Order the board on PCBWay → https://www.pcbway.com/project/shareproject/DigiRadio_Open_Source_Hi_Fi_DAB_FM_Receiver_with_DSP_and_aptX_Adaptive_Blueto_a1952812.html
- Discussion on r/esp32 → https://www.reddit.com/r/esp32/s/uuytQciCvN
Components
- 1 × Silicon Labs Si4684-A10 DAB+/DAB/FM tuner
- 1 × Analog Devices ADAU1701 SigmaDSP
- 1 × Feasycom FSC-BT1035 Bluetooth 5.2 module (QCC3056, aptX Adaptive)
- 1 × Espressif ESP32-S3-WROOM-1 module
- 1 × 6-layer PCB, 50 × 90 mm (PCBWay)
- 1 × USB-C connector
- 1 × SMA connector + FM/DAB whip antenna
Photos of the assembled board



Michele