Ich habe das leider noch wie vor nicht getestet, aber werde schauen, dass ich das in der nächsten Woche endlich mal hinkriege. Ist auf jeden Fall wichtig, dass OTA stabil funktioniert.
Ich hatte gestern wieder diesen OTA-Bug. Ich habe dann den commit von @fetzerch installiert, klappte ausgezeichnet.
Damit kann ich leben , sind die 2 todo´s wichtig, ich kann das nicht einschätzen? Wäre schön wenn das in den Master kommt.
Ich kann schlecht einschätzen um welche inkompatible Hardware es sich handelt und was das Problem wäre, wenn das auf dieser Hardware angewendet wird.
Ich kann auch nur bestätigen, dass diese Änderung bei mir super funktioniert…
Ich denke es wäre halt gut, wenn wir die 2 von mir beschriebenen potentiellen Fehlerquellen ausschließen können.
Es bräuchte also jemanden, der den PR (platformio: Erase OTA partition before upload by fetzerch · Pull Request #190 · biologist79/ESPuino · GitHub) auf einem Board ohne OTA support testen könnte. Sollte das Pre-Upload-Script hier Probleme machen, dann müssen wir das in der platformio.ini eben nur bei Boardkonfigurationen eintragen die OTA unterstützen.
Das zweite Problem könnten auftreten, wenn jemand ein komplett frisches Devboard flasht. Da gibt es ja dann keine OTA Partition - und ich bin mir nicht sicher was dann passiert. Das könnte vielleicht am ehesten @biologist selbst probieren.
EDIT: Ein dritter Test wäre vielleicht ob das ganze unter Windows auch funktioniert.
Wenn das klappt können wir das Script dann auch nach master oder (vielleicht besser erstmal dev) mergen.
@fetzerch
1.Versuch
lolin32 ==> geht so nicht
Archiving .pio/build/lolin32/libFrameworkArduino.a
Indexing .pio/build/lolin32/libFrameworkArduino.a
Linking .pio/build/lolin32/firmware.elf
Retrieving maximum program size .pio/build/lolin32/firmware.elf
Checking size .pio/build/lolin32/firmware.elf
Advanced Memory Usage is available via „PlatformIO Home > Project Inspect“
RAM: [== ] 21.6% (used 70772 bytes from 327680 bytes)
Flash: [====== ] 58.9% (used 2277813 bytes from 3866624 bytes)
Building .pio/build/lolin32/firmware.bin
esptool.py v4.5
Creating esp32 image…
Merged 25 ELF sections
Successfully created esp32 image.
before_upload([„upload“], [„.pio/build/lolin32/firmware.bin“])
Performing pre-upload erase of OTA partition…
scons: *** [upload] CalledProcessError : Command ‚[‘/Users/willmar/.platformio/penv/bin/python’, ‚/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/esptool_py/esptool/esptool.py‘, ‚read_flash‘, ‚32768‘, ‚3072‘, ‚/var/folders/ft/m2nh_4gn1r33tr7swjh7_y840000gn/T/tmpc90zf2qi‘]’ returned non-zero exit status 2.
Traceback (most recent call last):
File „/Users/willmar/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Action.py“, line 1318, in execute
result = self.execfunction(target=target, source=rsources, env=env)
File „/Users/willmar/Documents/PlatformIO/Projects/ESPuino-dev_multi_03_04_2023/eraseOTA.py“, line 30, in before_upload
ota_target = OtatoolTarget(env.subst(„$UPLOAD_PORT“))
File „/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/app_update/otatool.py“, line 56, in init
self.target = ParttoolTarget(port, baud, partition_table_offset, partition_table_file, esptool_args,
File „/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/partition_table/parttool.py“, line 112, in init
self._call_esptool([„read_flash“, str(partition_table_offset), str(gen.MAX_PARTITION_LENGTH), temp_file.name])
File „/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/partition_table/parttool.py“, line 132, in _call_esptool
subprocess.check_call(esptool_args, stdout=null_file, stderr=null_file)
File „/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/subprocess.py“, line 369, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command ‚[‘/Users/willmar/.platformio/penv/bin/python’, ‚/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/esptool_py/esptool/esptool.py‘, ‚read_flash‘, ‚32768‘, ‚3072‘, ‚/var/folders/ft/m2nh_4gn1r33tr7swjh7_y840000gn/T/tmpc90zf2qi‘]’ returned non-zero exit status 2.
================================================================================ [FAILED] Took 71.09 seconds ================================================================================
Environment Status Duration
lolin32 FAILED 00:01:11.088
=========================================================================== 1 failed, 0 succeeded in 00:01:11.088 ===========================================================================
2. Versuch
ESP32-A1S (16MB) mit erase flash gelöscht , auch dann geht es nicht .
| |-- FS @ 2.0.0
|-- Preferences @ 2.0.0
Building in release mode
Compiling .pio/build/esp32-a1s/src/Web.cpp.o
Linking .pio/build/esp32-a1s/firmware.elf
Retrieving maximum program size .pio/build/esp32-a1s/firmware.elf
Checking size .pio/build/esp32-a1s/firmware.elf
Advanced Memory Usage is available via „PlatformIO Home > Project Inspect“
RAM: [== ] 21.4% (used 70108 bytes from 327680 bytes)
Flash: [=== ] 34.5% (used 2261217 bytes from 6553600 bytes)
Building .pio/build/esp32-a1s/firmware.bin
esptool.py v4.5
Creating esp32 image…
Merged 25 ELF sections
Successfully created esp32 image.
before_upload([„upload“], [„.pio/build/esp32-a1s/firmware.bin“])
Performing pre-upload erase of OTA partition…
*** [upload] Exception : No otadata partition found
Traceback (most recent call last):
File „/Users/willmar/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Action.py“, line 1318, in execute
result = self.execfunction(target=target, source=rsources, env=env)
File „/Users/willmar/Documents/PlatformIO/Projects/ESPuino-dev_multi_03_04_2023/eraseOTA.py“, line 31, in before_upload
ota_target.erase_otadata()
File „/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/app_update/otatool.py“, line 76, in erase_otadata
self._check_otadata_partition()
File „/Users/willmar/.platformio/packages/framework-espidf@3.40001.200521/components/app_update/otatool.py“, line 73, in _check_otadata_partition
raise Exception(„No otadata partition found“)
Exception: No otadata partition found
================================================================================ [FAILED] Took 46.59 seconds ================================================================================
Environment Status Duration
esp32-a1s FAILED 00:00:46.588
=========================================================================== 1 failed, 0 succeeded in 00:00:46.588 ===========================================================================
- The terminal process „platformio ‚run‘, ‚–target‘, ‚upload‘, ‚–target‘, ‚monitor‘, ‚–environment‘, ‚esp32-a1s‘“ terminated with exit code: 1.
- Terminal will be reused by tasks, press any key to close it.
Fazit : wer es im Moment mit neuen ESP32 die noch keine OTA-Partition haben nutzen will muss die 2 Zeilen in platformio.ini für den 1. Flash deaktivieren. Bestehen die OTA-Partitionen schon geht es einwandfrei
Ich möchte dieses Thema hier nochmal in Erinnerung rufen.
Vielleicht wurde das Problem zwischenzeitlich auch anderweitig gelöst (durch Espressif).
Ich habe die letzte Zeit reichlich oft per OTA oder UART , ohne darauf zu achten, geflasht , es hat immer funktioniert.
Um nochmal diejenigen abzuholen, die sich noch nicht so lange mit ESPuino beschäftigen: Man kann, siehe erster Post, Firmwares auch über das Webinterface hochladen. Geht natürlich erst, wenn sich bereits ESPuino auf dem ESP befindet.
Dabei kam es in der Vergangenheit jedoch „immer mal wieder“ zu dem Problem, dass weiterhin die alte Firmware gebootet wurde und erneute OTA-Uploads das Problem auch nicht mehr beseitigt haben. Selbst reguläres Flashen hat dies (meines Wissens) nicht mehr geändert. Sicher kam man da nur wieder durch „Erase Flash“ und erneutes Flashen raus.
Und an dieser Stelle stellt sich jetzt die Frage, ob dieses Problem beim jetzt neuen Master noch eines ist.
Danke für den Hinweis! Hab’s gerade hin- und hergetestet, also ein/zwei/drei/vier mal OTA-Update, dann Upload über UART. Jedes Mal wird die richtige Firmware gebootet
Das Problem hat sich also von selbst erledigt, vermutlich über einen Bugfix in PlatformIO