Indholdsfortegnelse:
- Trin 1: Hvad du har brug for
- Trin 2: Opret et depot til opbevaring af binære firmwares
- Trin 3: Opret binærerne
- Trin 4: Opret serverflowet
- Trin 5: Tilføj serverlogikken
- Trin 6: Tilføj kode til skitsen for at anmode om en opdatering
- Trin 7: Endelig start opdateringen
Video: Opsætning af en ESP8266 automatisk opdateringsserver: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:30
Mange mennesker bruger nu ESP8266 i sine mange afskygninger (ESP-01S, Wemos D1, NodeMCU, Sonoff osv.) Til hjemmeautomatiseringssystemer. Hvis du skriver din egen kode (som jeg gør), bliver det lidt kedeligt at opdatere hver af disse separat, selv via OTA (over the air).
Mit eget system har for eksempel 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV og en NodeMCU, som deler en fælles kodebase, så det er 33 enheder i alt, der skal opdateres, når jeg laver en simpel kode lave om.
Men der er en lettere måde: En "opdateringsserver". Den fremragende Arduino IDE + ESP8266 -kerne har et bibliotek til at klare det meste af arbejdet (ESP8266httpUpdate), men du skal vide, hvordan du konfigurerer din egen server for at få det til at fungere.
Denne instruks viser dig, hvordan du bruger en NODE-RED-server, men den samme logik gælder for enhver serverteknologi efter eget valg, f.eks. Apache + PHP osv
Trin 1: Hvad du har brug for
- Arduino IDE
- ESP8266 kerne
- Ethvert ESP8266 dev -kort med 1M eller mere flash -RAM
- En webserver (selv en ydmyg hindbær Pi vil gøre - det er hvad jeg bruger)
- (valgfrit) mkspiffs-værktøj, hvis du vil automatisk opdatere et SPIFFS-filsystembillede
Trin 2: Opret et depot til opbevaring af binære firmwares
På min server har jeg en mappe kaldet/home/pi/trucFirmware, som indeholder de forskellige enheds firmwares og SPIFFS -billeder
Jeg vedligeholder en separat binær for hver hardwaretype (fra en enkelt kildefil med et par #defines), og når en ny udgivelse er klar, bruger jeg Arduino IDE "sketch/Export compiled Binary" menukommandoen for hver målenhed. Bemærk, at selv selvom der er 5 forskellige hardwaretyper, er der kun to SPIFFS -binære filer: en 1M og en 4M version - konstrueret med mkspiffs -værktøjet - da alle enhederne enten har 1M eller 4M flash.
Trin 3: Opret binærerne
Ved hjælp af Arduino IDE -menupunktet sketch/Export Compiled Binary opretter du den firmware, der uploades til enheden, når den anmoder om det fra opdateringsserveren.
Hvis du har brug for en SPIFFS -binær, skal du installere mkspiffs -værktøjet.
Når du har det, er det enkelt at bygge SPIFFS -binæren. Jeg har en batchfil med en linje til 1M-versionen, der tager versionsnummeret som en parameter (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
og en anden til 4M -versionen:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Jeg kopierer derefter alle de kompilerede binærfiler og SPIFFS.binære filer til depotet
Trin 4: Opret serverflowet
Jeg bruger NODE-RED, men den enkle logik vil være den samme på enhver serverteknologi / sprog.
a) Definer en url, der vil lytte efter ESP8266httpUpdate -anmodningen. Min raspberryPi serevr er på 192.168.1.4 og lytter på port 1880 efter /opdater med hardwaretypen vedhæftet. Så hvis jeg vil anmode om en binær til en Wemos D1 Mini, ender webadressen som:
192.168.1.4:1880/update/d1_mini
b) Opret kode til at håndtere følgende logik:
ESP8266: "Hej, jeg kører firmwareversion a.b.c, har du en nyere version?" Server: "Lad mig se … ah ja jeg har a.b.d - her kommer den …"
Hvis der findes en nyere version, sender serveren den bare som en mængde binære data i http -svaret. ESP8266httpUpdate -klassen gør den vanskelige del af at kopiere binæret til hukommelsen, ændre firmware -startadressen til den nye kode end (hvis det anmodes om) at genstarte enheden for at køre den nye kode.
Hvis der på den anden side ikke er en højere version, svarer den med en http 304 -fejl, der effektivt siger: "Jeg har intet til dig", og din kode fortsætter med at køre som normalt.
Trin 5: Tilføj serverlogikken
Den første node i flowet "lytter" efter en http -forespørgsel til url https://192.168.1.4:1880/update med den tilføjede enhedstype. Det overfører dette til "Konstruer søgesti" -funktionsknudepunkt, der har følgende javascript -kode:
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"; } ellers {var sz = h ['x-esp8266-chip-size']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } returnér msg;
Dette opretter bare den passende sti med jokertegn til sys -funktionen, der følger, som simpelthen kører
ls - r
Outputtet føres derefter til funktionsnoden "Sammenlign versioner":
var f = msg.payload.split ("\ n") [0]; msg.filnavn = f;
hvis (msg.mode == "skitse") {
f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } andet {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.replace (/_ / dM \.bin/, ""); }
hvis (msg.version <f) {
node.warn ("opgradering påkrævet");
node.warn ("vender tilbage"+msg.filnavn); return msg; } node.warn ("ingen opgradering"); msg.statusCode = 304; msg.payload = ;
return msg;
Switchnoden sikrer derefter, at enten 304 "ingen opdatering nødvendig" -meddelelsen sendes, eller den faktiske nye binære returneres og sendes tilbage til enheden.
Trin 6: Tilføj kode til skitsen for at anmode om en opdatering
Skitsen skal have følgende kode inkluderet i den, så den opdateres automatisk næste gang du øger versionsnummeret:
#omfatte
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE indstilles tidligere afhængigt af forskellige kompileringstidsdefinitioner // som til sidst definerer hw-typen, f.eks. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // dette er min hindbær Pi-server, 1880 er standard NODE-RED port // /opdatering er den url, jeg valgte for serveren at "lytte" efter, efterfulgt af enhedstypen … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (falsk); hvis (skitse) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // ***************** Dette er den linje, der "gør forretningen"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } hvis (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED");
vende tilbage sandt; } andet {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Opgradering mislykkedes");
}}} returner falsk; }
Trin 7: Endelig start opdateringen
Ved opstart, eller måske som svar på en MQTT -besked (som jeg gør), kør følgende kode:
hvis (_actualUpdate (true)) ESP.restart ();
// eller til SPIFFS …
hvis (_actualUpdate (false)) ESP.restart ();
Enheden opdaterer sig selv og genstarter med at køre den nyeste kode fra serveren. Det er meget enklere for mig end manuelt at opdatere 33 enheder!
Flere nyttige oplysninger om hjemmeautomatisering, IOT og programmering af ESP8266 findes på Min blog
Anbefalede:
Opsætning af ST Visual Develop med Cosmic STM8 Compiler: 11 trin
Opsætning ST Visual Develop med Cosmic STM8 Compiler: Sådan opsætter jeg det integrerede udviklingsmiljø (IDE) til at programmere STM8 mikrokontrollere fra ST Microelectronics (ST) med Windows 10. Jeg påstår ikke, at det er den rigtige måde, men det fungerer godt for mig. I denne instruktionsbog vil det ligne en
NodeMcu ESP8266 Første gangs opsætning med Arduino IDE: 10 trin
NodeMcu ESP8266 Første gangs opsætning med Arduino IDE: Jeg laver Twitch -kontrollerede enheder; brugerdefinerede konsoller, controllere og andre noyceventions! Live streams er hver onsdag og lørdag kl. 21:00 på https://www.twitch.tv/noycebru, højdepunkter på TikTok @noycebru, og du kan se tutorials på YouT
Opsætning til ekstern Bluetooth GPS -udbyder til Android -enheder: 8 trin
Opsætning til ekstern Bluetooth GPS-udbyder til Android-enheder: Denne instruktør vil forklare, hvordan du opretter din egen eksterne Bluetooth-aktiverede GPS til din telefon, tænder hvad som helst for kun omkring $ 10.Seddel materialer: NEO 6M U-blox GPSHC-05 bluetooth-modulKendskab til grænseflade Blutooth LavenergimodulerArdui
MultiBoard Opsætning/installation: 5 trin
MultiBoard Opsætning/installation: MultiBoard er et program, der kan bruges til at forbinde flere tastaturer til en Windows -computer. Og omprogrammer derefter input fra disse tastaturer. Åbn f.eks. Et program, eller kør AutoHotkeyscript, når der trykkes på en bestemt tast. Github: https: // g
Automatisk WiFi -planteføder med reservoir - Indendørs/udendørs dyrkningssætning - Vandplanter automatisk med fjernovervågning: 21 trin
Automatisk WiFi -planteføder med reservoir - Indendørs/udendørs dyrkningssætning - Vandplanter automatisk med fjernovervågning: I denne vejledning vil vi demonstrere, hvordan du konfigurerer et brugerdefineret indendørs/udendørs planteføderanlæg, der automatisk vanner planter og kan overvåges eksternt ved hjælp af Adosia -platformen