Disclosure: PCBWay sponsored the fabrication and assembly of this board. This post isn't written or reviewed by them, and all opinions are my own.
Hi all! This is DigiRadio, an open-source DAB+/DAB/FM receiver I designed around an ESP32-S3. I'd love some feedback on the board.
What's on the board
- ESP32-S3 as the host controller: Wi-Fi, BLE, HTTP API, OTA, and it drives the other three chips (SPI to the tuner, I²C to the DSP, UART to Bluetooth)
- Si4684 DAB+/DAB/FM tuner, external antenna on SMA, with its own low-noise 1.8 V rail
- ADAU1701 SigmaDSP for EQ, source mixing, bass/stereo enhancement and a live VU meter readback. It's also the I²S master at 12.288 MHz, so everything is a clean 256 × 48 kHz
- Feasycom FSC-BT1035 (Qualcomm QCC3056) for Bluetooth 5.2 out with aptX / aptX HD / aptX Adaptive
- The whole path tuner → DSP → Bluetooth is digital I²S at 48 kHz / 24-bit. No DAC/ADC in between: the only DAC is in your headphones or speaker
Layout
- 6 layers, impedance-controlled, 50 × 90 mm, two solid ground planes under the RF, crystals and USB
- Three antenna zones (ESP32 2.4 GHz, BT1035 2.4 GHz, FM/DAB on SMA), the two 2.4 GHz antennas placed on opposite corners, with full-stack keep-outs
- USB-C power, single 3.3 V rail plus the 1.8 V LDO for the tuner, USB routed on top as a 90 Ω pair over ground
Firmware and app, briefly
ESP-IDF in C++23: FM with RDS, DAB with DLS, web radio, presets, encrypted NVS, REST API, mDNS discovery, dual-partition OTA with rollback. A SwiftUI iOS app finds the radio on the LAN and controls it. The latest firmware (0.9.1) adds power on/standby from the app and live RDS: station name and RadioText update in real time, and you can tap an alternate frequency to retune.
The schematic is in the gallery: ESP32-S3 with USB-C and power, Si4684 tuner, BT1035 Bluetooth, ADAU1701 DSP.
Bring-up lessons
- RDS station name and RadioText never showed up: three stacked bugs, each one hiding the next
- Any EQ change muted all audio until I negated the ADAU1701 biquad feedback coefficients (SigmaStudio and the raw registers use opposite signs)
- The Si4684 crystal calibration has to be saved to EEPROM, or tuning is off after every cold boot
Schematic, Gerbers, BOM and firmware are all open (hardware CERN-OHL-S, firmware Apache 2.0):
- GitHub: https://github.com/manvalan/DigiRadio
- Project page on PCBWay (photos and fabrication files): https://www.pcbway.com/project/shareproject/DigiRadio_Open_Source_Hi_Fi_DAB_FM_Receiver_with_DSP_and_aptX_Adaptive_Blueto_a1952812.html
Happy to answer questions, and I'd especially like criticism of the RF layout and the antenna placement.
Source: r/esp32 · by /u/mikbigi