This is working as I can hear the sound on the media player but from there I often get (75%) either of the following behaviors :
The Atom Echo seem to disconnect/hang for 20s after playing the response, which is kinda annoying because this add delays when interacting with it.
[11:32:50.521][D][speaker_media_player:406]: State changed to ANNOUNCING
[11:32:50.587][D][speaker_media_player.pipeline:114]: Reading WAV file type
[11:32:50.597][D][ring_buffer:034][ann_read]: Created ring buffer with size 6000
[11:32:50.624][D][speaker_media_player.pipeline:124]: Decoded audio has 2 channels, 16000 Hz sample rate, and 16 bits per sample
[11:32:50.636][D][i2s_audio.speaker:102]: Starting
[11:32:50.659][D][i2s_audio.speaker:106]: Started
[11:32:50.659][D][ring_buffer:034][speaker_task]: Created ring buffer with size 3840
INFO Processing unexpected disconnect from ESPHome API for m5stack-atom-echo-0ae94c @ 192.168.2.249
WARNING Disconnected from API
INFO Successfully resolved m5stack-atom-echo-0ae94c @ 192.168.2.249 in 0.000s
INFO Successfully connected to m5stack-atom-echo-0ae94c @ 192.168.2.249 in 0.006s
INFO Successful handshake with m5stack-atom-echo-0ae94c @ 192.168.2.249 in 0.119s
[11:33:12.478][D][api.connection:1353]: Home Assistant 2025.9.4 (192.168.2.194) connected
[11:33:14.631][D][micro_wake_word:357]: Starting wake word detection
The Atom Echo can crash, with the following callstack
[00:21:51.301][D][speaker_media_player.pipeline:114]: Reading WAV file type
[00:21:51.309][D][ring_buffer:034][ann_read]: Created ring buffer with size 6000
[00:21:51.348][D][speaker_media_player.pipeline:124]: Decoded audio has 2 channels, 16000 Hz sample rate, and 16 bits per sample
[00:21:51.352][D][i2s_audio.speaker:102]: Starting
[00:21:51.357][D][i2s_audio.speaker:106]: Started
[00:21:51.364][D][ring_buffer:034][speaker_task]: Created ring buffer with size 3840
[00:21:53.488]assert failed: remove_free_block tlsf_control_functions.h:372 (prev && "prev_free field can not be null")
[00:21:53.512]Backtrace: 0x400843a8:0x3ffe1d90 0x4008d501:0x3ffe1db0 0x40094bc9:0x3ffe1dd0 0x4009256b:0x3ffe1ef0 0x4009241a:0x3ffe1f10 0x400849ef:0x3ffe1f30 0x40094bf9:0x3ffe1f50 0x400d9195:0x3ffe1f70 0x400d91b7:0x3ffe1f90 0x400dcb07:0x3ffe1fb0
WARNING Found stack trace! Trying to decode it
WARNING Decoded 0x400843a8: panic_abort at /home/ludovic/.platformio/packages/framework-espidf/components/esp_system/panic.c:469
WARNING Decoded 0x4008d501: esp_system_abort at /home/ludovic/.platformio/packages/framework-espidf/components/esp_system/port/esp_system_chip.c:87
WARNING Decoded 0x40094bc9: __assert_func at /home/ludovic/.platformio/packages/framework-espidf/components/newlib/assert.c:80
WARNING Decoded 0x4009256b: block_next at /home/ludovic/.platformio/packages/framework-espidf/components/heap/tlsf/tlsf_block_functions.h:161 (discriminator 1)
(inlined by) block_link_next at /home/ludovic/.platformio/packages/framework-espidf/components/heap/tlsf/tlsf_block_functions.h:168 (discriminator 1)
(inlined by) block_mark_as_free at /home/ludovic/.platformio/packages/framework-espidf/components/heap/tlsf/tlsf_block_functions.h:176 (discriminator 1)
(inlined by) tlsf_free at /home/ludovic/.platformio/packages/framework-espidf/components/heap/tlsf/tlsf.c:631 (discriminator 1)
WARNING Decoded 0x4009241a: multi_heap_free_impl at /home/ludovic/.platformio/packages/framework-espidf/components/heap/multi_heap.c:233
(inlined by) multi_heap_free_impl at /home/ludovic/.platformio/packages/framework-espidf/components/heap/multi_heap.c:222
WARNING Decoded 0x400849ef: heap_caps_free at /home/ludovic/.platformio/packages/framework-espidf/components/heap/heap_caps_base.c:76
WARNING Decoded 0x40094bf9: free at /home/ludovic/.platformio/packages/framework-espidf/components/newlib/heap.c:39
WARNING Decoded 0x400d9195: esphome::RAMAllocator<unsigned char>::deallocate(unsigned char*, unsigned int) at /home/ludovic/Downloads/.esphome/build/m5stack-atom-echo-0ae94c/src/esphome/core/helpers.h:907
(inlined by) esphome::audio::AudioTransferBuffer::deallocate_buffer_() at /home/ludovic/Downloads/.esphome/build/m5stack-atom-echo-0ae94c/src/esphome/components/audio/audio_transfer_buffer.cpp:105
WARNING Decoded 0x400d91b7: esphome::audio::AudioTransferBuffer::~AudioTransferBuffer() at /home/ludovic/Downloads/.esphome/build/m5stack-atom-echo-0ae94c/src/esphome/components/audio/audio_transfer_buffer.cpp:10
WARNING Decoded 0x400dcb07: esphome::audio::AudioSourceTransferBuffer::~AudioSourceTransferBuffer() at /home/ludovic/Downloads/.esphome/build/m5stack-atom-echo-0ae94c/src/esphome/components/audio/audio_transfer_buffer.h:118
(inlined by) std::default_delete<esphome::audio::AudioSourceTransferBuffer>::operator()(esphome::audio::AudioSourceTransferBuffer*) const at /home/ludovic/.platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:93
(inlined by) std::default_delete<esphome::audio::AudioSourceTransferBuffer>::operator()(esphome::audio::AudioSourceTransferBuffer*) const at /home/ludovic/.platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:87
(inlined by) std::__uniq_ptr_impl<esphome::audio::AudioSourceTransferBuffer, std::default_delete<esphome::audio::AudioSourceTransferBuffer> >::reset(esphome::audio::AudioSourceTransferBuffer*) at /home/ludovic/.platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:205
(inlined by) std::unique_ptr<esphome::audio::AudioSourceTransferBuffer, std::default_delete<esphome::audio::AudioSourceTransferBuffer> >::reset(esphome::audio::AudioSourceTransferBuffer*) at /home/ludovic/.platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:503
(inlined by) esphome::i2s_audio::I2SAudioSpeaker::speaker_task(void*) at /home/ludovic/Downloads/.esphome/build/m5stack-atom-echo-0ae94c/src/esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp:459
I seem to be able to mitigate this one by changing the lambda’s return value to return std::string(x);
By the way, your first fail case looks like it’s a log you saw when connecting to the web interface (i.e., no log after it shuts down), and the second log might be just the same but connected to the USB interface so you have log after the wifi adapter fails, is that possible?
Logs of three tries, of which one was successful:
[16:40:13.851][D][ring_buffer:034][ann_read]: Created ring buffer with size 6000
[16:40:13.887][D][speaker_media_player.pipeline:124]: Decoded audio has 2 channels, 16000 Hz sample rate, and 16 bits per sample
[16:40:13.891][D][i2s_audio.speaker:102]: Starting
[16:40:13.895][D][i2s_audio.speaker:106]: Started
[16:40:13.906][D][ring_buffer:034][speaker_task]: Created ring buffer with size 3840
[16:40:14.055]Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.
[16:40:14.059]Core 1 register dump:
[16:40:14.067]PC : 0x401a73af PS : 0x00060830 A0 : 0x8017ce8c A1 : 0x3ffdd440
WARNING Decoded 0x401a73af: ppRecycleRxPkt
[16:40:14.931]A2 : 0x3ffd9ab4 A3 : 0x00060823 A4 : 0x00060820 A5 : 0x00060623
[16:40:14.932]A6 : 0x00000001 A7 : 0x0000abab A8 : 0x0b5bee0d A9 : 0x0b5bee15
[16:40:14.932]A10 : 0x3ffb057c A11 : 0xffffffff A12 : 0xb33fffff A13 : 0x00060823
[16:40:14.933]A14 : 0x00000000 A15 : 0x0000abab SAR : 0x00000010 EXCCAUSE: 0x0000001d
[16:40:14.934]EXCVADDR: 0x0b5bee11 LBEG : 0x4000c349 LEND : 0x4000c36b LCOUNT : 0x00000000
[16:40:14.937]Backtrace: 0x401a73ac:0x3ffdd440 0x4017ce89:0x3ffdd460 0x401a9de3:0x3ffdd480 0x401a3a21:0x3ffdd4a0 0x4018ed75:0x3ffdd4c0 0x401325de:0x3ffdd4e0 0x4012f0c2:0x3ffdd500 0x4012fb76:0x3ffdd540 0x4012fc6a:0x3ffdd5a0 0x40140925:0x3ffdd5c0 0x401a450f:0x3ffdd5e0 0x401246b6:0x3ffdd600 0x400d7b38:0x3ffdd640 0x400d7b95:0x3ffdd660 0x400e209c:0x3ffdd680
WARNING Found stack trace! Trying to decode it
WARNING Decoded 0x401a73ac: ppRecycleRxPkt
WARNING Decoded 0x4017ce89: esp_wifi_internal_free_rx_buffer
WARNING Decoded 0x401a9de3: wifi_free at /data/cache/platformio/packages/framework-espidf/components/esp_wifi/src/wifi_netif.c:59
WARNING Decoded 0x401a3a21: esp_netif_free_rx_buffer at /data/cache/platformio/packages/framework-espidf/components/esp_netif/lwip/esp_netif_lwip.c:1252
WARNING Decoded 0x4018ed75: esp_pbuf_free at /data/cache/platformio/packages/framework-espidf/components/esp_netif/lwip/netif/esp_pbuf_ref.c:36
WARNING Decoded 0x401325de: pbuf_free at /data/cache/platformio/packages/framework-espidf/components/lwip/lwip/src/core/pbuf.c:770
(inlined by) pbuf_free at /data/cache/platformio/packages/framework-espidf/components/lwip/lwip/src/core/pbuf.c:727
WARNING Decoded 0x4012f0c2: lwip_recv_tcp at /data/cache/platformio/packages/framework-espidf/components/lwip/lwip/src/api/sockets.c:1049
WARNING Decoded 0x4012fb76: lwip_recvfrom at /data/cache/platformio/packages/framework-espidf/components/lwip/lwip/src/api/sockets.c:1257
WARNING Decoded 0x4012fc6a: lwip_recv at /data/cache/platformio/packages/framework-espidf/components/lwip/lwip/src/api/sockets.c:1322
WARNING Decoded 0x40140925: recv at /data/cache/platformio/packages/framework-espidf/components/lwip/include/lwip/sockets.h:38
(inlined by) tcp_read at /data/cache/platformio/packages/framework-espidf/components/tcp_transport/transport_ssl.c:309
WARNING Decoded 0x401a450f: esp_transport_read at /data/cache/platformio/packages/framework-espidf/components/tcp_transport/transport.c:140
WARNING Decoded 0x401246b6: esp_http_client_read at /data/cache/platformio/packages/framework-espidf/components/esp_http_client/esp_http_client.c:1275
WARNING Decoded 0x400d7b38: esphome::audio::AudioReader::http_read_() at /data/build/atom-echo-1/src/esphome/components/audio/audio_reader.cpp:288
WARNING Decoded 0x400d7b95: esphome::audio::AudioReader::read() at /data/build/atom-echo-1/src/esphome/components/audio/audio_reader.cpp:224
WARNING Decoded 0x400e209c: esphome::speaker::AudioPipeline::read_task(void*) at /data/build/atom-echo-1/src/esphome/components/speaker/media_player/audio_pipeline.cpp:418 (discriminator 1)
<... reboot, then: >
[16:41:42.732][D][light:089]: 'M5Stack Atom Echo 1' Setting:
[16:41:42.736][D][light:077]: Brightness: 100%
[16:41:42.744][D][light:113]: Red: 0%, Green: 0%, Blue: 100%
[16:41:42.748][D][media_player:083]: 'M5Stack Atom Echo 1' - Setting
[16:41:42.752][D][media_player:087]: Command: ENQUEUE
[16:41:42.764][D][media_player:090]: Media URL: http://192.168.50.5:8123/api/tts_proxy/9VyhnauOJF_52G3a06uHmA.wav
[16:41:42.768][D][media_player:096]: Announcement: yes
[16:41:42.776][D][voice_assistant:478]: State changed from IDLE to STREAMING_RESPONSE
[16:41:42.780][D][voice_assistant:485]: Desired state set to STREAMING_RESPONSE
[16:41:42.788][D][micro_wake_word:367]: Stopping wake word detection
[16:41:42.792][D][light:089]: 'M5Stack Atom Echo 1' Setting:
[16:41:42.796][D][light:077]: Brightness: 100%
[16:41:42.800][D][light:113]: Red: 0%, Green: 0%, Blue: 100%
[16:41:42.808][D][speaker_media_player:406]: State changed to ANNOUNCING
[16:41:42.816][D][micro_wake_word:375]: State changed from DETECTING_WAKE_WORD to STOPPING
[16:41:42.824][D][micro_wake_word:270]: Inference task is stopping, deallocating buffers
[16:41:42.828][D][micro_wake_word:275]: Inference task is finished, freeing task resources
[16:41:42.836][D][micro_wake_word:375]: State changed from STOPPING to STOPPED
[16:41:42.844][D][speaker_media_player.pipeline:114]: Reading WAV file type
[16:41:42.852][D][ring_buffer:034][ann_read]: Created ring buffer with size 6000
[16:41:42.860][D][speaker_media_player.pipeline:124]: Decoded audio has 2 channels, 16000 Hz sample rate, and 16 bits per sample
[16:41:42.864][D][i2s_audio.speaker:102]: Starting
[16:41:42.868][D][i2s_audio.speaker:106]: Started
[16:41:42.879][D][ring_buffer:034][speaker_task]: Created ring buffer with size 3840
[16:41:43.600][D][i2s_audio.speaker:111]: Stopping
[16:41:43.604][D][i2s_audio.speaker:116]: Stopped
[16:41:43.608][D][light:089]: 'M5Stack Atom Echo 1' Setting:
[16:41:43.612][D][light:077]: Brightness: 60%
[16:41:43.620][D][light:113]: Red: 100%, Green: 89%, Blue: 71%
[16:41:43.624][D][speaker_media_player:406]: State changed to IDLE
[16:41:43.632][D][voice_assistant:350]: Announcement finished playing
[16:41:43.640][D][voice_assistant:478]: State changed from STREAMING_RESPONSE to RESPONSE_FINISHED
[16:41:43.644][D][voice_assistant:485]: Desired state set to RESPONSE_FINISHED
[16:41:43.652][D][voice_assistant:478]: State changed from RESPONSE_FINISHED to IDLE
[16:41:43.656][D][voice_assistant:485]: Desired state set to IDLE
[16:41:43.664][D][micro_wake_word:357]: Starting wake word detection
<... worked once, but then: >
[16:41:50.324][D][speaker_media_player.pipeline:114]: Reading WAV file type
[16:41:50.332][D][ring_buffer:034][ann_read]: Created ring buffer with size 6000
[16:41:50.368][D][speaker_media_player.pipeline:124]: Decoded audio has 2 channels, 16000 Hz sample rate, and 16 bits per sample
[16:41:50.372][D][i2s_audio.speaker:102]: Starting
[16:41:50.376][D][i2s_audio.speaker:106]: Started
[16:41:50.384][D][ring_buffer:034][speaker_task]: Created ring buffer with size 3840
[16:41:50.860]assert failed: block_merge_prev tlsf_control_functions.h:521 (block_is_free(prev) && "prev block is not free though marked as such")
[16:41:50.884]Backtrace: 0x40083139:0x3ffd8050 0x4008a889:0x3ffd8070 0x40091cd1:0x3ffd8090 0x4008f6c7:0x3ffd81b0 0x4008f582:0x3ffd81d0 0x40083767:0x3ffd81f0 0x40091d01:0x3ffd8210 0x40183639:0x3ffd8230 0x40182df5:0x3ffd8250 0x400e20ce:0x3ffd8270
WARNING Found stack trace! Trying to decode it
WARNING Decoded 0x40083139: panic_abort at /data/cache/platformio/packages/framework-espidf/components/esp_system/panic.c:469
WARNING Decoded 0x4008a889: esp_system_abort at /data/cache/platformio/packages/framework-espidf/components/esp_system/port/esp_system_chip.c:87
WARNING Decoded 0x40091cd1: __assert_func at /data/cache/platformio/packages/framework-espidf/components/newlib/assert.c:80
WARNING Decoded 0x4008f6c7: block_next at /data/cache/platformio/packages/framework-espidf/components/heap/tlsf/tlsf_block_functions.h:161 (discriminator 1)
(inlined by) block_link_next at /data/cache/platformio/packages/framework-espidf/components/heap/tlsf/tlsf_block_functions.h:168 (discriminator 1)
(inlined by) block_mark_as_free at /data/cache/platformio/packages/framework-espidf/components/heap/tlsf/tlsf_block_functions.h:176 (discriminator 1)
(inlined by) tlsf_free at /data/cache/platformio/packages/framework-espidf/components/heap/tlsf/tlsf.c:631 (discriminator 1)
WARNING Decoded 0x4008f582: multi_heap_free_impl at /data/cache/platformio/packages/framework-espidf/components/heap/multi_heap.c:233
(inlined by) multi_heap_free_impl at /data/cache/platformio/packages/framework-espidf/components/heap/multi_heap.c:222
WARNING Decoded 0x40083767: heap_caps_free at /data/cache/platformio/packages/framework-espidf/components/heap/heap_caps_base.c:76
WARNING Decoded 0x40091d01: free at /data/cache/platformio/packages/framework-espidf/components/newlib/heap.c:39
WARNING Decoded 0x40183639: operator delete(void*) at /builds/idf/crosstool-NG/.build/xtensa-esp-elf/src/gcc/libstdc++-v3/libsupc++/del_op.cc:49
WARNING Decoded 0x40182df5: operator delete(void*, unsigned int) at /builds/idf/crosstool-NG/.build/xtensa-esp-elf/src/gcc/libstdc++-v3/libsupc++/del_ops.cc:33
WARNING Decoded 0x400e20ce: std::default_delete<esphome::audio::AudioReader>::operator()(esphome::audio::AudioReader*) const at /data/cache/platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:93 (discriminator 1)
(inlined by) std::default_delete<esphome::audio::AudioReader>::operator()(esphome::audio::AudioReader*) const at /data/cache/platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:87 (discriminator 1)
(inlined by) std::unique_ptr<esphome::audio::AudioReader, std::default_delete<esphome::audio::AudioReader> >::~unique_ptr() at /data/cache/platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:398 (discriminator 1)
(inlined by) esphome::speaker::AudioPipeline::read_task(void*) at /data/build/atom-echo-1/src/esphome/components/speaker/media_player/audio_pipeline.cpp:434 (discriminator 1)
@isfab I am also facing these crashes, with the default config without notifications. Did you manage to solve the issue? Or have any pointer where the issue is being discussed?