Re-Using an Echo Dot 3rd gen with Voice Assistant

Hi everyone! I wanted to share a project I’ve been working on. I finally managed to interface with the original microphones, buttons, and LEDs of an Echo Dot 3 while keeping the original PCB.

The only hardware change is replacing the board responsible for power management, the speaker, and communication with all the existing components.

At the moment, all four microphones are working (although ESPHome currently supports only one), and I have full control over the buttons and LEDs.

I’ve integrated everything into Home Assistant with Voice Assistant, and the microphone range is really good. Here you can find a small video of this working unit. At the moment I’m waiting for the first pcb prototypes to arrive from PCBWay!

In the meantime I also connected the speaker using a MAX98357 and activated the AEC through espressif libraries in esphome. It’s quite good I’ve would say. It’s not perfect but considering that everything it’s running on the esp32-s3 alone is not bad at all. Actually on the esp there is the whole pipeline 1 mic + Noise suppression + AEC and also the sendspin client for music srteaming from Home Assistant

First pcb image from PCBWay

Why no original speakers?

Hello, Yes the speaker will be the original one! This board will fit in the original place. These green pcb was just an empty pcb I made to check if the dimensions were correct

Wow! While I do not have Amazon Echo/Alexa devices myself personally I hope that this will eventually lead to fully open-source PCB hardware designs (with the same XMOS DSP chip used in the Home Assistant Voice Preview Edition) for running ESPHome same as it has with replacement board for Google Home Mini and Google Nest Mini, see:

and

If you are not planning to add an XMOS DSP chip then could an alternative be the new ESP32-S31 to instead use it as upgrade replacement for the ESP32-S3?

That is, could the new ESP32-S31 be a perfect upgrade replacement for the ESP32-S3?

As i understand the ESP32-S31 is meant to kind of be the RISC-V replacement for the ESP32-S3 and as a
Bonus incorporating features from the ESP32-C6. Als, the ESP32-S31 has the potential with the right software components to someday in the future make the XMOS redundant for voice recognition implementations.

ESP32-S31 (new MCU SoC from Espressif) was very recently made publicly available (with initial support added to ESPHome 2026.7 when using ESP-IDF 6.0 or later), looking at specifications for it makes me wonder if this could be a perfect fit as the base for future Voice Devices and Audio Receiver hardware. What do you all think?

This new ESP32-S31 can be seen as a RISC-V based successor to the ESP32-S3. It features a fast dual-core RISC-V processor with built-in DSP (Digital Signal Processing) instructions so it can technically be capable of running on-device inline audio processing in real-time / low-latency.

In summery when comparing ESP32-S31 to the ESP32-S3, unlike the XTensa architecture of the ESP32-S3, the new ESP32-S31 features a high-performance dual-core 32-bit RISC-V processor running at maximum of 320 MHz (compared to the the ESP32-S3’s 240 MHz). ESP32-S31 also features much higher memory bandwidth with high-speed 250 MHz 8-bit DDR PSRAM (which give it a relativly massive speed boost compared to the standard Octal PSRAM in the ESP32-S3) . The high-performance core in the ESP32-S31 features a 128-bit wide data path with SIMD (Single Instruction, Multiple Data) and FPU extensions, which means it has hardware-level vector acceleration provides the math heavy-lifting to handle complex compute directly on-chip, (like example running DSP audio post-processing algorithms onboard, a Bluetooth Proxy, and/or driving a large LVGL UI on a larger display). It also offer more modern connectivity options and feature 1Gbps Ethernet MAC Ethernet, Wi-Fi 6 (2.4GHz-only), Bluetooth 5.4, and IEEE 802.15.4 (Thread/Zigbee) support.

ESP32-S31 could potentialy even be a more capable platform and maybe do some inline audio processing if they are not done by a hardware DAC like the XMOS?

  • Dynamic Range Compression & Limiting
  • Equalization (EQ)
  • Acoustic Tuning & Digital room correction (DRC)? - Require microphone(s), better suited for all-in-one speaker than external reciever.

ESP32-S31 also feature additional bonus features and functions which could add extra value:

What are ESP32-S31 dev boards and usable modules availabile or comming soon?

ESP32-S31-WROOM-3 module (ESP32-S31-WROOM-3) - Official wireless radio module from Espressif

Wireless-Tag ESP32-S31 Tiny (ESP32S31-TINY) - looks to be coming soon but does not look to be available yet.

ESP32-S31-Korvo-1 multimedia development board - All-in-one 4.3-inch LCD 800 x 480 resolution display and camera.

ESP32-S31-Function-CoreBoard-1 is a development board for connected AIoT prototyping based on the ESP32-S31-WROOM-3 module. It supports Wi-Fi 6, IEEE 802.15.4, Bluetooth 5.4 (LE + BR/EDR), and Gigabit Ethernet; provides an onboard microphone and speaker output; routes out all key GPIOs. Most of the I/O pins on the module are broken out to pin header J2 for easy interfacing. It also features a USB 2.0 Type-A Port and USB Type-C port which can be used for USB pheripials (though the USB Type-C port will require a USB-hub if you also want to power the board via USB).

