Last Updated on 3. Oktober 2026 by sfambachLink-Status: OK
OTA (Update over the Air) ist ein Konzept zum Aktualisieren der Firmware über ein Netzwerk. Ich habe mir die Esp32FOTALink-Status: OK Bibliothek hier mal genauer angesehen.
Alle von mir verwendeten Dateien befinden sich in folgendem Github Verzeichnis:
https://github.com/sfambach/esp32/tree/master/test/ESP32fotaLink-Status: Kaputt
Sollte etwas nicht funktionieren, lieber die Github Dateien verwenden, diese sind aktueller als der Beitrag. Bei Problemen lasst einen Kommentar da.
Anwendungsbereiche
- Für ESP32, vielleicht auch für ESP8266 (noch zu testen) und andere, die über einen Netzwerkzugang verfügen
- Bietet die Möglichkeit der Aktualisierung mehrerer Clients ohne direkten Zugang
Benötigte Komponenten
- ESP32
- Webserver (in meinem Fall ein Raspberry PI)
Versuchsaufbau
- Der ESP wird initial mit einer Firmware bespielt.
- Auf einem Webserver wird eine JSON Datei mit Update-Informationen abgelegt.
- Gibt es eine neue Firmware, wird die JSON Datei aktualisiert und der neue Code in einem Verzeichnis auf dem Webserver abgelegt.
- Der ESP schaut jede Runde in seiner Loop Funktion, ob eine neue Version vorhanden ist. Ist dies der Fall, lädt er diese herunter und aktualisiert sich.
Webserver
Installation
Ich habe bereits einen PI als Webserver und werde hier nicht mehr auf die Installation eingehen. Folgender Link könnte aber dabei helfen:
Konfiguration
Für das Projekt habe ich ein neues Verzeichnis mit einer leeren JSON Datei auf dem Webserver angelegt:
cd /var/www/html/
sudo mkdir espupdate
cd espupdate
touch update.json
In die Datei schreibe ich den folgenden Code (sudo nano update.jason).
{
"type": "esp32-heltec-kit-32",
"version": 4,
"host": "pi1",
"port": 80,
"bin": "/espupdate/esp32-heltec-kit-32-4.bin"
}
Noch allen Lese-/Ausführungsrechte einräumen
sudo chmod 755 ../espupdate/ -R
ESP Programmierung
Bibliotheken
Benötigt wird die esp32Fota Bibliothek:
Diese verwendet wiederum die ArduinoJson Bibliothek. Normalerweise kopiere ich die Bibliotheken mit in das Projektverzeichnis, damit ich immer eine lauffähige Version habe, die unabhängig davon ist, welche Bibliotheksversion in der Arduino GUI installiert ist.
Leider habe ich die ArduinoJson Bibliothek im Projektordner nicht zum Laufen bekommen (Pfadprobleme). Somit muss diese bitte über den LibManager der Arduino Gui installiert werden.
Die Einbindung von Bibliotheken im generellen ist unter folgenden Link beschrieben, hier werde ich nicht mehr näher darauf eingehen.
https://fambach.net/arduino-ide#BibliothekenLink-Status: OK
Testprogramm
Das Testprogramm kann, wenn nicht schon geschehen, über folgenden Link heruntergeladen werden.
https://github.com/sfambach/esp32/tree/master/test/ESP32fotaLink-Status: Kaputt
Bitte die WLAN Daten und ggf. die Serverdaten in der Datei P32fota.ino anpassen. Diese compilieren und auf den ESP spielen.
Binary mit neuer Version erstellen
In der Datei ESP32fota.ino die Version erhöhen:
#define VERSION 5 // hier die version um eins erhöhen
esp32FOTA esp32FOTA("esp32-heltec-kit-32", VERSION);
Danach über die Arduino Gui ein Binary erzeugen:

Im Projektordner findet sich dann eine .BIN Datei. Diese gleich benennen wie in der JSON Datei (hier esp32-heltec-kit-32-4.bin)
Und sie ins gleiche Verzeichnis wie die JSON Datei legen. Das folgende Video zeigt, wie der Versionswechsel aussehen kann.
(Der Dateiname ist nicht so wichtig, wichtiger ist die Version.)
Probleme
Json/bin Datei wird nicht gefunden
Den Pfad und die Zugriffsrechte überprüfen (sudo chmod 755)
Fazit
Die Installation gestaltet sich einfach. Ein sehr nützliches Tool, besonders wenn man mehrere Knotentypen und unterschiedliche Versionen betreibt. Durch die Verwendung der ArduinoJson Bibliothek geht sehr viel Speicher schon für das OTA verloren. Der ESP32 verfügt zwar über genügend Speicher, die Verwendung sollte jedoch gut überlegt sein.
Verwandte Beiträge
Quellen
Arduino JSonLink-Status: OK
ESP32FOtaLink-Status: Kaputt
AZ-Delivery ProjektLink-Status: Unbekannt
| Datum | Änderung | Autor |
|---|---|---|
| 03.10.2026 | Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik Log-Liste eingefügt | sfambach |
| 06.09.2019 | Beitrag erstellt | sfambach |
Super Sache, funktioniert!
Eine bedeutende Verbesserung wäre noch der Umstieg von HTTP auf HTTPS, aber daran bin ich bisher immer gescheitert.
Vllt. einen weiteren Blogeintrag wert 😉
Viele Grüße!
Hallo Martin, ja Https wäre schön, in nächster Zeit wird das hier aber leider kein Beitrag, meine „Projektzeit“ ist aktuell mit „Hometeaching“ … und anderen Projekten mehr als ausgebucht :). Ich versuche es aber im Hinterkopf zu behalten.
Gruß
Stef
😀 und mein Problem ist gelöst!
Da sieht man mal wieder, dass man seine Probleme häufig auch selber lösen kann, wenn man nur darüber spricht:
Ich Trottel habe im Pfad das Protokoll http mit angegeben. Daher klappte es auch im Browser….
Habe jetzt http weggelassen und siehe da, es klappt.
Trotzdem vielen Dank und ich hoffe, du machst mit deinem Blog weiter so 🙂
Viele Grüße!
Moin und vielen Dank für deinen Beitrag, schön dass du es selbst gefunden hast.
Gruß Stefan
Zunächst erst mal „Danke“ für deinen Beitrag hier! Du erklärst es echt gut und dank dir habe ich es bisher weit geschafft mit meinem ESP32.
Jedoch habe ich ein kleines Problem:
Der ESP32 liest die json-Datei aus und bemerkt auch, dass es eine neue Version gibt. Jedoch kommt dann die folgende Fehlermeldung:
————————–
updating
Connecting to: http://www…..de
Fetching Bin: /OTA/esp32-heltec-kit-32-2.bin
Got a non 200 status code from server. Exiting OTA Update.
contentLength : 0, isValidContentType : 0
There was no content in the response
————————-
Der Pfad ist definitiv richtig, da ich mit meinem Browser die bin-Datei unter eben diesen Pfad runterladen kann. Dementsprechend sind auch alle Rechte richtig vergeben (755). Die bin-Datei ist 873 kb Groß – und nicht Null.
Woran könnte das liegen? Ich habe schon verschiedene Pfade ausprobiert und weiß momentan nicht weiter.
Über eine kurze Rückmeldung würde ich mich freuen..
Wobei mir noch eine kurze Frage kommt 🙂 Du sagst, dass für die Json-Bibliothek viel Speicher benötigt wird. Gibt es auch eine alternative, die weniger Speicher frisst?
Viele Grüße!!