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 | Loud-ESP32 |
---|---|
Amped-ESP32 | Louder-ESP32 |
- ESP32 Audio Docks and Louder ESP
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.
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).
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.
The PCM5100 HiFi DAC is combined with a highly efficient TPA3110D2 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 directly. It uses an external power source to feed hungry amps and the host MCU using an onboard drop-down converter. It has similar power capabilities to the Louder model, 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.
The Louder-ESP32 is a top-of-the-range model that uses a modern, highly capable TAS5805M DAC and is aimed to be 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 barrel 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.
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 | Loud-ESP32 | Amped-ESP32 | Louder-ESP32 | |
---|---|---|---|---|
Image (ESP32 | ||||
MCU | ESP32-WROVER-N8R8 onboard | ESP32-WROVER-N8R8 onboard | ESP32-WROVER-N8R8 onboard | ESP32-WROVER-N8R8 onboard |
Image (ESP32-S3) | coming soon | |||
MCU (S3) | ESP32-S3-WROOM-N8R8 onboard | ESP32-S3-WROOM-N8R8 onboard | ESP32-S3-WROOM-N8R8 onboard | ESP32-S3-WROOM-N8R8 onboard |
DAC | PCM5100A 32bit Stereo DAC -100 dB typical noise level | Dual I2S DAC (MAX98357) with built in D-Class amp | PCM5100A 32bit Stereo DAC working with TPA3110D2 D-Class amp |
Stereo I2S DAC (TAS5805M) with built in D-Class amp |
Output (4Ω) | Non-amplified stereo output, 2.1V RMS | 2x 5W | 2x 22W (4Ω, 1% THD+N) at 16V 2x 32W (4Ω, 1% THD+N) at 20V 1x 40W (4Ω, 1% THD+N) at 20V (bridged) |
2x 22W (4Ω, 1% THD+N) at 16V 2x 32W (4Ω, 1% THD+N) at 20V 1x 40W (4Ω, 1% THD+N) at 20V (bridged) |
Output (8Ω) | Non-amplified stereo output | 2x 3W | 2x 25W (8Ω, 1% THD+N) at 22V | 2x 25W (8Ω, 1% THD+N) at 22V |
PSRAM | ESP32: 8MB PSRAM (4MB usable) over 40MHz SPI ESP32S3: 8MB PSRAM over 80MHz QSPI |
ESP32: 8MB PSRAM (4MB usable) over 40MHz SPI ESP32S3: 8MB PSRAM over 80MHz QSPI |
ESP32: 8MB PSRAM (4MB usable) over 40MHz SPI ESP32S3: 8MB PSRAM over 80MHz QSPI |
ESP32: 8MB PSRAM (4MB usable) over 40MHz SPI ESP32S3: 8MB PSRAM over 80MHz QSPI |
Power | 5V over USB-C, 2x LP5907 3.3 V Ultra-Low-Noise LDO for analog section | 5V (up to 2.5A) from USB-C | Up to 26V from external PSU | Up to 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) |
Audio streaming requires proper buffering to work, even with ESP32 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 with just work out-of-the box.
First generation docks
I2S CLK | I2S DATA | I2S WS | |
---|---|---|---|
ESP8266 | 15 | 3 | 2 |
ESP32-C3 | 5 | 20 | 6 |
ESP32-S2 | 12 | 37 | 16 |
I2S CLK | I2S DATA | I2S WS | PSRAM CE | PSRAM CLK | |
---|---|---|---|---|---|
ESP32 | 26 | 22 | 25 | 16 | 17 |
I2S CLK | I2S DATA | I2S WS | PSRAM CE | PSRAM CLK | |
---|---|---|---|---|---|
ESP32 | 26 | 22 | 25 | 16 | 17 |
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 |
I2S CLK | I2S DATA | I2S WS | PSRAM RESERVED | |
---|---|---|---|---|
ESP32 | 26 | 22 | 25 | 16, 17 |
ESP32-S3 | 14 | 16 | 15 | 35, 36, 37 |
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 |
I2S CLK | I2S DATA | I2S WS | PSRAM RESERVED | TAS5805 SDA | TAS5805 SCL | TAS5805 PWDN | TAS5805 FAULT | |
---|---|---|---|---|---|---|---|---|
ESP32 | 26 | 22 | 25 | 16, 1 | 21 | 27 | 33 | 34 |
ESP32-S3 | 14 | 16 | 15 | 35, 36, 37 | 8 | 9 | 17 | 18 |
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 |
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 |
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 an input in the 'data' folder.
- Squeezelite-ESP32 - see more details below
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.
Follow the ESP8266Audio library guide. Default settings will work out of the box with ESP8266 and ESP32 boards. For ESP32C3 and ESP32S2 board please adjust the pinout according to the above section
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-Speach 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 as 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
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 supported HA (native) installation and follow these steps. I will place here a short version to have a reminder for future myself
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 interests you. If 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 |
![]() |
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
Make sure your MA Slimproto provider is disabled, it will conflict with the native HA integration
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.
Please find specific ESPHome configs in the firmware folder
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 |
![]() |
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 |
![]() |
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 synchronization multiroom 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.
Use Installer for ESP Audio Dock to flash 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 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
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
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 LMS servier, you need to disable discovery altogether. Currently disabling Squeezelite in the GUI does not work correctly, it places too much 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
ESP32-S3 boards have two ways of firmware update: (1) similarly to classing 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, and may be disabled if not used (or, more commonly, not available with factory default empty firmware). When come 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 IO0 (FLASH) button and keep it pressed
- Press RESET button and release FLASH button after
- ESP32-S3 will enter download mode and 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 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 above equence once more
Please visit the hardware section for board schematics and PCB designs. Note that PCBs are shared as multi-layer PDFs.
First generation docks
Image | Legend |
---|---|
![]() |
![]() ![]() |
Image | Legend |
---|---|
![]() |
![]() ![]() ![]() |
Image | Legend |
---|---|
![]() |
![]() ![]() ![]() ![]() |
Image | Legend |
---|---|
![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
![]() ![]() - 8MB PSRAM IC (Hidden under ESP32 module) - 3V3 Drop-Down voltage regulator (powers ESP32, hidden under ESP32 module) ![]() |
ESP32 | ESP32-S3 |
---|---|
![]() |
![]() |
ESP32 | ESP32-S3 |
---|---|
![]() |
![]() |
ESP32 | ESP32-S3 |
---|---|
![]() |
coming soon |
ESP32 | ESP32-S3 |
---|---|
![]() |
![]() |
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 board will not fit the case, unless it is cut to accommodate extra height.
HiFi-ESP32(S3) | Loud-ESP32(S3) |
---|---|
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
TAS5805M DAC Allows 2 modes of operation - BTL (stereo) and PBTL (parallel, or mono). In Mono, the amp will use a completely different modulation scheme and basically will fully synchronize output drivers. Jumpers on the board allow both output drivers to connect to the same speaker. The most important step is to inform the Amp to change modulation in the first place via 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 one channel to the output, that’s just how the basic DAC setup works. In case you want true mono (L + R)/2 or pure R or L audio, you need to apply a mixer configuration. Full config looks like below (thanks @frdfsnlght for helping me here)
Single speaker (PBTL mode), 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}]}
BTL | PBTL | |
---|---|---|
Descriotion | Bridge Tied Load, Stereo | Parallel Bridge Tied Load, Mono |
Rated Power | 2×23W (8-Ω, 21 V, THD+N=1%) | 45W (4-Ω, 21 V, THD+N=1%) |
Schematics | ![]() |
![]() |
Speaker Connection | ![]() |
![]() |
Starting from Rev E, an additional header is exposed to allow datasheet-specified connectivity
Image | Legend |
---|---|
Stereo Mode - leave open | ![]() |
Mono (PBTL) Mode, close horisontally | ![]() |
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 software
- - squeezelite-esp32 <- to do
- - flexible configurations with on-the-fly configuration changes
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 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.
The power adapter specs depend on the speaker you're planning to use. DAC efficiency is close to 100%, so just take the power rating of your speaker (say 2x10w), and impedance (say 8 ohms), and you'd need at least 9 volts rated at 1.2 amps per channel, round up to 3 total amps.
It is not recommended to go beyond the voltage your speakers can handle, otherwise, the amp will blow your speakers in no time.
Starting May 2025, all boards will have an OLED screen 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
Most of the 64x128 pixel OLED screen models that are very common among hobbyists will use 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 | ![]() |
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
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 |
Also, community members created a few 3-D printable designs for Louder-ESP32 boards that can be found below
# | Image |
---|---|
#1 | ![]() |
#2 | ![]() |
#3 | ![]() |
#4 | ![]() |
You may support my work by ordering these products at Tindie and Elecrow
- ESP Audio Dock at Tindie
- HiFi-ESP32 and HiFi-ESP32S3
- Loud-ESP32 and Loud-ESP32S3
- Amped-ESP32 at Tindie
- Louder-ESP32 and Louder-ESP32S3 at Tindie
- Louder ESP32 at Elecrow