Die Funktion ist in der ESP8266WiFi.h eingebaut.
Ich mach es so:
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...");
}
Das kann man noch um einiges einkürzen, wenn man die ganzen Meldungen nicht haben will.
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:
Code:
#define FirmwareVer 11
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.
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.
Lesezeichen