ESP32 Dual-Board Audio System SDMMC MP3 Player → I2S → BLE Audio Streamer
A two-ESP32 audio system where the first ESP32 plays MP3 files from SDMMC and outputs PCM audio via I2S, and the second ESP32 receives the audio via I2S RX and streams it over BLE.
Overview ESP32 S3 Liligo THMI #1 (TX) ESP32 DEV Module #2 (RX)
SDMMC → MP3 Decoder → I2S ───► I2S RX → BLE → Client TFT Touch UI BLE Audio Stream NTP Clock
Features
MP3 playback from SD card (SDMMC)
I2S audio transfer between two ESP32s
BLE audio streaming (custom BLE service)
Touch-based playback & volume control
TFT clock synchronized using NTP
Modular TX / RX architecture
ESP32 Roles ESP32 #1 – Audio Player (TX)
Reads MP3 files from SDMMC
Decodes audio using Helix
Outputs PCM via I2S (Master)
Touch TFT UI (Play / Volume / Track)
NTP-based analog + digital clock
ESP32 #2 – BLE Audio Streamer (RX)
Receives PCM via I2S (Slave)
Buffers audio frames
Streams audio over BLE notifications
I2S Wiring Signal ESP32 TX ESP32 RX BCK GPIO 15 BCK WS GPIO 16 WS DATA GPIO 17 DATA GND GND GND Audio Format
44.1 kHz
16-bit
Mono
I2S Standard
BLE Streaming Notes
BLE streams raw PCM, not MP3
Audio sent in small chunks (MTU-limited)
Custom BLE client required
Higher latency than I2S / Wi-Fi
SD Card Layout /Music/ song1.mp3 song2.mp3
Use Case
Wireless audio bridge
BLE audio experiments
Embedded audio systems
Modular audio processing
Limitations
Not standard BLE A2DP
BLE bandwidth limits quality
Requires custom BLE receiver