Reference:

For detailed specification description and development kit hardware overview check out:

and

Hi! I see that the ESP32-S31 looks really promising. However, at the moment, it seems that the ESP-SR library is still mainly designed around 2-microphone arrays. Hopefully they’ll expand the support in the future, but for now we’ll probably have to wait.

Honestly, I would also prefer to use a second IC dedicated to handling all the audio processing. Based on the way I’m receiving the 4-microphone data from the original PCB, none of the XMOS chips seem to be suitable if the goal is to actually make use of all four microphones.

So, at this point, I’m looking for a compatible DSP/audio-processing IC that could sit between the four microphones and the ESP32, handling the multi-mic processing before sending the processed audio to the ESP32.

If the ADC converters for the microphones are TLV320ADC3101 (as in the Gen 2 and, I think Echo Studio) then they have on board mini DSPs.
You might be able to use the DSP to mix 2 microphone channels into one single channel and feed that into the micro wake word. In addition to that you may be able to do the same with 2 more microphones and feed that into a second channel. The Esphome Voice Assistant component can use 2 channels (micro wake word can not) so you would effectively have 4 microphones in use after wake word detection.
Additionally, you can add filters using the DSP to try and isolate the voice from the background noise.

This is all theoretical and I will attempt to set it up at some point on my Gen 2 setup.

Good point, I should look in to it! I’ve seen that voice assist can receive 2 channels, but how those are used? I don’t understand, there should be something on the server side to process them. Am I wrong?

The server side uses something like Whisper for the speech to text and then an AI to interpret it.
According to the documentation:

A second microphone source may be provided by passing a list of two sources to microphone. When two are configured, audio from both is streamed to Home Assistant. The first source carries the more-processed audio (gain, noise suppression, etc.) while the second carries less-processed audio. Home Assistant uses whichever channel works best for each stage of the voice pipeline.

For configuring the DSP you need to use PUREPATHSTUDIO (PPS). You need a license for this but you just apply to TI for one and they will grant it at no cost. Although PPS expects to be connected to a development board you can still use it to generate a text I2C output file that you can then get all the settings from. Complicated but not that difficult.

I thought that the XMOS hardware actually supports more microphones but there is currently limitations in the firmware (software components) that Home Assistant voice uses in its XMOS firmware?

I also guess there might not room on the board but FYI, ESPHome has basic support for adding a second ESP32 → ESP32 Hosted - ESPHome - Smart Home Made Simple

Concept of ESP hosted MCU explained here → GitHub - espressif/esp-hosted-mcu · GitHub

For reference, there are more info on that collected here → [REQUEST] Add an ESP32-S31 or ESP32-C6 as "coprocessor" and "IEEE 802.15.4 radio" module to future voice boards (making a single PCB that have two ESP32 SoCs) so that second SoC can be used as Touchscreen Display Controller and WiFi/BT communication coprocessor or Thread Border Router · Issue #300 · esphome/home-assistant-voice-pe · GitHub

I looked in to this. What I understood from the datasheet Is that you can do that if both microphones are connect to the same pga. In my case I have one mic connected to the left pga and one mic connected to the right one. So i don’t think I can do that.

Yeah, those xmos are not suitable for this application. Even the more powerful xmos xvf3800 would not fit. These IC expects PDM microphones to be connected but in my case I receive audio data from the I2S bus in TDM mode (the two adc tlv320adc share the same I2S line and the same data PIN) so unless a dsp explicitely supports this type of input, It won’t work.

Also adding another uC in the pipeline is a good idea. Actually I don’t know which would be the best combination of hardware. I guess I should try every possibility.

That’s exactly what I’m looking for!

Could you share the PCB files or the GitHub repo?
If you’d like, I’d be happy to help with the software side as well.

Hello! This is the repo, I just created it so I’ll upload more stuff :+1:

I received the prototype and I had some time to try it and with my big surprise it worked! Here some pics and a Video. In the next revision I will surely change the amplifier (MAX98357A is not even close to the original one) and another uC between the esp and the microphone. It could be an stm32 or something similar

Hi!
Thank you for sharing your project! Since its exactly what im looking for i would like to offer my support on it :slight_smile:

Hi,

cool project! I actually intended to do the same thing and already had all the test setups ready. I got some input from the microphones on the ESP, but figured it would get too complicated with the beamforming algorithms etc. Now that I have access to Claude Max, though, I’m confident it’ll be possible to get everything working. If you need any help with the programming or anything else, I’m happy to help.

Thanks, appreciate it!

Thank you Chris! I saw your repo with the code to start to communicate with TLVs. Great starting point, I used it :+1: