Same here, red light is on, but sound still comes from the internal speaker with nothing on the line out. I’d guess there is something that has to be done with the ESP YAML to make this work.
Based on the manufacturer info, the wiring described above is correct: m5-docs.
For anyone looking for solutions, I’ve found two that might work well:
First is an alternative firmware you can build yourself using the ESPHome Builder addon in Home Assistant. Using this, you can assign a Chromecast speaker to an Atom, which it will use for responses. The instructions can be found here: https://www.smarthomejunkie.net/enhancing-voice-assistant-integrate-an-external-speaker-using-esphome/ (note some code is only found in the included video).
I haven’t gone down this path because I want to use my Chromecast devices as music players and I assume the playback will be halted once the M5 uses it as a response.
So I found another solution online: Replace the original speaker with an Arduino speaker. No need to solder as the wires already come out of the M5. A case can be printed to house the new speaker. This isn’t a good solution for music playback on the M5 but will allow for better response volume using Assist. 3D Model and link to speakers can be found here: Atom Echo with better speaker by Tim Holzhausen | Download free STL model | Printables.com.
I’ve ordered the parts and will try this approach.
Thanks. Using an external media player is a good option, but the instructions in your first link do not work anymore with the current ESPHome version. I created an updated YAML that works with the current version and also has the ability to set the external media player entity ID using the HA config for the device without reflashing the Atom Echo. The YAML is here: gist:2d827d65c5fc7d9ce856be39dd94a062 · GitHub
THanks I connected it to CJMCU-1334 but only the right chanel il working NOT the left chanel. Is that normal?
How did you get this to work even with one channel? Can you show your wiring?
Does this method still work? Wired it up but the playback still comes through the internal speaker. Not sure if I need to use a modified yaml or not. Currently using this one: m5stack.atom-echo-voice-assistant: github://esphome/wake-word-voice-assistants/m5stack-atom-echo/m5stack-atom-echo.yaml@main
I connected it a week ago… no, I didn’t change any YAML code.
I didn’t use ESPHOME for installation… I used this page:
looks like 2/3 boards I got were busted. Red light but no audio. On the 3rd it worked without any modifications.
Honestly, I bought the M5 to test but then I directly bought the ESP32 with microphone, amp and speaker for about 5/6 euros… for a better result.
Ultimately Esphome is fun… once you learn (about a couple of weeks) then everything becomes easier and more customizable.
EDIT: an ESP32 with a microphone is still very frustrating to set up and it doesn’t have local wakeword… so it can cause problems. I’ll soon test an ESP32 S3 (more powerful) with local wakeword and I hope it goes better.
The easiest way I have gotten to actually “listen” to my echo was by cutting the red and black cables to the internal speaker and soldering a 3.5 mm male plug , black to ground and red to both right and left channels on plug. hooking the plug to whatever you want as amplifier, in my case the aux input of a bt speaker.
Don’t do it if you don’t feel ok with with soldering . do it at your own risk.
Hi @michaelkleinhenz - i am brand new to the world of esphome and I think I have flashed my m5 echo with your yaml - I now have some more properties in HA - you mentioned the external media player entity ID - which is awesome - but there seems to be other properties such as call alarm script and call script with message - could I ask what these do?
“call script with message” is called for the response of a voice command. If you want to get the message in text form to send it somewhere else. Note that if you do that, the message is not played on the Atom itself. You can change that behaviour if you need in the YAML.
“alarm script” is called when a timer finishes. This can be used to also let HA know that a timer the user set on the Atom has ended, for example to let some lights blink.
So I’m aiming to not use the atom speaker at all and just have all output to a google hone - so I tick this box? I haven’t had much playing yet and trying to learn by reading the yaml.
Ok answer is no - it needs a script so I’m still not sure what to do - I got an announce chime once from the google home but nothing else - I then saw trs.cloud_say in the yaml and I don’t have a nabu account so changed to tts.speak - still no joy
Yes, you need to tick the box. If you want to check first if the message is arriving at the script, you can select “Traces” from the three dot menu in the script list in the HA config. The cloud_say is only used if the script is not called. So what this does is that it sends the output message to the script, skipping any output, internal or external.
If you just want to use an external speaker, you can leave this switch off and set an external media player id. But then you need to figure out where to get the tts from if you don’t have a cloud subscription.
I would first try if (when switch is on), your script gets called correctly by checking the traces, then you can decide if you want to use the script to send/speak the response from there or if you use the other option, leaving the switch off and using the external media player id.
however, just change the default speaker (soldering) with a 3w 8ohm to have a much better and satisfying result.
the one in the photo is really very satisfying, I do not recommend anything else
Hi! I did just like in your photo. PCM5102 led is on but sound still plays through the Atom speaker and not through the one I connect. Am I doing something wrong?
Thanks in advance!


