Inhaltsverzeichnis:
- Schritt 1: Was Sie brauchen
- Schritt 2: Erstellen Sie ein Repository für binäre Firmwares
- Schritt 3: Erstellen Sie die Binärdateien
- Schritt 4: Erstellen Sie den Serverflow
- Schritt 5: Fügen Sie die Serverlogik hinzu
- Schritt 6: Fügen Sie der Skizze Code hinzu, um ein Update anzufordern
- Schritt 7: Starten Sie schließlich das Update
Video: Einrichten eines automatischen ESP8266-Update-Servers - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:22
Viele Leute verwenden jetzt den ESP8266 in seinen vielen Erscheinungsformen (ESP-01S, Wemos D1, NodeMCU, Sonoff usw.) für Heimautomatisierungssysteme. Wenn Sie Ihren eigenen Code schreiben (wie ich), wird es etwas mühsam, jeden von diesen separat zu aktualisieren, sogar über OTA (over the air).
Mein eigenes System hat zum Beispiel 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV und eine NodeMCU, die sich eine gemeinsame Codebasis teilen, also insgesamt 33 Geräte zu aktualisieren, wenn ich einen einfachen Code erstelle Veränderung.
Aber es gibt einen einfacheren Weg: Einen "Update-Server". Die hervorragende Arduino IDE + ESP8266-Kern verfügt über eine Bibliothek, die den größten Teil der Arbeit erledigt (ESP8266httpUpdate), aber Sie müssen wissen, wie Sie Ihren eigenen Server einrichten, damit er funktioniert.
Dieses Instructable zeigt Ihnen, wie Sie einen NODE-RED-Server verwenden, aber die gleiche Logik gilt für jede Servertechnologie Ihrer Wahl, z. Apache + PHP usw
Schritt 1: Was Sie brauchen
- Arduino-IDE
- ESP8266-Kern
- Jedes ESP8266-Entwicklungsboard mit 1 MB oder mehr Flash-RAM
- Ein Webserver (sogar ein bescheidener Himbeer-Pi reicht aus - es ist das, was ich benutze)
- (optional) mkspiffs-Tool, wenn Sie ein SPIFFS-Dateisystem-Image automatisch aktualisieren möchten
Schritt 2: Erstellen Sie ein Repository für binäre Firmwares
Auf meinem Server habe ich einen Ordner namens /home/pi/trucFirmware, der die verschiedenen Gerätefirmwares und SPIFFS-Images enthält
Ich pflege eine separate Binärdatei für jeden Hardwaretyp (aus einer einzigen Quelldatei mit ein paar #defines) und wenn eine neue Version fertig ist, verwende ich den Arduino-IDE-Menübefehl "Skizze/Kompilierte Binärdatei exportieren" für jedes Zielgerät Obwohl es 5 verschiedene Hardwaretypen gibt, gibt es nur zwei SPIFFS-Binärdateien: eine 1M- und eine 4M-Version - erstellt mit dem mkspiffs-Tool - da alle Geräte entweder 1M- oder 4M-Flash haben.
Schritt 3: Erstellen Sie die Binärdateien
Erstellen Sie mit der Arduino IDE-Menüoption Sketch/Export Compiled Binary die Firmware, die auf das Gerät hochgeladen wird, wenn es vom Update-Server angefordert wird.
Wenn Sie eine SPIFFS-Binärdatei benötigen, müssen Sie das mkspiffs-Tool installieren.
Sobald Sie es haben, ist das Erstellen der SPIFFS-Binärdatei einfach. Ich habe eine einzeilige Batchdatei für die 1M-Version, die die Versionsnummer als Parameter verwendet (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
und ein weiteres für die 4M-Version:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Ich kopiere dann alle kompilierten Binärdateien und die SPIFFS.binary-Dateien in das Repository
Schritt 4: Erstellen Sie den Serverflow
Ich verwende NODE-RED, aber die einfache Logik ist bei jeder Servertechnologie / -sprache gleich.
a) Definieren Sie eine URL, die auf die ESP8266httpUpdate-Anforderung lauscht. Mein RaspberryPi-Server ist auf 192.168.1.4 und lauscht auf Port 1880 auf /update mit dem angehängten Hardwaretyp. Wenn ich also eine Binärdatei für einen Wemos D1 Mini anfordere, lautet die URL:
192.168.1.4:1880/update/d1_mini
b) Erstellen Sie Code, um die folgende Logik zu handhaben:
ESP8266: "Hallo, ich verwende die Firmware-Version a.b.c, hast du eine neuere Version?" Server: "Lass mich sehen…ah ja, ich habe a.b.d - hier kommt es…"
Wenn eine neuere Version existiert, sendet der Server sie einfach als eine Ladung von Binärdaten in der http-Antwort. Die ESP8266httpUpdate-Klasse erledigt den kniffligen Teil des Kopierens der Binärdatei in den Speicher, ändert die Firmware-Startadresse in den neuen Code, anstatt (falls angefordert) das Gerät neu zu starten, um den neuen Code auszuführen.
Wenn es hingegen keine höhere Version gibt, antwortet es mit einem http 304-Fehler, der effektiv sagt: "Ich habe nichts für Sie" und Ihr Code läuft wie gewohnt weiter.
Schritt 5: Fügen Sie die Serverlogik hinzu
Der erste Knoten im Flow "lauscht" auf eine http-Anforderung an die URL https://192.168.1.4:1880/update mit angehängtem Gerätetyp. Es übergibt dies an den Funktionsknoten "Suchpfad erstellen", der den folgenden Javascript-Code enthält:
msg.type=msg.req.params.type;var h=msg.req.headers; msg.version=h["x-esp8266-version"];
msg.mode=h["x-esp8266-mode"];
if(msg.mode=="sketch"){ msg.payload="/home/pi/trucFirmware/*.ino."+msg.type+".bin"; aufrechtzuerhalten. Else {var sz=h['x-esp8266-chip-size']; msg.payload="/home/pi/trucFirmware/spiffs_*_"+(sz/1048576)+"M.bin"; } Nachricht zurückgeben;
Dadurch wird nur der entsprechende Pfad mit Wildcard für die folgende sys-Funktion eingerichtet, die einfach ausgeführt wird
ls - r
Die Ausgabe wird dann dem Funktionsknoten "Versionen vergleichen" zugeführt:
var f=msg.payload.split("\n")[0];msg.filename=f;
if(msg.mode=="Skizze"){
f=f.replace("/home/pi/trucFirmware/truc_", ""); f=f.replace(.ino."+msg.type+".bin", ""); } else { f=f.replace("/home/pi/trucFirmware/spiffs_", ""); f=f.replace(/_\dM\.bin/, ""); }
if(msg.version <f){
node.warn("Upgrade erforderlich");
node.warn("gibt "+msg.filename" zurück); Nachricht zurück; } node.warn("kein Upgrade"); msg.statusCode=304; msg.payload=;
Nachricht zurück;
Der Vermittlungsknoten stellt dann sicher, dass entweder die 304-Nachricht "keine Aktualisierung erforderlich" gesendet wird oder die tatsächliche neue Binärdatei zurückgegeben und an das Gerät zurückgesendet wird.
Schritt 6: Fügen Sie der Skizze Code hinzu, um ein Update anzufordern
Der Sketch muss den folgenden Code enthalten, damit er beim nächsten Erhöhen der Versionsnummer automatisch aktualisiert wird:
#enthalten
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE wird früher gesetzt, abhängig von verschiedenen // Compile-Zeit-Definitionen, die schließlich den HW-Typ definieren, z. B. #define DIESES_DEVICE "d1_mini" const char * updateUrl="https://192.168.1.4:1880/update/"THIS_DEVICE; // Dies ist mein Raspberry Pi-Server, der 1880 ist der Standard-NODE-RED-Port // /update ist die URL, die ich für den Server zum "Abhören" ausgewählt habe, gefolgt vom Gerätetyp … bool currentUpdate(bool sketch=false) { String-Nachricht; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate(false); if(Skizze){ret=ESPhttpUpdate.update(updateUrl, TRUC_VERSION); // **************** Dies ist die Zeile, die "das Geschäft erledigt" } else { ret=ESPhttpUpdate.updateSpiffs(updateUrl, SPIFFS_VERSION); } if(ret!=HTTP_UPDATE_NO_UPDATES){ if(ret==HTTP_UPDATE_OK){
Serial.printf ("UPDATE ERFOLGREICH");
true zurückgeben; } sonst { if(ret==HTTP_UPDATE_FAILED){
Serial.printf("Upgrade fehlgeschlagen");
} } } falsch zurückgeben; }
Schritt 7: Starten Sie schließlich das Update
Führen Sie beim Booten oder vielleicht als Reaktion auf eine MQTT-Nachricht (wie ich) den folgenden Code aus:
if(_actualUpdate(true)) ESP.restart();
// oder für SPIFFS…
if(_actualUpdate(false)) ESP.restart();
Das Gerät aktualisiert sich selbst und startet neu, indem der neueste Code vom Server ausgeführt wird. Für mich ist es viel einfacher, als 33 Geräte manuell zu aktualisieren!
Viele weitere nützliche Informationen zu Home Automation, IOT und Programmierung des ESP8266 finden Sie auf My Blog
Empfohlen:
Wein auf Raspberry Pi einrichten – wikiHow
So richten Sie Wine auf Raspberry Pi ein: Wine ist ein großartiges Tool, mit dem Sie Windows-Apps auf Linux-, Ubuntu-Systemen usw. starten können. Um alle Details zu erfahren, besuchen Sie www.winehq.org (dies ist kein Affiliate-Link). alle Anwendungen für Windows sind für Prozessoren mit s
Automatischen Seifenspender herstellen - wikiHow
Wie man einen automatischen Seifenspender herstellt: HALLO DORT, In diesem Tutorial zeige ich Ihnen, wie Sie einen automatischen kontaktlosen Seifenspender herstellen können, der vollständig selbstgemacht ist. Lassen Sie sich also inspirieren…..! Sie können auch zusehen
Einen automatischen Tablettenspender herstellen – wikiHow
Wie man einen automatischen Pillenspender herstellt: Dies ist mein automatischer Pillenspender. Ich habe das für ein Projekt in meiner Schule gemacht. Der Grund, warum ich es gemacht habe, war, dass die Großmutter meines Freundes viele Pillen nehmen muss und es für sie sehr schwierig ist zu wissen, welche sie zu dieser Zeit nehmen muss
Einen automatischen Holzofen-Thermostat herstellen – wikiHow
Wie erstelle ich einen automatischen Holzofen-Thermostat: Für mein Mechatronik-Klassenprojekt habe ich beschlossen, einen automatischen Holzofen-Thermostat mit einem WiFi-fähigen Arduino mit einem PID-Controller zu entwerfen und zu erstellen, der einen Schrittmotor antreibt, um die Dämpferposition auf meinem Holzofen zu steuern. Es war ein sehr neuer Krieg
Einen automatischen Fischfutterautomat herstellen – wikiHow
Wie man einen automatischen Fischfutterautomat herstellt: Im Rahmen unseres Ingenieurstudiums wurden wir gebeten, ein Arduino oder / und eine Himbeere zu verwenden, um ein tägliches Problem zu lösen. Die Idee war, etwas Nützliches zu machen, an dem wir interessiert sind. Wir wollten um ein echtes Problem zu lösen. Die Idee, ein Auto zu machen