- C++ 58.8%
- JavaScript 17.4%
- HTML 14.4%
- Shell 6.6%
- SCSS 1.9%
- Other 0.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .github/workflows | ||
| .vscode | ||
| docs | ||
| firmware | ||
| flash-tools | ||
| hardware | ||
| images | ||
| installer | ||
| squeezelite-configs | ||
| .gitignore | ||
| .gitmodules | ||
| LICENSE | ||
| README.md | ||
ESP32 Audio Docks and Louder ESP
ESP32 Audio Docks is a range of development boards (earlier docks) that allow you to develop Audio solutions based on ESP32 chips. These were created to make Audio development entry as easy and inexpensive as possible.
| HiFi-ESP32 | HiFi-ESP32-Plus |
|---|---|
| Loud-ESP32 | Loud-ESP32-Plus |
| Louder-ESP32 | Louder-ESP32-Plus |
| Louder-ESP32-mini | Louder-ESP32-Pro |
| Amped-ESP32 | Amped-ESP32-Plus |
⚠️ Looking for Esparagus boards? Check out sister repository: Esapragus Media Center
Table of Contents
- ESP32 Audio Docks and Louder ESP
- Table of Contents
- Motivation
- HiFi-ESP32 and Hifi-ESP32-Plus
- Loud-ESP32 and Loud-ESP32-Plus
- Louder-ESP32 and Louder-ESP32 Plus
- Louder-ESP32 Mini
- Louder-ESP32 Pro
- Amped-ESP32 and Amped-ESP32-Plus
- Features
- Boards Pinout
- Legacy boards
- HiFi-ESP32 and Amped-ESP32
- Amped-ESP32-Plus
- HiFi-ESP32 Plus and Amped-ESP32 Plus
- Loud-ESP32
- Loud-ESP32-Plus
- Louder-ESP32 and Louder-ESP32-Plus
- Ethernet (all boards)
- Optional peripheral (all boards)
- Fan (optional on Louder-ESP32-Pro boards)
- Mic header
- TFT and Fan header (Louder-ESP32 Pro boards)
- Which software is right for me
- Software samples
- Using ESP32 Audio Boards with the Home Assistant
- Squeezelite-ESP32
- Airplay-2
- Other smart home options
- Standalone Snapclient
- Flashing ESP32-S3
- Hardware
- ESP Audio Solo
- ESP Audio Duo
- HiFi-ESP
- Louder ESP
- HiFi-ESP32
- Loud-ESP32
- Amped-ESP32
- Amped-ESP32 with TPA3118/TPA3128 amp
- Louder-ESP32
- Optional SPI Ethernet module
- BTL and PBTL mode (Louder and Amped boards)
- TAS5805M DSP capabilities
- Louder-ESP32 and Amped-ESP32 power considerations
- Speakers selection
- OLED screen
- TFT screen
- Case
- Louder-ESP32 Pro case
- Louder-ESP32 Mini shell
- Louder-ESP32 Mini Speakers Compatibility
- Louder-ESP32 Mini USB-PD note
- Community projects
- Where to buy
Motivation
I spent the last few years developing different solutions based on ESP devices. It all started with ESP8266, where CPU power is not really sufficient to do real-time decoding, so you're limited to a rather simple ding-dong business. Then ESP32 came, bringing two much more capable cores, so you have a powerhouse to handle communication and decoding at the same time. Perhaps most importantly, it also came with SPIRAM, so you can do decent buffering (essential for streamed content). Now, new ESP32 C-Series and S-Series chips are entering the market, and their potential is mostly unrealized as of today.
I created those docks and subsequently development boards to be able to quickly prototype for the whole range of ESP8266 and ESP32 chips, starting with the simplest finger-sized toys and going all the way up to full-sized speakers.
HiFi-ESP32 and Hifi-ESP32-Plus
The HiFi-ESP32 is a first-in-line product that uses the legendary PCM5100 series DAC with supreme audio quality. It exposes line-level output that you can plug into a stereo amplifier. Analog power comes through an Ultra-low-noise LDO, making sure no interference from the MCU comes through to your speakers. Spend as much as you need on the external amp to deliver the sound you like (personally, I prefer late 80's audio gear).
| HiFi-ESP32 | HiFi-ESP32-Plus |
|---|---|
The HiFi-ESP32 Plus represents the next evolution of the board, featuring the advanced PCM5122 DAC with built-in DSP capabilities. This board maintains the same audio quality as the original HiFi-ESP32 while adding powerful digital signal processing features, including parametric EQ (6 BQs per channel), DRC, and crossover functionality (with output to downstream DAC). The PCM5122's flexible DSP engine can be configured for various audio enhancement scenarios, making it ideal for projects requiring sound tuning (why would you not)
Key Features:
- PCM5122 DAC with integrated DSP
- Parametric EQ and crossover capabilities (for cascading DACs)
- Digital volume control (avoids loss of resolution compared to software volume)
- Advanced audio processing features (DRC)
- Same form factor and connectivity as HiFi-ESP32
Loud-ESP32 and Loud-ESP32-Plus
The Loud-ESP32 uses a dual MAX98357 HiFi DAC with a built-in highly efficient D-class amp to deliver 3 to 5W of music power directly to your speakers. It is not too loud, but also very simple to use and fun to play with. When DAC is not in use, it goes into shutdown mode, making sure no hissing will keep you up at night. It powers from a standard USB-C power source, like a phone charger, etc.
| Loud-ESP32 | Loud-ESP32-Plus |
|---|---|
The Loud-ESP32-Plus model hires a much more powerful Infineon MA12070P DAC with up to 60W per channel. Due to the D-class amp, they are highly efficient yet high-quality audio streamers. It lacks DSP features, but has the most raw horsepower across the line. It is in beta testing, and I'm still trying to fix minor issues with the DAC driver.
Louder-ESP32 and Louder-ESP32 Plus
The Louder-ESP32 is a top-of-the-range model that uses a modern, highly capable TAS5805M DAC and is aimed at being paired with medium-to-large speaker systems. With 25W per channel stereo output, it packs a punch and can easily enliven living quarters or dorm rooms. It is highly efficient, but much more demanding for power when cranked; therefore, it also uses an external power adapter using a standard jack. This DAC has a built-in DSP, so you can have a lot of fun with complex EQ, soft-clipping, DRC compression, and AGL tools, among other things.
| Louder-ESP32 | Louder-ESP32-Plus |
|---|---|
The Louder-ESP32-Plus upgrades the DAC to the TAS5825M model, which is more efficient (and therefore more powerful) and more capable. It introduces advanced DSP features that are not available on the base model, as it has a much more powerful DSP processor.
- TAS5825M DAC with integrated DSP
- Digital volume control (avoids loss of resolution compared to software volume)
- Gain digital control
- Parametric EQ (15xBQ), 128-tap FIR, 3-band DRC, AGL
- Advanced DSP: Smart Excursion, Smart Thermal, Smart Bass, SmartEQ
Louder-ESP32 Mini
Louder-ESP32-mini is a compact and stripped-down version of the Louder-ESP32, which would replace the standard speaker terminal on your old speakers, turning them into a Hi-Fi audio solution for your smart home.
It comes in two sizes that are most common among off-the-shelf speakers: 42x42mm (small speakers typically) and 52x52mm (for larger models).
Louder-ESP32-mini is equipped with a high-quality TAS5805M DAC with powerful DSP features, allowing audio tuning to turn small speakers into high-quality audio streamers. Onboard ESP32-S3 with 8MB PSRAM is there to ensure enough horsepower for solid streaming capabilities.
It is designed to be as affordable as it can be, so more speakers can avoid landfills and be an integral part of smart homes instead. It uses minimal (if any) extra peripherals, and it requires no soldering to operate. The part choice was carefully done to make it production-friendly and affordable for everyone
| Front | Back |
|---|---|
Louder-ESP32 Pro
On the other side of the scale, Louder-ESP32-Pro is a feature-packed version of the Louder-ESP32-Plus, which hosts most of the optional extras as standard, adds support for color TFT screens, and, perhaps most importantly, adds an industrial-grade heat release solution for reliable heavy-duty operation.
It comes in Raspberry Pi 5 shape with the most important component placed to follow the original heat release pattern. This allows the use of Raspberry Pi aluminum radiators, including those with soft-controlled fan connectors, that can be driven through Louder-ESP32-Pro software when operating in hot conditions.
Louder-ESP32-Pro is equipped with a high-quality TAS5825M DAC with powerful DSP features, allowing audio tuning to turn your speakers into high-quality audio streamers, big or small likewise. Onboard ESP32-S3 with 8MB PSRAM is there to ensure enough horsepower for solid streaming capabilities.
Recommended power adapter
Louder-ESP32-Pro is designed to be powered from a USB-C power source, so powering it is as easy as plugging in a standard laptop power charger. It can accept a wide range of voltages, but for maximum performance, a 20V 3.25A 65W power adapter is recommended. This will ensure that the board can deliver its full audio output capabilities without power limitations.
| Model | Image |
|---|---|
| 20V 3.25A 65W AC Laptop Power adapter Charger |
It will also work from Quick-charge power adapters (9V, 12V) that support USB-PD protocol, and even bare USB-C power sources, but the maximum output will be limited to the power adapter's capabilities.
Amped-ESP32 and Amped-ESP32-Plus
The PCM5100 HiFi DAC is combined with a highly efficient TPA31-series D-class amplifier. It brings all the best from the HiFi model and adds an onboard amp to form a complete solution that can be paired with speakers. Compared to the Louder models, it has similar power capabilities, but it is much simpler to use since it only needs a valid I2S signal to operate, so a simple book example code will do it. It adds line-out, so you have a chance to switch betwwen built-in amp and external, if you need to.
| Amped-ESP32 | Amped-ESP32-Plus |
|---|---|
Building upon the success of the Amped-ESP32, the Amped-ESP32 Plus combines the powerful PCM5122 DAC with the same TPA31-series amplifier. This board offers the same DSP capabilities as the HiFi-ESP32-Plus while providing built-in amplification for direct speaker connection. The PCM5122's DSP features will enable advanced audio processing, including speaker correction, room EQ, and other enhancements.
Features:
- PCM5122 DAC with integrated DSP + TPA3110/TPA3118 D-class amplifier
- Digital EQ and dynamic range processing
- Same power output as Amped-ESP32 with enhanced audio quality
TPA3110 vs TAP3118 designs
Recently, all Amped boards were migrated to use the new TPA3118 amp. Benefits that the new TPA3118 amp brings:
- It is more efficient (about half the heat with the same output power, compared to TPA3110), so the board can sustain higher power for longer
- It has a true MUTE pin that can be connected to the GPIO and shut down the output driver when no audio is playing
- It can be powered from a 5V source, so if you're not looking for maximum power, you can use a USB-C power adapter alone
- Being a newer design, it has better audio quality. I can't hear it, but people say it sounds better
Features
First generation docks
| ESP Audio Solo | ESP Audio Duo | Hifi ESP | Louder ESP |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| ESP8266, ESP32C3, ESP32S2 Mini modules | ESP32 Mini Module | ESP32 Mini Module | ESP32 Mini Module |
| Single I2S DAC (MAX98357) with built in D-Class amp | Dual I2S DAC (MAX98357) with built in D-Class amp | PCM5100A 32bit Stereo DAC -100 dB typical noise level | Stereo I2S DAC (TAS5805M) with built in D-Class amp |
| 3W | 2x 3W | Non-amplified stereo output | 2x 32W (4Ω, 1% THD+N) |
| 1.5W | 2x 1.5W | Non-amplified stereo output | 2x 22W (8Ω, 1% THD+N) |
| 8MB PSRAM (4MB usable) | 8MB PSRAM (4MB usable) | 8MB PSRAM (4MB usable) | |
| WiFi (ESP8266, ESP32S2) WiFi + BT5.0 (ESP32C3) | WiFi + BT4.2 + BLE | WiFi + BT4.2 + BLE | WiFi + BT4.2 + BLE Ethernet |
| HiFi-ESP32 | HiFi-ESP32 Plus | Loud-ESP32 | Loud-ESP32-Plus | Louder-ESP32 | Louder-ESP32 Mini | Louder-ESP32 Plus | Louder-ESP32 Pro | Amped-ESP32 | Amped-ESP32 Plus | |
|---|---|---|---|---|---|---|---|---|---|---|
| Image (ESP32) | n/a | n/a | ||||||||
| MCU | ESP32-WROVER-N8R8 | ESP32-WROVER-N8R8 | ESP32-WROVER-N8R8 | ESP32-WROVER-N8R8 | ESP32-WROVER-N8R8 | n/a | ESP32-WROVER-N8R8 | n/a | ESP32-WROVER-N8R8 | ESP32-WROVER-N8R8 |
| Image (ESP32-S3) | ||||||||||
| MCU (S3) | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 | ESP32-S3-WROOM-N8R8 |
| DAC | PCM5100A 32bit Stereo DAC (-100 dB typical noise level) | PCM5122 32bit Stereo DAC with integrated DSP (-112 dB typical noise level) | Dual I2S DAC (MAX98357) with built in D-Class amp | Infineon MA12070P with built-in D-Class amp |
Stereo I2S DAC (TAS5805M) with built in D-Class amplifier and powerful DSP | Stereo I2S DAC ( TAS5805M ) with built in D-Class amplifier and powerful DSP |
Stereo I2S DAC ( TAS5825M ) with built in D-Class amplifier and powerful DSP |
Stereo I2S DAC ( TAS5825M ) with built in D-Class amplifier and powerful DSP |
PCM5100A 32bit Stereo DAC working with TPA3110D2 D-Class amp TPA3128D2 amp starting from Rev H |
PCM5122 32bit Stereo DAC with DSP + TPA3110D2 or TPA3118D2 amp |
| Line-out (possibility to connect external amplifier) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Output (4Ω, 1% THD) | ❌ | ❌ | 2x 5W | 2x 60W | 2x 32W, 1x 45W (bridged) |
1x 5W | 2x 45W, 1x 53W (bridged) |
2x 45W, 1x 53W (bridged) |
(TPA3110) 2x 25W 1x 40W (bridged) (TPA3128) 2x 25W 1x 60W (bridged) |
(TPA3110) 2x 25W 1x 40W (bridged) (TPA3118) 2x 25W 1x 60W (bridged) |
| Output (8Ω, 1% THD) | ❌ | ❌ | 2x 3W | 2x 35W | 2x 22W | 1x 3W | 2x 30W | 2x 30W | 2x 25W | 2x 25W |
| Flash | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB |
| PSRAM | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB | 8MB |
| Power | 5V over USB-C | 5V over USB-C | 5V (up to 2.5A) from USB-C | 5..26V from external PSU | 5..26V from external PSU | 5V (up to 2A) from USB-C | 5..26V from external PSU | USB-PD enabled power adapter (up to 65W) | (TPA3110) 9..26V (TPA3128) 5..26V from external PSU |
(TPA3110) 9..26V (TPA3118) 5..26V from external PSU |
| Connectivity | WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BLE | WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BLE + Ethernet | WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
WiFi + BT4.2 (except S3) + BLE Ethernet (optional module) |
| Built-in DSP (Digital Signal Processor) | ❌ | Basic (6-band EQ, DRC) | ❌ | ❌ | Advanced (15-band EQ, DRC, AGL, FIR, etc.) | Advanced (15-band EQ, DRC, AGL, FIR, etc.) | Advanced+ (15-band EQ, DRC, AGL, FIR, Smart features.) | Advanced+ (15-band EQ, DRC, AGL, FIR, Smart features.) | ❌ | Basic (6-band EQ, DRC) |
| Built-in mic (voice assist) | optional | optional | optional | optional | optional | ❌ | optional | ✅ | optional | optional |
| Built-in IR reader | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Software support | ||||||||||
| Squeezelite-ESP32** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Snapclient*** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ESPHome (Media player) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ESPHome (Sendspin player)**** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ESPHome (Snapclient player)***** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
** Squeezelite-ESP32 support for the ESP32-S3 is an experimental feature and is not fully stable; for styable operation, 'classic' ESP32 is recommended. Please refer to the original repo for up-to-date support information
*** Snapclient support for the ESP32-S3 is in beta and not fully stable as well. For best results, 'classic' ESP32 is recommended.
**** Sendspin player is a beta feature and in active development; currently, ESP32-S3 works considerably better than classic ESP32, but it is still in development, and the situation will improve over time.
***** Snapclient component in ESPHome is a beta feature, developed by the community. Please check the current development status for up-to-date support information.
Onboard PSRAM
Audio streaming requires proper buffering to work; even with the ESP32's 500K of RAM, it is a challenging task. For that reason, most of the projects will require WROVER modules that have onboard PSRAM chips. All ESP32 Audio boards have an 8MB PSRAM chip onboard, connected via a high-speed interface. Any code using PSRAM just works out of the box.
Boards Pinout
Legacy boards
First generation docks
ESP Audio Solo
| I2S CLK | I2S DATA | I2S WS | |
|---|---|---|---|
| ESP8266 | 15 | 3 | 2 |
| ESP32-C3 | 5 | 20 | 6 |
| ESP32-S2 | 12 | 37 | 16 |
ESP Audio Duo
| I2S CLK | I2S DATA | I2S WS | PSRAM CE | PSRAM CLK | |
|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 16 | 17 |
HiFi-ESP
| I2S CLK | I2S DATA | I2S WS | PSRAM CE | PSRAM CLK | |
|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 16 | 17 |
Louder ESP
| I2S CLK | I2S DATA | I2S WS | PSRAM CE | PSRAM CLK | TAS5805 SDA | TAS5805 SCL | TAS5805 PWDN | TAS5805 FAULT | |
|---|---|---|---|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 16 | 17 | 21 | 27 | 33 | 34 |
| ESP32-S3 | 14 | 16 | 15 | - | - | 8 | 9 | 17 | 18 |
HiFi-ESP32 and Amped-ESP32
| I2S CLK | I2S DATA | I2S WS | PSRAM RESERVED | AMP EN | |
|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 16, 17 | 13 (rev H+) |
| ESP32-S3 | 14 | 16 | 15 | 35, 36, 37 | 17 (rev J+) |
Amped-ESP32-Plus
| I2C CLK | I2C DATA | PSRAM RESERVED | AMP EN | |
|---|---|---|---|---|
| ESP32 | 27 | 21 | 16, 17 | 13 |
| ESP32-S3 | 08 | 18 | 35, 36, 37 | 17 |
HiFi-ESP32 Plus and Amped-ESP32 Plus
| I2S CLK | I2S DATA | I2S WS | I2S MCLK (optional) | PSRAM RESERVED | DAC/AMP EN | I2C SDA | I2C CLK. | |
|---|---|---|---|---|---|---|---|---|
| ESP32 (J) | 26 | 22 | 25 | 0 | 16, 17 | 13 | 27 | 21 |
| ESP32-S3 (H) | 14 | 16 | 15 | 0 | 35, 36, 37 | 4 | 41 | 42 |
| ESP32 (J1+) | 26 | 22 | 25 | 0 | 16, 17 | 13 | 21 | 27 |
| ESP32-S3 (H1+) | 14 | 16 | 15 | 0 | 35, 36, 37 | 4 | 42 | 41 |
Loud-ESP32
| I2S CLK | I2S DATA | I2S WS | DAC EN | PSRAM RESERVED | |
|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 13 | 16, 17 |
| ESP32-S3 | 14 | 16 | 15 | 8 | 35, 36, 37 |
Loud-ESP32-Plus
| I2S CLK | I2S DATA | I2S WS | DAC ENABLE | DAC MUTE | SDA | SCL | PSRAM RESERVED | |
|---|---|---|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 13 | 33 | 21 | 27 | 16, 17 |
| ESP32-S3 | 14 | 16 | 15 | 17 | 18 | 9 | 8 | 35, 36, 37 |
Louder-ESP32 and Louder-ESP32-Plus
| I2S CLK | I2S DATA | I2S WS | PSRAM RESERVED | I2C SDA | I2C SCL | TAS58XX PWDN | TAS58XX FAULT | |
|---|---|---|---|---|---|---|---|---|
| ESP32 | 26 | 22 | 25 | 16, 1 | 21 | 27 | 33 | 34 |
| ESP32-S3 | 14 | 16 | 15 | 35, 36, 37 | 8 | 9 | 17 | 18 |
Ethernet (all boards)
| SPI CLK | SPI MOSI | SPI MISO | SPI CS | SPI HOST/SPEED | ETH INT | ETH RST | |
|---|---|---|---|---|---|---|---|
| ESP32 | 18 | 23 | 19 | 05 | 2/20MHz | 35 | 14 |
| ESP32-S3 | 12 | 11 | 13 | 10 | SPI2/20MHz | 6 | 5 |
Optional peripheral (all boards)
| IR IN | RGB OUT | OLED SPI HOST/SPEED | OLED SPI CLK | OLED SPI MOSI | OLED SPI MISO | OLED SPI CS | OLED SPI DC | OLED RST | |
|---|---|---|---|---|---|---|---|---|---|
| ESP32 | 39 | 12 | 2/20MHz | 18 | 23 | 19 | 15 | 4 | 32 |
| ESP32-S3 | 7 | 9 | SPI2/20MHz | 12 | 11 | 13 | 39 | (37) | 38 |
| ESP32-S3 (Rev J3+) | 7 | 9 | SPI2/20MHz | 12 | 11 | 13 | 47 | 38 | 48 |
| HIFI-ESP32-S3 (Rev G2+) | 7 | 9 | SPI2/20MHz | 12 | 11 | 13 | 39 | 40 | 38 |
Fan (optional on Louder-ESP32-Pro boards)
Louder-ESP32-Pro have a 4-pin fan connector, with a size and pinout borrowed from the Raspberry Pi 5 specification. It can be used to connect a 5V fan, which can be controlled by the onboard ESP32-S3. The fan speed can be set in software, and the actual speed can be read back from the fan's tachometer output.
| IN (RPM read) | OUT (speed set) | |
|---|---|---|
| ESP32-S3 | 1 | 2 |
Mic header
Both versions of the Louder-ESP32 boards (ESP32 Rev. H6+, ESP32-S3 Rev. K0+) and HiFi-ESP32 (ESP32 Rev. F3+, ESP32-S3 Rev. G2+) have an unsoldered header for external I2S mic: left and right channels. ESP32 uses the same I2S bus with an extra DATA IN pin due to the pin limitations, while S3 uses a dedicated I2S bus. It can be used for wake word functionality in the Home Assistant or for custom firmware.
| I2S CLK | I2S WS | I2S DATA | |
|---|---|---|---|
| ESP32 | 26 | 25 | 13 |
| ESP32-S3 | 41 | 40 | 39 |
| HIFI-ESP32-S3 (Rev G2+) | 17 | 18 | 8 |
The mic model that I used for testing and validation is the INMP441 MEMS microphone; the pinout is created for this model. Other models might be available.
TFT and Fan header (Louder-ESP32 Pro boards)
| FAN PWM | FAN SPD | TFT SPI HOST/SPEED | TFT SPI CLK | TFT SPI MOSI | TFT SPI MISO | TFT SPI CS | TFT SPI DC | TFT RST | TFT BACKLIGHT | |
|---|---|---|---|---|---|---|---|---|---|---|
| ESP32-S3 | 2 | 1 | SPI2/20MHz | 12 | 11 | 13 | 47 | 38 | 48 | 42 |
Which software is right for me
Software samples
In the software section, two firmware examples are provided.
- esp32-i2s-bare is base I2S implementation based on ESP-IDF implementation directly.
- esp32-i2s-esp8266audio is based on excellent ESP8266Audio library (it works with the whole ESP range, don't get fooled by the name), providing minimum code implementation.
- esp32-i2s-web-radio is based on the same library, providing minimum web-readio stream player. It expects a playlist as input in the 'data' folder.
- Squeezelite-ESP32 - see more details below
Platformio IDE
All samples are provided as Plarformio IDE projects. After installing it, open the sample project. Select the proper environment based on your dock. Run the Build and Upload commands to install necessary tools and libraries, and build and upload the project to the board. Communication and proper upload method selection will be handled by IDE automatically.
Arduino IDE
Follow the ESP8266Audio library guide. Default settings will work out of the box with ESP8266 and ESP32 boards. For the ESP32C3 and ESP32S2 board, please adjust the pinout according to the above section
Using ESP32 Audio Boards with the Home Assistant
There are several ways ESP32 Audio Boards can be integrated into the Home Assistant setup. Each of them gives a unique feature, losing some other in return. As usual, there is no perfect solution for everyone, but perhaps there is one for you. Below is the summary table of the methods known to me and tested by me.
| Integration type | Tested | Description | Pros | Cons |
|---|---|---|---|---|
| LMS/Airplay | Yes | Connect to Music Assistant as external protocol device. Can play your media library and internet radio | Still can use squeezelite, i.e. use Spotify Connect and Apple Airplay when HA is not using the device | No native integration into HA, only works with Music Assistant |
| ESPHome way | Yes | Connect as HA media device. Can be used with any HA integration, including Music Assistant, Text-to-Speech announcements, alarms, etc | More integrations with HA, more flexibility in use case | No longer works as Spotify, Airplay, etc. |
| Snapcast way | Yes | Connect to Music Assistant as snapcast protocol device. Can play your media library and internet radio. | Perfect for multiroom sync (Sonos-like, perhaps even better). Can be used with other Snapcast servers around the house | No longer works with Spotify, AirPlay, etc. No native integration into HA only works with Music Assistant |
Below are specific steps that you need to follow to spin up ESP32 Audio Boards in the Home Assistant
Configuring Home Assistant
I prefer to use HA with the Music Assistant. This way, you can integrate both your media library and internet radio and have a nice UI/UX at the same time (including mobile).
Generally, you need to have a supported HA (native) installation and follow these steps. I will place here a short version to have a reminder for future self
Install instructions
| Step | Screenshot |
|---|---|
| Add SSH Addon Navigate to Settings > Addons > Add Addon Search for SSH and install it. Enable Show in sidebar switch while you there |
|
| Start SSH Addon SSH addon won't start until you add at least one SSH public key to it. So navigate to SSH Addon Settings and add a key (or password) to the config It should be able to start now |
|
| Install Community Store Run this command in the Terminal session wget -O - https://get.hacs.xyz | bash - You need to restart your HA after that |
|
| Add HACS Navigate to Settings > Devices as Services > Integrations > Add Integration, search for HACS, and add it to the HA You'll need to authorize your extension to your GitHub account |
|
| Install Music Assistant via HACS From the HACS menu, search for Music Assistant and press the Download button You need to restart HA again In the Settings > Addons, you should be able to see MA and enable sidebar navigation for it. |
|
| Configure Music Assistant Before you enable Integration (that will in turn add speaker devices), you need to enable MA providers Go to MA > Settings > Providers and enable both Music providers and Player providers that interest you. If you're not sure, enable all of them; you can disable them later on. |
|
| Add Music Assistant Integration Navigate to HA Settings > Devices & services > Integrations. Click the big + ADD INTEGRATION button, look for Music Assistant, and click to add it. It should discover and add media devices based on the providers you're enabled in the previous step |
|
| Add Music Devices discovered by MA You should be able to add and use discovered devices. More details in below sections |
Home Assistant: LMS or Airplay
When you have squeezelite-esp32 installed on your ESP32 Audio Board (either stock or manually going through steps), it will announce itself by multiple protocols in the network:
- Bluetooth
- LMS or slimproto - auto-discovered by HA
- Apple AirPlay - auto-discovered by HA
- Spotify Connect
The power of this method is that you can use all four ways outside of HA, for example, using your smartphone and Spotify app, and still have it integrated into HA at the same time.
Install instructions
Native HA integration
Make sure your MA Slimproto provider is disabled; it will conflict with the native HA integration
Integrate into Music Assistant directly
Disable SlimProto integration in the HA if you want to go the MA way. If you enabled SlimProto and AirPlay providers in the MA, you should find your device as both a Slimproto device and an AirPlay device. It is up to you which protocol to use; generally, they both work perfectly well.
Home Assistant: ESPHome way
All ESPHome configurations are in the firmware/esphome/ folder. See the ESPHome README for full details on supported hardware variants, configuration options, the package system, and build instructions.
All configs use the ESP-IDF framework (preferred for audio — lighter, faster, and more stable than Arduino). Each board directory contains up to four firmware variants:
| Variant | Files | Description |
|---|---|---|
| Standard media player | *-idf.yaml |
Native HA media player with mixer, resampler, TTS and announcement ducking |
| Snapclient | *-snapclient.yaml |
Snapcast multi-room client with 18-band software EQ (experimental) |
| Sendspin | *-sendspin.yaml |
ESPHome-native multi-room playback via Sendspin protocol (experimental, 2026.2.0+) |
| Voice Assistant | *-voice-assist.yaml |
Wake-word voice assistant with HA Voice integration (Plus boards only) |
Both ESP32 and ESP32-S3 variants are covered for each board. S3 variants carry -s3- in the filename.
Sendspin references:
Install steps
Install instructions
| Step | Screenshot |
|---|---|
| Add ESPHome Addon Navigate to HA Settings > Addons > Add Addon Search for SSH and install it. Enable Show in sidebar switch while you there |
|
| Prepare ESP32 Audio Board for ESPHome onboarding Use Web Flasher to flash stock ESPHome into device |
|
| Onboard ESP32 Audio Board ESPHome device into HA Go to the HA ESPHome page and you should be able to find a new device. You need to onboard it with the below config (feel free to change names) This will take a moment or two |
|
| Validate device in the ESPHome | |
| Add ESPHome Integration Navigate to HA Settings > Devices & services > Integrations. Click the big + ADD INTEGRATION button, look for ESPHome, and click to add it. It should discover and add ESPHome media devices based on the previous step |
|
| Use your media device in the HA | |
| Use your media device in the MA Add Music Assistant HA MediaPlayers provider to discover new Media device |
The latest changes in the ESPHome (deprecation of the custom components) triggered a work to implement an external TAS5805M DAC ESPHome component. It took some time, but this driver implements a few very important features of the TAS5805M DAC that can not only be used in the device configuration, but also in various automations and complex logic. Worth noting:
- Possibility to configure Analog Gain (depending on the power supply you have, more details here) |
- Advanced digital volume configuration (set minimum, maximum, and step value)
-
- Automatic powersave modes based on playback state
- DAC mode: 2 channel, or 1 channel bridged mode (more details here)
- Mixer mode: MONO, STEREO, INVERTED, LEFT, RIGHT (more details here)
- My favorite: 15 band equalizer with [-15 dB .. +15 dB] range, which is an absolute treat to configure your speakers to your audio taste
-
- For the first time: read and reset fault states, no need to reboot the device. Not only reports them back to HA, but also example of automatic correction is provided (slowly reduce volume on overheat)
-
We have some plans for further development of the ESPHome driver, implementing subwoofer and satellite profiles (for 2.1 and bi-amp configs), enabling soft-clipping, and perhaps even unleashing the power of all BQ-parameters (to enable speaker-specific compensation of the DAC). Stay tuned!
PCM5122 DSP capabilities (HiFi-ESP32 Plus & Amped-ESP32 Plus)
The PCM5122 DAC featured in the new Plus models brings advanced DSP capabilities that were previously unavailable in the PCM5100-based lineup. This powerful 32-bit DAC includes a flexible DSP engine that enables low-latency sophisticated audio processing directly on the chip, reducing CPU load and providing professional-grade audio enhancement features.
Key DSP Features:
- Parametric EQ: ^BQs per channel of parametric equalization for precise frequency response shaping
- Dynamic Range Control (DRC): Automatic volume management and dynamic compression
- Crossover Networks: Digital crossover filters for bi-amp and multi-way speaker systems
- Bass/Treble Enhancement: Dedicated low and high frequency boost/cut controls
- Volume Control: High-resolution digital volume with soft mute functionality
- Sample Rate Conversion: Automatic handling of different input sample rates
Planned Implementation:
- Integration with ESPHome for Home Assistant control of DSP parameters
- Real-time EQ adjustment through UI
- Preset management for different listening environments
- Advanced crossover configurations for 2.1 setups
The PCM5122's DSP features will be gradually unlocked through firmware updates, starting with basic EQ and volume control, and expanding to include advanced crossover and room correction features. This positions the HiFi-ESP32 Plus and Amped-ESP32 Plus as professional-grade audio development platforms suitable for high-end audio applications.
Development Status:
- - Hardware design completed (HiFi-ESP32 Plus)
- - Basic I2C driver implementation
- - ESPHome component development
- - Advanced DSP feature implementation
- - Hardware design (Amped-ESP32 Plus)
- - Web interface for DSP control
Home Assistant: Snapcast
Snapcast is a multi-room audio player that synchronizes playback across multiple devices, ensuring that audio streams play simultaneously in perfect sync. It consists of a server, which distributes audio streams, and clients, which receive and play the audio. There is a snapcast fork that was created to implement ESP32 Audio Board-specific configuration on top of the ESP32 Snapcast client. This allows us to build flexible and extendable setups connected to various sources, like Mopidy, MPD, or Home Assistant.
Install instructions
| Step | Screenshot |
|---|---|
| Flash Snapcast to the ESP32 Audio Boards using web-flashing tool |
|
| Enable Snapcast in the MA Got to the Ma and enable Snapcast provider. Your speaker will be discovered automatically, as long as it is running |
|
| Use your media device in the MA Play your audio into new device |
|
| Use a group of speakers for multi-room setup In the MA settings > Players create a new group player and add as many Eparagus players as you need. Use that group speaker to get a synced audio |
As of mid-2025 work is ongoing (1, 2) to add snapcast component to ESPHome. This is based on the original implementation done by CarlosDerSeher. This has the benefit of enabling all the DAC features implemented by the ESPHome driver. At the moment of writing, there are quite a few issues to be solved in the code before it can be merged, but having tested this myself on a few S3-based boards as long as Louder-Esparagus and Louder-ESP32 boards, I can say it is stable and works really well. Also
- This is the only implementation that works with ESP32-S3 (exciting!)
- This implementation allows using advanced TAS5805M DAC features available in the Esphome driver, like bridge mode and 15-band EQ. If you have Home Assistant already, that's no brainer
Squeezelite-ESP32
Squeezelite-ESP32 is a multimedia software suite that started as a renderer (or player) of LMS (Logitech Media Server). Now it is extended with
- Spotify over-the-air player using SpotifyConnect (thanks to cspot)
- AirPlay controller (iPhone, iTunes ...) and enjoy multi-room synchronization as well (although it's AirPlay 1 only)
- Traditional Bluetooth device (iPhone, Android)
And LMS itself
- Streams your local music and connects to all major online music providers (Spotify, Deezer, Tidal, Qobuz) using Logitech Media Server - a.k.a LMS with multi-room audio synchronization.
- LMS can be extended by numerous plugins and can be controlled using a Web browser or dedicated applications (iPhone, Android).
- It can also send audio to UPnP, Sonos, Chromecast, and AirPlay speakers/devices.
All ESP32-based boards are tested with Squeezelite-ESP32 software, which can be flashed using nothing but a web browser. You can use Squeezelite-ESP32 installer for that purpose.
Note that the squeezelite team only supports officially 'classic' ESP32 boards. The ESP32-S3 build is done based on the latest code and S3-specific SDKCONFIG provided by the team, but according to them, "It is not yet part of official releases, but it compiles & runs. The S3 does not have Bluetooth audio. Note that CPU performance is greatly enhanced". It is not running stably at all times, but it might depend on the configuration also.
How to flash and configure
Use Installer for ESP Audio Dock to flash the firmware first. It has been preconfigured to work with ESP Audio boards and will configure all hardware automatically.
Install instructions
| Select the correct device first | |
| Connect the device to the USB port and select it from the list | |
Press Flash and wait around 2 minutes |
|
| (Optional) You may enter the serial console to get more information | |
Device is in recovery mode. Connect to squeezelite-299fac wifi network with squeezelite password (your network name suffix will be different) |
|
| When redirected to the captive portal let the device scan wifi network and provide valid credentials | |
| You can use provided IP address (http://192.168.1.99/ on the screenshot) to access settings page | |
| (Optional) You may change device names to something close to your heart | |
| Exit recovery |
You can use it now
| Bluetooth | Spotify Connect | AirPlay | LMS Renderer |
|---|---|---|---|
Ethernet configuration
If you have optional Ethernet on the board, please put this config in the NVS settings
# ESP32
eth_config = model=w5500,cs=5,speed=20000000,intr=35,rst=14
spi_config = mosi=23,clk=18,host=2,miso=19
# ESP32S3
eth_config = model=w5500,cs=10,speed=20000000,intr=6,rst=5
spi_config = mosi=11,clk=12,host=2,miso=13
Squeezelite-esp32 reboots and connection drops
The default configuration of the squeezelite-esp32 runs automatic discovery of the available LMS server nearby. In fact, it depends on it so much that in case the LMS service is not found on the network, it will reboot automatically (every few minutes).
In many cases, if you use squeezelite for AirPlay and Spotify only and don't have an LMS server, you need to disable discovery altogether. Currently, disabling Squeezelite in the GUI does not work correctly; it places too many spaces between the commands in the autoexec command. Following autoexec1 NVS setting can be used to disable it:
squeezelite -o i2s -s -disable -b 500:2000 -C 30 -d all=sdebug
Airplay-2
The drawback is squeezelite's implementation is a first version of AirPlay. This new, open-source implementation of the Airplay protocol is a standalone v2 alternative, with great work done by the community despite lack of help from Apple!
The good news is the project supports Louder boards out of the box (the rest of the boards are cmoing soon as well). You just need to pull the code from the repo and flash it to your device. A code-free web-installer is coming as well.
How to Get Started
While I'm working on a simplified web-installer with pre-built binaries, you can try it out right away with the help of another community project - Platformio. All you need to do is install vscode, add platformio plugin, and you're ready to go.
Pull the AirPlay code somewhere into your filesystem first:
git clone https://github.com/rbouteiller/airplay-esp32 && code airplay-esp32
When VSCode loads, find the Platformio tab in the left navigation, select esparagus-audio-brick or esparagus-louder in the list of available configs, and run the Upload Filesystem image and Upload and Monitor tasks (assuming you have your board connected to the USB).
The Platformio magic happens now, pulling all the dependencies, platform files, frameworks, and building a binary for your board. Once it is flashed, all that is left to do is configure Wifi credentials using the built-in access point or connect Ethernet, if you're looking for lower latency.
Other smart home options
In case you use Domoticz or OpenHAB, or in fact any other system that supports MQTT integration, Tasmota is a way to go with ESP32 Audio Devices, which can be integrated into TTS, Media Player, or Web-radio scenarios. Since HiFi-ESP32 and Loud-ESP32 devices only need an I2S signal to work, setting them up would not differ from any other I2S-based device. With Louder-ESP32, it is a little more involved story, but in fact, folks at the Tasmota community did a heavy lifting of porting the I2C driver, and since mid-2025, it is a simple template that can be applied in a few clicks.
Unfortunately, the default configuration of the tasmota firmware would not include I2S by default; building firmware from source is required (which makes it more fun, if you ask me). Below is an instruction that I did test with the Louder-ESP32-S3 board (Non-S3 model will require only minor adjustments along the way)
Building Tasmota with I2S support
| # | Description | Image |
|---|---|---|
| 1 | Pull the source code from the official repo. It is a Platformio project, so if you didn't have it before, install it now git clone https://github.com/arendst/Tasmota/ |
|
| 2 | In the code repository find a file named user_config_override.h, and add USE_I2S_ALL macro right before closing #endif |
|
| 3 | Build and flash using the conifguration named tasmota32s3 for the S3 model, or tasmota32 for classic ESP32 |
|
| 4 | Your device will need to connect to a Wi-Fi network, and you do this as usual by connecting to a Wi-Fi hotspot and providing wifi credentials |
Connect to the MQTT broker
This step will depend on your specific setup, but since I have Home Assistant, I'll document the steps I had to do in the HA installation I have. Other brokers will fundamentally need the same steps, but clearly every system would have its own specific steps to take.
| # | Description | Image |
|---|---|---|
| 1 | Install the MQTT broker into HA by installing the MQTT Addon. As soon as it is installed, it will use the HA user database, so credentials will be configured elsewhere | |
| 2 | Add mqtt_user in the HA User list. Keep the password nearby, as we will need it to connect the ESP32 device to the broker |
|
| 3 | Add MQTT integration to the HA. It will autodiscover the local MQTT broker and connect automatically | |
| 4 | Add Tasmota integration to the HA. At this point, it will only connect to MQTT, but it will not find any devices just yet |
Connect Louder-ESP32 to the MQTT broker
| # | Description | Image |
|---|---|---|
| 1 | Find out your device IP address (either from Serial logs or from your WiFi router), since we would need to access its web-UI to configure the device | |
| 2 | Navigate to Configure > MQTT section and update your MQTT host, user, and password settings | |
| 3 | After the device restarts, it should be able to connect to the broker. This can be confirmed in the Tasmota integration, as it will discover a new device now. | |
| 4 | Navigate to Configure > Auto-conf section and apply Louder-ESP32S3 config. After the device restarts, you're all set. |
Testing audio playback with MQTT controls
| Description | Image |
|---|---|
| Using the commands described here you can control device playback | |
| Start web-radio plaback topic: cmnd/tasmota_XXXXXX/i2swr, payload: http://192.168.1.48:18000/bb |
|
| Stop playback topic: cmnd/tasmota_XXXXXX/i2swr, payload: `` |
|
| Change volume topic: cmnd/tasmota_XXXXXX/i2sgain, payload: 85 |
|
Commands I2SRtttl and I2Ssay didn't work for me, unfortunately. I didn't have time yet to figure out what the issue is. |
Standalone Snapclient
Snapcast is a multi-room audio player that synchronizes playback across multiple devices, ensuring that audio streams play simultaneously in perfect sync. It consists of a server, which distributes audio streams, and clients, which receive and play the audio.
Standalone Snapclient is now available for all Esparagus boards. The main implementation (ESP32 Snapclient) is an ESP32 port of the Snapcast client. An installer repository maintained by me (Esparagus Snapclient) contains pre-configured settings for all Esparagus boards as well as a web-installer project.
The web-installer allows you to flash snapclient firmware using nothing but a browser - no additional software required. Once flashed, the Snapcast server will be auto-discovered on the same network (it can be hosted on Music Assistant, a standalone Raspberry Pi, or any other compatible server).
Snapclient benefits
- Perfect multi-room synchronization - All speakers play in perfect sync across multiple rooms, similar to Sonos but with better accuracy
- Zero configuration - Auto-discovers Snapcast servers on the network
- Browser-based flashing - No need to install any tools, flash directly from the web
- Low latency - Optimized for minimal audio delay
- Flexible server options - Works with Music Assistant, standalone servers, or DIY Raspberry Pi setups
- Cost-effective - Build a whole-home audio system at a fraction of commercial solutions
- Possibility to mix up client with diffrent architecture - ESP32 side-by-side with Raspberries, etc.
Flashing ESP32-S3
ESP32-S3 boards have two ways of firmware update: (1) similarly to classic ESP32, they can be flashed over built-in UART, or (2) uniquely for S3, over built-in USB host controller. Since it is firmware-controlled, it may be disabled if not used (or, more commonly, not available with factory default empty firmware). When an unflashed ESP32-S3 device comes into a boot loop, with a USB-CDC device appearing and disappearing every second, and requires a special flashing initialisation sequence to get flashed:
- Press the IO0 (FLASH) button and keep it pressed
- Press and release the RESET button, then release the FLASH button last
- ESP32-S3 will enter download mode, and the USB-CDC device will appear and stay available
- Run flashing routine as usual, either through web-serial or
esp_tool - This time, it is not possible to reboot the device over USB, so press RESET once more
- Device will boot normally into firmware, and if USB-CDC is enabled in the firmware, you will be able to flash it normally, download mode and reset sequence will work over USB.
- If you manage to flash firmware without USB-CDC support, you need to go through the above sequence once more
Hardware
Please visit the hardware section for board schematics and PCB designs. Note that PCBs are shared as multi-layer PDFs.
First generation docks
ESP Audio Solo
| Image | Legend |
|---|---|
![]() |
MAX98357 DAC Speaker Terminal |
ESP Audio Duo
| Image | Legend |
|---|---|
![]() |
MAX98357 DAC Speaker Terminals 8MB PSRAM IC |
HiFi-ESP
| Image | Legend |
|---|---|
![]() |
PCM5100A DAC Speaker Terminals 8MB PSRAM IC Ultra-Low noise LDO 3V3 Voltage regulator |
Louder ESP
| Image | Legend |
|---|---|
![]() |
TAS5805M DAC Speaker Terminals 8MB PSRAM IC 3V3 Drop-Down voltage regulator (powers ESP32) Input Voltage terminal |
TAS5805M DAC Speaker Terminals - 8MB PSRAM IC (Hidden under ESP32 module) - 3V3 Drop-Down voltage regulator (powers ESP32, hidden under ESP32 module) Input Voltage terminal |
HiFi-ESP32
| ESP32 | ESP32-S3 |
|---|---|
Loud-ESP32
| ESP32 | ESP32-S3 |
|---|---|
Amped-ESP32
| ESP32 |
|---|
Amped-ESP32 with TPA3118/TPA3128 amp
Originally, I used the TPA3110 amp with Amped Esparagus and Amped-ESP32 boards for its simplicity and availability. The only issue with TAP3110 is that it lacks the MUTE pin. It does have an STBY pin, but as it turned out, it is not pop-free, meaning each time you switch it on and off, the amp makes a loud pop in the speakers. I tried changing the level slowly, but it didn't help.
Help came with a newer TPA3128 amp with revision H of the Amped-ESP32
- It does have a true MUTE pin, and now it is software-controlled on Amped-ESP32. It means that the board starts dead-quiet, and it stays quiet when the audio is paused
- MUTE pin also disables PCM5100 DAC on rev H, so line-out is also dead quiet (not that it was noise before, but why not?)
- It can work with 4.5V, so it plays even when powered from a simple USB-C, similar to Louder-ESP32. TPA3110 needs at least 8V to spin up
- TPA3128 has a marginally better audio quality, as they say. I cannot hear the difference 😉
On the latest revisions I'm switching over to the TPA3118 amp, replacing TPA3128 for a few reasons:
- MUTE schematic is updated to slow down voltage ramping speed on turn on – this helps reduce pop noise to “I can no longer hear it” level
- Modulation is hardwired to BD (1SPW is more efficient, but caused pops as well)
- Gain is fixed at a 20dB level – also helps with pops
- I added a band-pass input filter network to make sure it is noise-free.
Louder-ESP32
| ESP32 | ESP32-S3 |
|---|---|
Optional SPI Ethernet module
Every board has a header that allows for soldering in a W5500 SPI Ethernet module, which is very easy to find. The only downside is that with the module installed, the board will not fit the case, unless it is cut to accommodate extra height.
| HiFi-ESP32(S3) | Loud-ESP32(S3) | Louder-ESP32(S3) |
|---|---|---|
| Louder-ESP32-Plus | Amped-ESP32-Plus |
|---|---|
squeezelite-esp32 nvs settings that you need to apply to enable it
# ESP32
eth_config = model=w5500,cs=5,speed=20000000,intr=35,rst=14
spi_config = mosi=23,clk=18,host=2,miso=19
# ESP32S3
eth_config = model=w5500,cs=10,speed=20000000,intr=6,rst=5
spi_config = mosi=11,clk=12,host=2,miso=13
BTL and PBTL mode (Louder and Amped boards)
The TAS5805M DAC DAC used on Louder boards, and the TPA3110D2 / TPA3128 amplifiers used on Amped boards support PBTL (Parallel BTL), also known as bridge mode. In practice, this lets the amplifier deliver roughly double the current capability into a single speaker, enabling higher output power when paired with a lower-impedance load.
A common misconception is that switching to PBTL will automatically double the power into the same speaker you used in normal 2-channel BTL/stereo mode. It won’t. Even in stereo BTL operation, each channel already drives the speaker across the full supply voltage (VCC), so the power is limited by both the supply voltage and the current capability of each output driver.
In PBTL mode, both channels are paralleled and drive the same signal, effectively doubling the current capability. This allows you to safely connect a lower-impedance speaker, which is what actually increases the possible output power. If you keep the same speaker impedance you used in stereo mode, you only balance the load between the drivers — you do not gain additional output power.
Summary:
- Use 3–4 Ω speakers in PBTL mode for optimal performance
- Use 6–8 Ω speakers in standard BTL (stereo) mode
This ensures the amplifier can operate efficiently and deliver its intended power without overloading the output drivers.
In either scenario, you'd need to inform DAC/AMP to change modulation for PBTL mode (via I2C command or physical pins) and connect speakers "across" channels, so both channel drivers can contribute. This can be done in 2 alternative ways:
| Desc | Image |
|---|---|
| Bridge outputs before the speaker connector either with jumpers or solder bridges, use (either) single wire for each speaker terminal | |
| More recent boards introduce solder bridges instead of jumpers | |
| Wire both outputs of the speaker terminals together |
Power figures (comparison of BTL and PBTL modes)
| DAC | BTL (4Ω) | BTL (8Ω) | PBTL (3-4Ω) |
|---|---|---|---|
| TAS5805M | |||
| TPA3110 | |||
| TPA3128 |
Louder-ESP32 and Louder-ESP32-Plus (recent revisions)
Physical connections that need to be done on the board's back side (using solder bridges - normally open bridges to be closed for PBTL mode).
Note that apart from physical bridges, it also needs Bridge mode to be enabled via I2C command (see below)
Amped TPA3110 Amp
Physical connections that need to be done on the board (using solder bridges - normally open bridges to be closed for PBTL mode).
Both drivers will play RIGHT channel signal
Amped TPA3128 Amp
Both drivers will play RIGHT channel signal
Louder TAS5805M DAC
The most important step is to inform the Amp to change the modulation in the first place via the I2C command. In the case of sqeezelite DAC control set value is the following:
dac_controlset: `{"init":[{"reg":3,"val":2},{"reg":3,"val":3},{"reg":2,"val":4}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}`
compared to the default:
dac_controlset: `{"init":[{"reg":3,"val":2},{"reg":3,"val":3}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}`
One can test audio with a single speaker connected between L and R terminals (plus on one side and minus on the other). Optionally, jumpers on the board will effectively connect the second driver in parallel, doubling the current capability.
Important point, this simple setup will send only RIGHT channel to the output, that’s just how the basic DAC setup works. In case you want true mono (LEFT + RIGHT)/2 or pure RIGHT or LEFT audio, you need to apply a mixer configuration. Full config looks like below (thanks @frdfsnlght for helping me here)
Single speaker (PBTL mode), TRUE MONO mix (L+R)/2:
{"init":[{"reg":3,"val":2},{"reg":3,"val":3},{"reg":2,"val":4},{"reg":0,"val":0},{"reg":127,"val":140},{"reg":0,"val":41},{"reg":24,"val":[0,64,38,231]},{"reg":28,"val":[0,64,38,231]},{"reg":32,"val":[0,0,0,0]},{"reg":36,"val":[0,0,0,0]},{"reg":0,"val":0},{"reg":127,"val":0}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}
Single speaker (PBTL mode), RIGHT input only:
{"init":[{"reg":3,"val":2},{"reg":3,"val":3},{"reg":2,"val":4},{"reg":0,"val":0},{"reg":127,"val":140},{"reg":0,"val":41},{"reg":24,"val":[0,128,0,0]},{"reg":28,"val":[0,0,0,0]},{"reg":32,"val":[0,0,0,0]},{"reg":36,"val":[0,0,0,0]},{"reg":0,"val":0},{"reg":127,"val":0}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}
Single speaker (PBTL mode), LEFT input only:
{"init":[{"reg":3,"val":2},{"reg":3,"val":3},{"reg":2,"val":4},{"reg":0,"val":0},{"reg":127,"val":140},{"reg":0,"val":41},{"reg":24,"val":[0,0,0,0]},{"reg":28,"val":[0,128,0,0]},{"reg":32,"val":[0,0,0,0]},{"reg":36,"val":[0,0,0,0]},{"reg":0,"val":0},{"reg":127,"val":0}],"poweron":[{"reg":3,"val":3}],"poweroff":[{"reg":3,"val":0}]}
Physical connections:
| Image | Legend |
|---|---|
| Stereo Mode - leave open | |
| (Option A) Mono (PBTL) Mode, close horizontally | |
| (Option B) Mono (PBTL) Mode, close bridges (recent revisions) | |
| (Option C) Close at the speaker |
TAS5805M DSP capabilities
The TAS5805M DAC has a very powerful DSP, which allows doing lots of data processing on the silicon, that otherwise would take a considerable part of your CPU time. As of the moment of writing, it is mostly an undiscovered part of the DAC, since, unfortunately, TI is not making it very easy for developers. (A minute of complaint) To be more specific, you need to be (A) a proven hardware manufacturer to get access to the configuration software, namely PurePath. (B) You need to apply for a personal license and go through an approval process, and after a few weeks of waiting, you get access to the DAC configuration you asked for. (C) You find out that it will work with TI's own evaluation board, which will set you back $250 if you'd be able to find one. Otherwise, all you have is a list of I2C commands that you need to transfer to the device at your own cost. No wonder no one knows how to use it.
But moanings aside, what do you get after:
- Flexible input mixer with gain corrections
- 15 EQ with numerous filter configurations
- 3-band Dynamic Range Compression with flexible curve configuration
- Automatic Gain Limiter with flexible configuration
- Soft clipper
- and a few other things
At this moment, it is very experimental. In the perfect world, you should be able to adjust all of those settings to make your speaker-enclosure setup work the best it can, and even apply your room factors into the equation. But with the above disclaimer, I can only deliver a limited set of configurations corresponding to the most common use cases:
- Stereo mode with enabled DRC (Loudness) and AGL settings
- Full range Mono mode with DRC (Loudness) and AGL settings
- Subwoofer Mono mode with a few filter frequency options
- Bi-Amp configuration with a few crossover frequency options
All of the above are available right now for experimentation. I'm keen to hear your feedback while I move forward with porting this to other software options
- - Bare I2S TAS5805M library
- - espragus-snapclient with self-hosted UI (WIP)
- - ESPHome driver with UI in the Home Assistant
- - squeezelite-esp32
Louder-ESP32 and Amped-ESP32 power considerations
The power adapter requirements depend on the speaker power rating and impedance.
Since the amplifier (DAC) operates at roughly 80% efficiency, use the following method to determine the minimum voltage and current required.
Calculate the Required Voltage (per channel)
-
Take the rated power of one speaker (e.g., 10 W for a 2×10 W setup).
-
Take the speaker impedance (e.g., 8 Ω).
-
Compute the RMS voltage needed to deliver that power:
V_RMS = sqrt(P * R)For a 10 W, 8 Ω speaker:
V_RMS = sqrt(10W * 8Ohm} = ~9V -
This RMS value is your minimum supply voltage per channel.
Calculate the Required Current (including efficiency)
-
Use the RMS voltage from Step 1.
-
Compute the output current per channel:
I_out = V_rms / RFor 9 V RMS into 8 Ω:
I_out = 9V / 8Ohm = ~1.2A -
Adjust for amplifier efficiency (≈ 80%) to determine input current.
-
Multiply by the number of channels (e.g., 2 channels).
-
Round up for safety and headroom.
Example:
Two 10 W, 8 Ω speakers → ≈ 1.2 A per channel × 2 ≈ 2.4 A, rounded up to 3 A total.
Final Result
For a pair of 10 W / 8 Ω speakers, you need a power adapter rated for at least:
- Voltage: ~9 V
- Current: 3 A total
- Power: 25..30 W
It is not recommended to go far beyond the voltage your speakers can handle; otherwise, the amp will blow your speakers in no time. Using 12V power source with 9V requirement probably will be totally fine, but getting 20V power source for 10W speakers is a waste of budget and added risk.
Connector specs
Barrel jack used is spaced at 6mm hole/2mm pin, which is typically 5.5/2.5mm jack on the male side.
The screw terminal is connected in parallel to the barrel jack; you can use either interchangeably.
On the latest boards (starting from Amped-ESP32), I switched to barrel jack with thick middle pin with a 2.5mm pin, it’s a bit unusual but still common enough in the laptop world. It is far more comfortable in handling high currents, and importantly, much more sturdy and resistant to desoldering.
Recommended models
| Model | Image |
|---|---|
| 19V 3.42A 65W 5.5X2.5mm AC Laptop Power adapter Charger For ASUS |
Efficiency
I performed Louder-ESP32 board load tests to analyze the thermal stability of the board under maximum load. These tests output a 100Hz sin-wave with a close to rail-to-rail signal (adjusting volume and gain) into an 8-Ohm load (both BD and 1SPW modulation). I started testing with bare naked DAC. As soon as I reached the point where DAC was entering thermal shutdown, I added a small radiator on top, and once more, a larger radiator on the back side (where the thermal pad is connected to the ground plane)
| SIN wave, 100 Hz | BD-mode | 1-SPW mode | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| VCC, V | Speaker voltage | Ratio | Speakers power RMS, W | Consumed power, W | Efficiency, % | Losses, W | Naked chip, 1min run | Heat Sink 10x15mm (top cover) | Heat sink 32x32mm(back side) | Speaker voltage | Speakers power RMS, W | Consumed power, W | Efficiency, % | Losses, W | Naked chip, 1min run | Heat Sink 10x15mm (top cover) | Heat sink 32x32mm(back side) |
| 5 | 3.09 | 1.62 | 2.4 | 3.2 | 75% | 0.8 | stable | - | - | 3.09 | 2.4 | 3.1 | 76% | 0.7 | stable | - | - |
| 6 | 3.47 | 1.73 | 3.0 | 4.0 | 75% | 1.0 | stable | - | - | 3.49 | 3.0 | 3.9 | 78% | 0.9 | stable | - | - |
| 7 | 3.92 | 1.78 | 3.8 | 5.0 | 77% | 1.2 | stable | - | - | 4.05 | 4.1 | 5.4 | 77% | 1.3 | stable | - | - |
| 8 | 4.36 | 1.83 | 4.8 | 6.1 | 77% | 1.4 | stable | - | - | 4.37 | 4.8 | 5.9 | 80% | 1.2 | stable | - | - |
| 9 | 5.49 | 1.64 | 7.5 | 9.4 | 80% | 1.9 | stable | - | - | 5.49 | 7.5 | 9.2 | 82% | 1.6 | stable | - | - |
| 10 | 6.48 | 1.54 | 10.5 | 12.8 | 82% | 2.3 | stable | - | - | 6.48 | 10.5 | 12.7 | 83% | 2.2 | stable | - | - |
| 11 | 6.90 | 1.59 | 11.9 | 14.7 | 81% | 2.8 | stable | - | - | 6.90 | 11.9 | 14.2 | 84% | 2.3 | stable | - | - |
| 12 | 7.33 | 1.64 | 13.4 | 16.9 | 80% | 3.4 | stable | - | - | 7.33 | 13.4 | 16.4 | 82% | 3.0 | stable | - | - |
| 13 | 7.64 | 1.70 | 14.6 | 18.8 | 78% | 4.2 | stable | - | - | 7.66 | 14.7 | 18.3 | 80% | 3.7 | stable | - | - |
| 14 | 8.74 | 1.60 | 19.1 | 23.9 | 80% | 4.8 | stable | - | - | 8.74 | 19.1 | 23.2 | 82% | 4.1 | stable | - | - |
| 15 | 9.22 | 1.63 | 21.3 | 27.0 | 79% | 5.7 | OT warning | stable | - | 9.21 | 21.2 | 25.8 | 82% | 4.6 | stable | - | - |
| 16 | 9.70 | 1.65 | 23.5 | 30.0 | 78% | 6.5 | shutdown | OT warning | stable | 9.70 | 23.5 | 28.7 | 82% | 5.2 | OT warning | - | - |
| 17 | 10.28 | 1.65 | 26.4 | 33.0 | 80% | 6.6 | - | shutdown | OT warning | 10.29 | 26.5 | 33.0 | 80% | 6.5 | OT warning | OT warning | - |
| 18 | 11.40 | 1.58 | 32.5 | 41.0 | 79% | 8.5 | - | - | shutdown | 11.37 | 32.3 | 40.2 | 80% | 7.9 | shutdown | OT warning | OT warning |
Conclusion: Long-term operation without an additional heatsink is only possible up to VCC=15V. Adding a passive heatsink only helps to sustain 1-2 more volts; more power requires active cooling.
Speakers selection
When choosing speakers, focus on realistic power ratings rather than the often-inflated numbers printed on labels.
A good reference point is 10 watts at 1% THD (Total Harmonic Distortion) — this provides clean, pleasant audio without noticeable distortion. Many manufacturers, however, market their speakers based on higher distortion levels or theoretical peaks: • Nominal Power (e.g., 20W) — This is often measured at around 10% THD, which produces harsh, phone-like distortion. • Rated or “Maximum” Power (e.g., 40W) — The level a speaker can handle continuously, but without limiting distortion; sound quality is not measured. It is simply a scenario where speaker is used as a room heater. • Peak Power (e.g., 80–100W) — The absolute maximum a speaker can withstand for a very short burst (milliseconds), not suitable for sustained playback.
In short, when a speaker claims “100W,” it typically translates to about 10W of clean, listenable power in real use. Always prioritize low-distortion ratings over inflated wattage numbers for the best listening experience.
OLED screen
Starting May 2025, all boards will have an OLED screen with a solder-less connector. Originally, I added the OLED header on the back side of the PCB that would require careful and skillful soldering (It is quite nice when using squeezelite since you can get quite a lot with existing plugins and settings). Later on, I managed to find the right model of the screen and corresponding connector for a reasonable price, and decided to equip every board with the connector as standard.
At this moment, one can simply throw in a compatible OLED screen and use a small strap of double-sided adhesive to fix it mechanically. The final result is a nice and finished look
OLED models
Most of the 64x128 pixel OLED screen models that are very common among hobbyists will use a compatible 30-pin ribbon connector with 0.5mm pin spacing, and they are really easy to find.
| Model | Image |
|---|---|
| 1.3" OLED Screen 128x64 SH1106 30Pin |
Software side
Although you're free to use it your way, using the pinout above, I'd expect the most common case to be squeezelite, thus here are the steps you'd need to do
TFT screen
Since the development of the Sendspin protocol went into the visualisation area, and the latest features allow displaying album art, track status, and progress, I'm replacing the OLED screen with a larger and colorful TFT screen. The first board to receive an upgrade is the Louder-ESP32 Pro board, introducing a 14-pin connector for a ST7789-based 320x240 pixel TFT screen.
| Model | Image |
|---|---|
| 2.0" TFT Screen 320x240 ST7789 14Pin | |
| 2.4" TFT Screen 320x240 ST7789 14Pin |
Case
HiFi-ESP32(S3), Loud-ESP32(S3), Amped-ESP32 and Louder-ESP32(S3) are mechanically compatible with Raspberry Pi 3/4 cases, tested with transparent ones.
| Hifi-ESP32 | Loud-ESP32 |
|---|---|
| Amped-ESP32 | Louder-ESP32 |
| Amped-ESP32-Plus | Louder-ESP32-Plus |
Also, community members created a few 3D-printable designs for Louder-ESP32 boards that can be found below
| # | Image |
|---|---|
| #1 | |
| #2 | |
| #3 | |
| #4 | |
| 3D Printed Case for HiFi ESP32 Plus | |
| #5 | |
| #6 | |
| #7 | |
| #8 |
Louder-ESP32 Pro case
Louder-ESP32-Pro boards are mechanically compatible with aluminum cases for Raspberry Pi 5. The most important components that release heat under heavy operation would be covered by the case heat release pads. On top of that, the board allows connecting a 4-pin fan with speed control and RPM readout, so it can be engaged only when needed.
Louder-ESP32 Mini shell
Since the Louder-ESP32 Mini is designed to fit a standard speaker terminal, a vertical USB-C port was added instead of the more traditional horizontal type. It is highly recommended to protect it from sideways force, which would be common when the cable is inserted. The simplest solution is to use a 3D-printed shell that will protect the board and the USB-C port from mechanical stress.
| 42mm model | 55mm model |
|---|---|
You can pull it from the folder or pull directly from Tinkercad (42mm and 55mm model) and modify if needed. The shell is designed to be printed without support, and it is perfectly okay to print it with PLA plastic or similar material.
Louder-ESP32 Mini Speakers Compatibility
Most of the speakers with 42mm or 55mm square terminals would work without any mechanical work needed. Smaller terminals can be extended for Louder-ESP32-mini use with basic mechanical work
| A | B | C |
|---|---|---|
The main benefit of the 55mm model is an onboard USB PD-trigger chip that allows use with 65W USB-C power adapters. Compared to the 5W limit of the 42mm model, this gives a healthy power headroom when used with larger speakers.
Louder-ESP32 Mini USB-PD note
While the 55mm variant has a Hynetek HUSB238 USB-PD trigger chip, capable of pulling more power from the PD-enabled power adapters (most commonly modern laptop power adapters), there are certain limitations to the way it can be used.
The chip allows two modes of operation: (a) "Dumb" GPIO mode, where voltage is requested via pin configuration and no code is needed; it will work right from the start; and (b) "Smart" mode, where voltage /curent is requested via I2C and reported back to the host.
The default mode of operation of the Louder-ESP32-Mini (55mm) is "Smart" mode, which requires an I2C driver that actively sets the required voltage on start. The ESPhome driver is currently in development (PR6693 and PR16572) and might be available in the near future, but not today.
However, it is fairly easy to change the mode of operation to GPIO, so it would always require maximum available power from the power adapter. For this, you need to do two changes:
- Cut the I2C line from the MCU - it will set voltage and current to the maximum available
- Remove 1M resistor marked with (*) - it will force GPIO mode
If you decide to go with the change, since your software can't trigger higher voltage, I advise not to remove the resistor completely, but disconnect it on one end - this way you can go back to "Smart" mode later on.
Community projects
If you don't mind showing off your projects, please send me a note or create a PR directly
Where to buy
You may support my work by ordering these products at Lectronz, Elecrow, and Tindie
- HiFi-ESP32 at Lectronz, Elecrow, and Tindie
- HiFi-ESP32-Plus at Lectronz, Elecrow, and Tindie
- Loud-ESP32 at Lectronz, Elecrow, and Tindie
- Loud-ESP32-Plus at Lectronz, Elecrow (coming soon), and Tindie
- Louder-ESP32 at Lectronz, Elecrow, and Tindie
- Louder-ESP32-Mini at Lectronz, Elecrow, and Tindie
- Louder-ESP32-Plus at Lectronz, Elecrow, and Tindie
- Louder-ESP32-Pro at Lectronz and Tindie (Elecrow coming soon as well!)
- Amped-ESP32 at Lectronz, Elecrow, and Tindie
- Amped-ESP32-Plus at Lectronz, Elecrow, and Tindie


















