Ready-made ESP32-S3 multi-room audio hardware and firmware.
A ~$30 per-room speaker using off-the-shelf modules and no soldering beyond wire terminals.
| Part | Qty | Price | Link |
|---|---|---|---|
| ESP32-S3 Supermini | 1 | ~$4.25 | Amazon B0GS283V6F |
| MAX98357A I2S amplifier breakout | 1 | ~$2.00 | Amazon B0B4GK5R1R |
| Saiyin 3" wall-mount passive speaker | 1 | ~$18.00 | Amazon B0DGLMY9SB |
| Dupont jumper wires F-F (recommend 10 cm) | 5 | <$1.00 | Amazon B07GD312VG |
| USB-C power supply + cable | 1 | ~$4.50 | Amazon B08G4GRQYV |
| Total | ~$29.75 |
| MAX98357A pin | ESP32-S3 Supermini pin |
|---|---|
| BCLK | GPIO 11 |
| LRC | GPIO 10 |
| DIN | GPIO 12 |
| VIN | 5V |
| GND | GND |
| Speaker+/− | Speaker terminals |
⚠ These are experimental development builds. Expect bugs.
Plug in via USB and flash below. Requires Chrome or Edge, or Firefox with the WebSerial extension.
| Hardware | Signal | GPIO | Component |
|---|---|---|---|
| OTS | LRCLK | 4 | MAX98357A |
| BCLK | 5 | MAX98357A | |
| DOUT | 6 | MAX98357A | |
| PCB | LRCLK | 6 | MAX98357A |
| BCLK | 5 | MAX98357A | |
| DOUT | 4 | MAX98357A |
Off-the-shelf is the generic ESP32-S3 Supermini — hand-wired or on the Speakeasy Lowcost PCB — with LRCLK/BCLK/DOUT on GPIO 4/5/6. PCB is the custom Speakeasy board (ESP32-S3-MINI-1U-N4R2), which uses the same three pins but swaps LRCLK and DOUT: DOUT/BCLK/LRCLK on GPIO 4/5/6.
The audio streaming protocol. Sendspin integrates natively with Music Assistant for synchronized multi-room audio. Snapcast (ESPHome) wraps CarlosDerSeher/snapclient with Home Assistant integration. Snapcast (standalone) runs CarlosDerSeher/snapclient bare on ESP-IDF with no ESPHome or HA integration.
BLE is used for WiFi provisioning via Improv — configure WiFi credentials from a phone without USB. Disabling it frees ~100 KB of RAM and is recommended once the device is set up.
Pull OTA lets the device fetch and flash firmware from a URL via its web UI.
Based on CarlosDerSeher/snapclient with the following additions:
/ota-update.html or POST /api/ota/upload. Displays current and pending firmware details (version, build date, SHA256) side-by-side before flashing. The OTA binary is also available for download above.POST /api/ota/pull), version-checks against running firmware, then downloads and flashes the listed binary with SHA-256 integrity verification. Pre-configured to pull from this page.