Das eigentliche Problem: Der ESP32 kann nativ USB, allerdings nicht als UART sondern nur mit CDC. Der „ESP-IDF Monitor“ kann nur Daten empfangen, aber nicht senden. Daher funktioniert ein getchar() im Code nicht.
Flash Layout (default): ┌─────────────────┐ │ Bootloader │ 0x1000 ├─────────────────┤ │ Partition Table│ 0x8000 ├─────────────────┤ │ NVS │ (WiFi credentials, etc.) ├─────────────────┤ │ OTA Data │ (welche Partition aktiv ist) ├─────────────────┤ │ OTA App 0 │ ← Aktuelle Firmware ├─────────────────┤ │ OTA App 1 │ ← Neue Firmware wird hier geschrieben └─────────────────┘
PC/Server hostet .bin Datei
↓
ESP32 fragt periodisch oder auf Kommando:
"Gibt es eine neue Version?"
↓
ESP32 lädt .bin herunter
↓
Schreibt in inaktive Partition
↓
Reboot → Bootloader startet neue Version
Du tippst: OTA http://192.168.1.100/firmware.bin
↓
ESP32 lädt von dieser URL
↓
Reboot
nc 192.168.1.42 2323 OTA START <size> → Ready [binary data stream] → OK: Rebooting
Kein Server nötig
Alles über bestehenden TCP Port
Komplexer zu implementieren
nc für Binärdaten ungeeignetidf.py build → firmware.bin erzeugt idf.py upload-ota --host 192.168.1.42 → ESP32 empfängt und flasht
Professionell
Kein manuelles Handling
Custom Script nötig