Cuprins:
- Pasul 1: De ce aveți nevoie
- Pasul 2: Creați un depozit pentru a păstra firmware-uri binare
- Pasul 3: Creați binare
- Pasul 4: Creați fluxul de server
- Pasul 5: Adăugați logica serverului
- Pasul 6: Adăugați cod în schiță pentru a solicita o actualizare
- Pasul 7: În cele din urmă, inițiați actualizarea
Video: Configurați un server de actualizare automată ESP8266: 7 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:46
Mulți oameni folosesc acum ESP8266 în numeroasele sale variante (ESP-01S, Wemos D1, NodeMCU, Sonoff etc.) pentru sisteme de automatizare a casei. Dacă scrieți propriul cod (așa cum fac eu), actualizarea fiecăruia dintre acestea separat chiar și prin OTA (prin antenă) devine puțin plictisitoare.
Sistemul meu, de exemplu, are 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV și un NodeMCU care partajează o bază de cod comună, deci sunt 33 de dispozitive în total pentru actualizare când fac un cod simplu Schimbare.
Dar există o modalitate mai ușoară: un „server de actualizare”. Excelentul nucleu Arduino IDE + ESP8266 are o bibliotecă pentru a face cea mai mare parte a lucrului (ESP8266httpUpdate), dar trebuie să știți cum să vă configurați propriul server pentru ca acesta să funcționeze.
Acest instructable vă arată cum se utilizează un server NODE-RED, dar aceeași logică se aplică oricărei tehnologii de server la alegere, de ex. Apache + PHP etc.
Pasul 1: De ce aveți nevoie
- IDE Arduino
- Miez ESP8266
- Orice placă dev ESP8266 cu RAM de 1M sau mai mult
- Un server Web (chiar și un umil zmeură Pi va face - este ceea ce folosesc eu)
- (opțional) instrument mkspiffs dacă doriți să actualizați automat o imagine a sistemului de fișiere SPIFFS
Pasul 2: Creați un depozit pentru a păstra firmware-uri binare
Pe serverul meu, am un folder numit / home / pi / trucFirmware care conține diferitele firmware-uri ale dispozitivelor și imaginile SPIFFS
Păstrez un binar separat pentru fiecare tip de hardware (dintr-un singur fișier sursă cu câteva # definiții) și când este pregătită o nouă versiune, folosesc comanda de meniu Arduino IDE „schiță / Export binar compilat” pentru fiecare dispozitiv țintă. deși există 5 tipuri diferite de hardware, există doar două binare SPIFFS: o versiune 1M și o versiune 4M - construită cu instrumentul mkspiffs - deoarece toate dispozitivele au 1M sau 4M bliț.
Pasul 3: Creați binare
Folosind opțiunea de meniu Arduino IDE schiță / Export binar compilat, creați firmware-ul care va fi încărcat pe dispozitiv atunci când îl solicită de la serverul de actualizare.
Dacă aveți nevoie de un binar SPIFFS, va trebui să instalați instrumentul mkspiffs.
Odată ce îl ai, construirea binarului SPIFFS este simplă. Am un fișier batch de o linie pentru versiunea 1M, care ia numărul versiunii ca parametru (% 1)
mkspiffs -c data / spiffs_% 1_1M.bin
și altul pentru versiunea 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data / spiffs_% 1_4M.bin
Copiez apoi toate binarele compilate și fișierele SPIFFS.binary în depozit
Pasul 4: Creați fluxul de server
Folosesc NODE-RED, dar logica simplă va fi aceeași pe orice tehnologie / limbaj de server.
a) Definiți o adresă URL care va asculta cererea ESP8266httpUpdate. Seravr-ul meu raspberryPi este pe 192.168.1.4 și ascultă pe portul 1880 pentru / actualizare cu tipul de hardware anexat. Deci, dacă voi solicita un binar pentru un Wemos D1 Mini, adresa URL se termină astfel:
192.168.1.4:1880/update/d1_mini
b) Creați cod pentru a gestiona următoarea logică:
ESP8266: "Bună, rulez versiunea firmware a.b.c, aveți o versiune mai nouă?" Server: "Lasă-mă să văd … ah da, am a.b.d - aici vine …"
Dacă există o versiune mai nouă, serverul o trimite doar ca o încărcare de date binare în răspunsul http. Clasa ESP8266httpUpdate face partea dificilă a copierii binarului în memorie, schimbând adresa de încărcare a firmware-ului în noul cod decât (dacă se solicită) repornirea dispozitivului pentru a rula noul cod.
Dacă, pe de altă parte, nu există o versiune superioară, aceasta răspunde cu o eroare http 304 care spune efectiv: „Nu am nimic pentru tine” și codul tău continuă să ruleze normal.
Pasul 5: Adăugați logica serverului
Primul nod din flux „ascultă” o solicitare http de a adresa URL https://192.168.1.4:1880/update cu tipul de dispozitiv adăugat. Trece acest lucru la nodul funcției „Construct căi de căutare” care are următorul cod javascript:
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 == "schiță") {msg.payload = "/ home / pi / trucFirmware / *. ino." + msg.type + ". bin"; } else {var sz = h ['x-esp8266-chip-size']; msg.payload = "/ home / pi / trucFirmware / spiffs _ * _" + (sz / 1048576) + "M.bin"; } returnează msg;
Aceasta doar configurează calea corespunzătoare cu metacaracter pentru funcția sys care urmează, care pur și simplu rulează
ls - r
Ieșirea este apoi alimentată la nodul funcției „Compară versiunile”:
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "schiță") {
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 ("este necesar upgrade");
node.warn ("va reveni" + msg.filename); returnează msg; } node.warn ("fără upgrade"); msg.statusCode = 304; msg.payload = ;
returnează msg;
Nodul de comutare asigură apoi că fie mesajul 304 „nu este nevoie de actualizare”, fie noul binar real este returnat și trimis înapoi la dispozitiv.
Pasul 6: Adăugați cod în schiță pentru a solicita o actualizare
Schița trebuie să conțină următorul cod, astfel încât să se actualizeze automat la următoarea creștere a numărului de versiune:
#include
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE este setat mai devreme în funcție de diferitele timpuri de compilare definite // care definesc în cele din urmă tipul hw, de ex. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // acesta este serverul meu raspberry Pi, 1880 este portul implicit NODE-RED // / update este adresa URL pe care am ales-o pentru server pentru „ascultare”, urmată de tipul dispozitivului … bool actualizare actualizată (schiță bool = falsă) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (fals); if (schiță) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Aceasta este linia care „face afacerea”} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf („ACTUALIZARE REZULTATĂ”);
întoarcere adevărată; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf („Upgrade eșuat”);
}}} returnează fals; }
Pasul 7: În cele din urmă, inițiați actualizarea
La boot, sau poate ca răspuns la un mesaj MQTT (așa cum fac eu), rulați următorul cod:
if (_actualUpdate (true)) ESP.restart ();
// sau pentru SPIFFS …
if (_actualUpdate (false)) ESP.restart ();
Dispozitivul se va actualiza singur și va reporni rulând cel mai recent cod de pe server. Este mult mai simplu pentru mine decât actualizarea manuală a 33 de dispozitive!
Mai multe informații utile despre Home Automation, IOT și programarea ESP8266 pot fi găsite pe Blogul meu
Recomandat:
ESP8266 Ventilator POV cu ceas și actualizare text pagină web: 8 pași (cu imagini)
ESP8266 Ventilator POV cu actualizare text ceas și pagină web: Aceasta este o viteză variabilă, POV (Persistență a vederii), ventilator care afișează intermitent ora și două mesaje text care pot fi actualizate „din mers.” Ventilatorul POV este, de asemenea, un server web cu o singură pagină, care vă permite să modificați cele două mesaje text
Configurați propriul server de urmărire GPS pe un Raspberry Pi: 8 pași
Configurați propriul server de urmărire GPS pe un Raspberry Pi: În acest proiect vă voi arăta cum să vă configurați propriul server de urmărire GPS pe un Raspberry pi. Nu trebuie să fie un Raspberry pi, deoarece software-ul pe care îl vom folosi pentru serverul de urmărire este disponibil pentru Windows și Linux, așa cum este bine
Actualizare firmware Esp8266: 7 pași
Actualizare firmware Esp8266: Modulul ESP8266 este un modul wireless ieftin. Are SOC (sistem pe cip) care este capabil să ofere WiFi oricărui micro controler / microprocesor. Există două moduri în care poate fi utilizat esp8266. sau arduino sau
Realizați o ușă automată de deschidere și închidere automată cu Arduino !: 4 pași
Creați o ușă automată de deschidere și închidere automată cu Arduino !: Ați dorit vreodată să vă deschideți ușa automat la fel ca în filmele SF? Acum puteți urmând acest instructabil. În acest instructable vom construi o ușă care se poate deschide și închide automat fără ca tu să atingi ușa. Senzori cu ultrasunete o
Configurați propriul dvs. server web !: 12 pași
Configurați propriul dvs. server Web! Spuneți că doriți să aveți biblioteca muzicală disponibilă în cazul în care doriți să dați o melodie unuia dintre prietenii dvs. sau poate că ați vrut să nu