Skip to content
DnsLister Forum

Where domain hunters compare notes

DigiRadio: a 6-layer ESP32-S3 board that receives DAB+/FM and sends it to Bluetooth over a fully digital audio pat

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):

Happy to answer questions, and I'd especially like criticism of the RF layout and the antenna placement.

Source: r/esp32 · by /u/mikbigi

Leave a Reply

Your email address will not be published. Required fields are marked *