Die Funktion ist in der ESP8266WiFi.h eingebaut.
Ich mach es so:
Das kann man noch um einiges einkürzen, wenn man die ganzen Meldungen nicht haben will.Code:void FirmwareUpdate() { // Überprüfen der Firmwareversion des Programmms auf dem Server int FirmwareNeu = 0; http.begin(URL_Mit_VersionsInfo); // Textdatei mit Version aufrufen int httpCode = http.GET(); // Antwort des Servers einlesen if (httpCode == HTTP_CODE_OK) // Wenn Antwort OK { String payload = http.getString(); // text einlesen FirmwareNeu = payload.toInt(); // Zahl aus Sting bilden } http.end(); if (FirmwareNeu > FirmwareVer) // Firmwareversion mit aktueller vergleichen { Serial.println("Neue Firmware verfuegbar"); Serial.println("Starte Download"); ESPhttpUpdate.rebootOnUpdate(false);// reboot abschalten, wir wollen erst Meldungen ausgeben t_httpUpdate_return ret = ESPhttpUpdate.update(URL_Mit_Firmware); switch (ret) { case HTTP_UPDATE_FAILED: Serial.printf("Update fehlgeschlagen. Fehler: (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); break; case HTTP_UPDATE_OK: Serial.println("Update erfolgreich"); Serial.flush(); Serial.println("Reset"); Serial.flush(); delay(1); ESP.reset(); delay(100); break; } } else { Serial.println("keine neue Version gefunden"); } Serial.println("Wir koennen loslegen..."); }
Auf dem Server liegen zwei Dateien:
einmal eine *.txt, die nichts weiter enthält, als die Versionsnummer (ansonsten muss die wirklich leer sein).
zum anderen die Firmware.bin, die man aus Arduino ja raus exportieren kann.
In der muss die gleiche Versionsnummer hinterlegt sein, wie in der *.txt:
Nun baut der ESP zuerst eine Verbindung zum Server auf, schaut sich die Textdatei an, extrahiert die Zahl aus dem Inhalt und vergleicht die mit FirmwareVer.Code:#define FirmwareVer 11
Wenn die aus der Textdatei grösser ist, wird das Update ausgelöst...danach kommt ein bisschen Serieller Zauber (macht sich beim debuggen ganz gut), und ein Reboot-fertig.
Falls kein Update vorliegt, wird der Updater übersprungen und einfach zum normalen Betrieb übergegangen.
Die beiden URL's zur Textdatei und der *.bin sind ebenfalls als Konstanten definiert.
Das Ganze kann man sich einrichten, wie man will- bei mir wird die Funktion bei jedem Neustart aufgerufen (einfach in der setup()), man kann das aber beliebig machen, auch z.B. zeitgesteuert (jede Stunde mal nachsehen oder so), oder nen Taster für vorsehen..was eben gerade passt.







Zitieren

Lesezeichen