Skip to content

ESP32-S3 + PCM5102A

The cheapest and most common build: a generic ESP32-S3 dev board with an external PCM5102A I2S DAC plugged straight onto its pins. This is the default build environment (esp32s3) and the configuration the project is developed against.

For the parts list and step-by-step assembly, see shopping list and assembly.

Default I2S pins

Function GPIO PCM5102A pin
Bit clock 11 BCK
Audio data 12 DIN
Word select (LRCLK) 13 LCK
Software ground 14 GND
Power 5V VIN

MCLK is not needed by the PCM5102A, which generates it internally. It is nonetheless routed to GPIO8 by default, which is useful if you want to drive a different converter such as a WM8805 I2S-to-S/PDIF bridge.

Pins can be changed under Board Configuration → Pin Configuration in menuconfig.

Bridge VIN/VOUT

Most ESP32-S3 boards ship with the VIN/VOUT solder pads open. Bridge them, or the DAC gets no 5 V power and you hear nothing.

Flashing

Use the installer on the flashing page.

pio run -e esp32s3 -t upload
pio run -e esp32s3 -t uploadfs

The second command is required — it writes the web UI to SPIFFS.

idf.py set-target esp32s3
idf.py -DSDKCONFIG_DEFAULTS="config/sdkconfig.defaults;config/sdkconfig.defaults.esp32s3" build
idf.py -p /dev/ttyUSB0 flash

No Bluetooth on the S3

The ESP32-S3 has Bluetooth LE only, not Bluetooth Classic, so A2DP audio is not available. The esp32s3 build contains no Bluetooth support at all. Use an ESP32-based board such as the SqueezeAMP or Esparagus Audio Brick if you want to stream over Bluetooth.

Variants

Waveshare ESP32-S3

Waveshare's ESP32-S3 boards use a different pin arrangement and have their own environment and prebuilt binary:

pio run -e waveshare-esp32s3 -t upload
pio run -e waveshare-esp32s3 -t uploadfs

JTAG debugging

esp32s3-jtag extends the esp32s3 environment and uploads over the built-in USB JTAG bridge instead of the serial bootloader:

pio run -e esp32s3-jtag -t upload

ESP32-S2

An ESP32-S2 build is produced in CI and published as airplay2-receiver-esp32s2.bin, flashable from the browser installer. There is no PlatformIO environment for it — build it through ESP-IDF:

idf.py set-target esp32s2
idf.py -DSDKCONFIG_DEFAULTS="config/sdkconfig.defaults;config/sdkconfig.defaults.esp32s2" build

ESP32-WROVER

For older WROVER modules with 4 MB flash, esp32wrover-dev targets the Freenove WROVER board and includes Bluetooth:

pio run -e esp32wrover-dev -t upload