@Joe91 hat sich in der letzten Zeit viel Arbeit gemacht und irgendwie müssen wir das jetzt mal in gescheite Bahnen lenken und testen. Vieles davon dürfte in Musiktitel hüpft während des Abspielens vor, spielt weiter bis zum Titelende und stoppt dann dokumentiert sein, aber ich habe ehrlich gesagt den Überblick verloren.
Es geht, @Joe91 korrigiere mich gerne, um drei Dinge:
a) Die MQTT-Topics werden ab sofort dynamisch generiert
Das bedeutet, dass die Topics weiterhin die aktuelle Struktur haben, jedoch in settings.h nicht mehr ausformuliert sind. Dort findet man nur noch den Rumpf:
Der Zusammenbau erfolgt in mqtt.cpp, wobei der mittlere Teil von zB „Cmnd/ESPuino/Sleep“ dynamisch bestimmt wird. D.h. es wird die „MQTT-ClientId“ aus dem Webinterface verwendet.
@Joe91 Ich glaube DEVICE_HOSTNAME macht an dieser Stelle so keinen Sinn mehr, weil das wird nur erstmalig ausgelesen und dann nicht mehr, sobald es im NVS liegt. Mein Vorschlag wäre, das in der settings.h rauszunehmen und stattdessen die Mac-Adresse mit reinzubringen (irgendwie so ESPuino_MAC). @JHB hatte das auch mal vorgeschlagen: Neues Namensschema für MQTT - #22 von JHB. Dann ist es zumindest erstmal unique und kollidiert nicht mit anderen ESPuinos. Ich für meinen Teil würde diese ID gerne im Topic erstmal drin lassen. Das ist auf jeden Fall straight forward. Wer das anders haben will, der soll es sich halt umprogrammieren. Langfristig wollen wir die Topics aber eh im Webinterface machen und dann werden auch diejenigen glücklich werden, die das anders haben wollen.
@DexXxter007 Ich habe deinen PR zugemacht - aus dem Grund, den @Joe91 dort auch kommentiert hat.
b) Der Audiotask ist nicht mehr in einem eigenen Task und die Cmnd-Queue ist entfernt
@Joe91 Vielleicht kannst du ein paar Worte noch dazu sagen. Also was so die Vor- und Nachteile in deinem Testing waren.
c) Fastled mit SPI
War hier beschrieben: Musiktitel hüpft während des Abspielens vor, spielt weiter bis zum Titelende und stoppt dann - #83 von Joe91
@Joe91 Ich habe GitHub - Joe91/ESPuino at more_flexible_mqtt ausgecheckt und habe dich so verstanden, dass da quasi alles integriert ist. Getestet habe ich das Ganze erstmal nur auf meiner Complete (die von vor >2j). Dabei ist mir übrigens aufgefallen mit dem letzten dev-Stand, dass ich die Probleme mit dem Neopixel-Geblinke nicht nachstellen konnte. Also möglicherweise hat das mit der Sandwich-Konstruktion der mini4L auch zu tun. Ich muss das die Tage nochmal auf einer mini4L testen.
Hier aber nun meine Ergebnisse:
- MQTT war ok soweit
- Upload war auf dem aktuellen dev 511 kB/s zu jetzt (mit nun nicht mehr deaktiviertem LED-Task) 454 kB/s. Das ist jeweils der Mittelwert aus drei Tests.
- Mit parallel laufendem mp3 mit 320 kBit/s, das hat mich beeindruckt, waren es immer noch 370 kB/s. Ich glaube es wurde nicht 100 Prozent fehlerfrei abgespielt, aber wenn, dann waren es nur ganz wenig Fehler.
- Webradio hat funktioniert (nur eines mit 192 kBit/s getestet per http)
- Neopixel war ok, keine Fehler
- Aktuell Showstopper für mich, dass ich bei vielen mp3s Probleme mit Neustarts direkt beim Aufruf hatte:
N [295198] Modus: Einzelner Track
I [295204] info : Closing audio file „02_Fussball-Profi2.mp3“
N [295205] Neue Playlist mit 1 Titel(n) empfangen
D [295206] Free heap: 146628
I [295237] info : buffers freed, free Heap: 146320 bytes
I [295244] info : Reading file: „/mp3/01 - Crackdown.mp3“
I [295255] info : MP3Decoder has been initialized, free Heap: 122308 bytes , free stack 5308 DWORDs
N [295260] ‚/mp3/01 - Crackdown.mp3‘ wird abgespielt (1 von 1)
D [295635] no cover image for SD-card audio
I [295757] info : Content-Length: 11820753
I [295757] info : ID3 framesSize: 74268
I [295757] info : ID3 version: 2.3
I [295774] info : ID3 normal frames
I [295804] id3data : Title: Crackdown
I [295832] id3data : Artist: Marcus Intalex, Spirit
I [295856] id3data : Album: Crackdown
I [295882] id3data : ContentType: Dance & DJ
I [295906] id3data : Composer: Marcus Kaye
I [295931] id3data : Conductor:
I [295956] id3data : Track: 1/1
I [295982] id3data : Year: 2021
I [296006] id3data : Band: Marcus Intalex, Spirit
I [296056] id3data : Copyright: Metalheadz Ltd
I [296082] id3data : PartOfSet: 1/1
I [296212] info : Audio-Length: 11746485
CORRUPT HEAP: Bad tail at 0x3f8df260. Expected 0xbaad5678 got 0x00000000
assert failed: multi_heap_free multi_heap_poisoning.c:279 (head != NULL)
Backtrace: 0x40084a74:0x3ffb1da0 0x4008dab5:0x3ffb1dc0 0x4009193d:0x3ffb1de0 0x4009060f:0x3ffb1f20 0x4008514f:0x3ffb1f40 0x4009196d:0x3ffb1f60 0x4010127a:0x3ffb1f80 0x40102028:0x3ffb2100 0x40102556:0x3ffb2120 0x40108447:0x3ffb2170 0x400d3aed:0x3ffb21a0 0x400d4b2c:0x3ffb2230 0x400ee553:0x3ffb2250 0x4014b8c8:0x3ffb2270 0x4008de86:0x3ffb2290
#0 0x40084a74 in panic_abort at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/esp_system/panic.c:454
#1 0x4008dab5 in esp_system_abort at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/esp_system/port/esp_system_chip.c:87
#2 0x4009193d in __assert_func at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/newlib/assert.c:80
#3 0x4009060f in multi_heap_free at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/heap/multi_heap_poisoning.c:279 (discriminator 1)
#4 0x4008514f in heap_caps_free at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/heap/heap_caps_base.c:75
#5 0x4009196d in free at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/newlib/heap.c:39
#6 0x4010127a in PsramDeleter::operator()(void*) const at .pio/libdeps/complete/ESP32-audioI2S/src/psram_unique_ptr.hpp:18
(inlined by) std::__uniq_ptr_impl<char, PsramDeleter>::reset(char*) at /Users/torsten/.platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:205
(inlined by) std::unique_ptr<char, PsramDeleter>::reset(char*) at /Users/torsten/.platformio/packages/toolchain-xtensa-esp-elf/xtensa-esp-elf/include/c++/14.2.0/bits/unique_ptr.h:503
(inlined by) ps_ptr::reset() at .pio/libdeps/complete/ESP32-audioI2S/src/psram_unique_ptr.hpp:951
(inlined by) Audio::read_ID3_Header(unsigned char*, unsigned int) at .pio/libdeps/complete/ESP32-audioI2S/src/Audio.cpp:1958
#7 0x40102028 in Audio::readAudioHeader(unsigned long) at .pio/libdeps/complete/ESP32-audioI2S/src/Audio.cpp:1255 (discriminator 1)
#8 0x40102556 in Audio::processLocalFile() at .pio/libdeps/complete/ESP32-audioI2S/src/Audio.cpp:3375 (discriminator 1)
#9 0x40108447 in Audio::loop() at .pio/libdeps/complete/ESP32-audioI2S/src/Audio.cpp:2561
#10 0x400d3aed in AudioPlayer_Loop() at src/AudioPlayer.cpp:891
#11 0x400d4b2c in AudioPlayer_Cyclic() at src/AudioPlayer.cpp:246
#12 0x400ee553 in loop() at src/main.cpp:234
#13 0x4014b8c8 in loopTask(void*) at /Users/torsten/.platformio/packages/framework-arduinoespressif32-src-6738aaddd9fb901216d5f60e093380b6/cores/esp32/main.cpp:74
#14 0x4008de86 in vPortTaskWrapper at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:139
ELF file SHA256: ddf098565
E (10148) esp_core_dump_flash: Core dump flash config is corrupted! CRC=0x7bd5c66f instead of 0x0
E (10156) esp_core_dump_elf: Elf write init failed!
E (10161) esp_core_dump_common: Core dump write failed with error=-1
Rebooting…
ets Jul 29 2019 12:21:46
Ich wollte dann ein „Full Clean“ machen, bin aber im Bauprozess in einen Fehler gelaufen, der glaube ich aktuell auch unseren Bauprozess auf GitHub verhindert:
[25/25] idf (5.4.1)
– DEBUG: Use esp-modbus component folder: /Users/torsten/Development/Platformio/Projects/ESPuino/managed_components/espressif__esp-modbus.
– Configuring incomplete, errors occurred!
fatal: not a git repository (or any of the parent directories): .git
CMake Error at /Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/tools/cmake/component.cmake:254 (message):
Traceback (most recent call last):
File „“, line 198, in _run_module_as_main
File „“, line 88, in _run_code
File „/Users/torsten/.platformio/penv/.espidf-5.4.1/lib/python3.11/site-packages/idf_component_manager/prepare_components/main.py“, line 6, in
main()
File „/Users/torsten/.platformio/penv/.espidf-5.4.1/lib/python3.11/site-packages/idf_component_manager/prepare_components/prepare.py“, line 130, in main
args.func(args)
File „/Users/torsten/.platformio/penv/.espidf-5.4.1/lib/python3.11/site-packages/idf_component_manager/prepare_components/prepare.py“, line 41, in inject_requirements
).inject_requirements(
^^^^^^^^^^^^^^^^^^^^
File „/Users/torsten/.platformio/penv/.espidf-5.4.1/lib/python3.11/site-packages/idf_component_manager/core.py“, line 98, in wrapper
return func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File „/Users/torsten/.platformio/penv/.espidf-5.4.1/lib/python3.11/site-packages/idf_component_manager/core.py“, line 835, in inject_requirements
requirements = requirements_manager.load()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File „/Users/torsten/.platformio/penv/.espidf-5.4.1/lib/python3.11/site-packages/idf_component_manager/cmake_component_requirements.py“, line 95, in load
with open(self.path, encoding=‚utf-8‘) as f:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory:
‚/Users/torsten/Development/Platformio/Projects/ESPuino/.pio/build/complete/component_requires.temp.cmake‘
Call Stack (most recent call first):
/Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916de
cb6f42c/tools/cmake/build.cmake:644 (__component_get_requirements)
/Users/torsten/.platformio/packages/framework-espidf@src-b1208ff3612f5ed4a85e916decb6f42c/tools/cmake/project.cmake:717 (idf_build_process)
CMakeLists.txt:3 (project)
@tueddy In den Fehler bist du auch gelaufen, oder?
@Joe91 Hattest du da keine Probleme mit?