Sadržaj:

Postavljanje poslužitelja za automatsko ažuriranje ESP8266: 7 koraka
Postavljanje poslužitelja za automatsko ažuriranje ESP8266: 7 koraka

Video: Postavljanje poslužitelja za automatsko ažuriranje ESP8266: 7 koraka

Video: Postavljanje poslužitelja za automatsko ažuriranje ESP8266: 7 koraka
Video: BTT - Manta M8P - MainSailOS with EMMc 2024, Studeni
Anonim
Postavite ESP8266 poslužitelj za automatsko ažuriranje
Postavite ESP8266 poslužitelj za automatsko ažuriranje

Mnogi ljudi sada koriste ESP8266 u mnogim oblicima (ESP-01S, Wemos D1, NodeMCU, Sonoff itd.) Za sustave kućne automatizacije. Ako napišete svoj vlastiti kod (kao i ja), ažuriranje svakog od njih zasebno čak i putem OTA (bežičnim putem) postaje pomalo zamorno.

Moj vlastiti sustav, na primjer, ima 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV i NodeMCU koji dijele zajedničku bazu kodova, tako da se ukupno 33 uređaja ažuriraju kada napravim jednostavan kod promijeniti.

No postoji i lakši način: "poslužitelj za ažuriranje". Izvrsna Arduino IDE + ESP8266 jezgra ima biblioteku za obavljanje većine poslova (ESP8266httpUpdate), ali morate znati postaviti vlastiti poslužitelj kako bi funkcionirao.

Ovaj Instructable pokazuje vam kako se koristi NODE-RED poslužitelj, ali ista logika vrijedi za bilo koju poslužiteljsku tehnologiju po vašem izboru, npr. Apache + PHP itd

Korak 1: Što vam treba

  1. Arduino IDE
  2. Jezgra ESP8266
  3. Bilo koja ploča za razvoj ESP8266 s 1M ili više flash RAM -a
  4. Web poslužitelj (čak i skromni malina Pi može - to je ono što ja koristim)
  5. (izborno) alat mkspiffs ako želite automatski ažurirati sliku datotečnog sustava SPIFFS

Korak 2: Izradite spremište za držanje binarnih firmvera

Izradite spremište za držanje binarnih firmvera
Izradite spremište za držanje binarnih firmvera

Na mom poslužitelju imam mapu pod nazivom/home/pi/trucFirmware koja sadrži različite firmware -ove uređaja i slike SPIFFS

Održavam zasebnu binarnu datoteku za svaku vrstu hardvera (iz jedne izvorne datoteke s nekoliko #defines), a kada je novo izdanje spremno, koristim naredbu izbornika "skica/izvoz/kompajlirani kompilirani binarni" Arduino IDE za svaki ciljani uređaj. Imajte na umu da čak iako postoji 5 različitih vrsta hardvera, postoje samo dvije binarne datoteke SPIFFS: 1M i 4M verzija - izrađene s alatom mkspiffs - budući da svi uređaji imaju 1M ili 4M flash.

Korak 3: Izradite binarne datoteke

Pomoću skice opcije izbornika Arduino IDE/Export Compiled Binary, izradite firmver koji će se učitati na uređaj kada to zatraži od poslužitelja za ažuriranje.

Ako vam je potreban SPIFFS binarni dokument, morat ćete instalirati alat mkspiffs.

Nakon što ga imate, izgradnja SPIFFS binarnog programa je jednostavna. Imam paketnu datoteku s jednim retkom za 1M verziju koja uzima broj verzije kao parametar (%1)

mkspiffs -c podaci/ spiffs_%1_1M.bin

i još jedan za 4M verziju:

mkspiffs -p 256 -b 8192 -s 0x0FB000 -c podaci/ spiffs_%1_4M.bin

Zatim kopiram sve sastavljene binarne datoteke i SPIFFS.binarne datoteke u spremište

Korak 4: Stvorite tijek poslužitelja

Izradite tijek poslužitelja
Izradite tijek poslužitelja

Koristim NODE-RED, ali jednostavna logika bit će ista na bilo kojoj poslužiteljskoj tehnologiji / jeziku.

a) Definirajte url koji će slušati zahtjev ESP8266httpUpdate. Moj raspberryPi serevr je na 192.168.1.4 i sluša na portu 1880 za /ažuriranje s dodatkom vrste hardvera. Dakle, ako ću zatražiti binarni dokument za Wemos D1 Mini, url završava kao:

192.168.1.4:1880/update/d1_mini

b) Izradite kôd koji će se nositi sa sljedećom logikom:

ESP8266: "Bok, imam verziju firmvera a.b.c, imate li noviju verziju?" Poslužitelj: "Da vidim … ah da imam a.b.d - evo dolazi …"

Ako novija verzija postoji, poslužitelj je šalje samo kao hrpu binarnih podataka u http odgovoru. Klasa ESP8266httpUpdate obavlja lukavi dio kopiranja binarnog binarnog zapisa u memoriju, mijenjajući adresu za pokretanje firmvera u novi kôd nego (ako se traži) ponovno pokretanje uređaja radi izvođenja novog koda.

S druge strane, ako ne postoji viša verzija, ona odgovara s pogreškom http 304 koja učinkovito kaže: "Nemam ništa za vas", a vaš kôd nastavlja raditi normalno.

Korak 5: Dodajte logiku poslužitelja

Prvi čvor u toku "sluša" http zahtjev za url https://192.168.1.4:1880/update s dodanom vrstom uređaja. To prosljeđuje čvoru funkcije "Construct search path" koji ima sljedeći javascript kod:

msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-verzija"];

msg.mode = h ["x-esp8266-mode"];

if (msg.mode == "skica") {msg.payload = "/home/pi/trucFirmware/*. ino."+msg.type+". bin"; } else {var sz = h ['x-esp8266-size-chip']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } return msg;

Ovo samo postavlja odgovarajući put s zamjenskim znakom za funkciju sys koja slijedi, koja se jednostavno izvodi

ls - r

Izlaz se zatim dovodi u čvor funkcije "Usporedi verzije":

var f = msg.payload.split ("\ n") [0]; msg.filename = f;

if (msg.mode == "skica") {

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.verzija <f) {

node.warn ("potrebna nadogradnja");

node.warn ("vratit će se"+msg. ime datoteke); return msg; } node.warn ("bez nadogradnje"); msg.statusCode = 304; msg.plati učitavanje = ;

return msg;

Sklopni čvor tada osigurava da se ili šalje poruka 304 "nije potrebno ažuriranje" ili se vraća stvarna nova binarna datoteka i šalje natrag na uređaj.

Korak 6: Dodajte kôd skici da biste zatražili ažuriranje

Skica mora sadržavati sljedeći kôd kako bi se automatski ažurirala sljedeći put kada povećate broj verzije:

#uključi

#define TRUC_VERSION "0_4_99"

#define SPIFFS_VERSION "0_5_0"

// THIS_DEVICE se postavlja ranije ovisno o različitim definicijama vremena kompajliranja // koje na kraju definiraju vrstu hw, npr. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // ovo je moj maline Pi poslužitelj, 1880 je zadani NODE-RED port // /update je url koji sam odabrao za poslužitelj za "slušanje", a slijedi vrsta uređaja … bool actualUpdate (bool sketch = false) {String poruka; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (lažno); if (skica) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Ovo je linija koja "posluje"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {

Serial.printf ("UPDATE SUCCEEDED");

return true; } else {if (ret == HTTP_UPDATE_FAILED) {

Serial.printf ("Nadogradnja nije uspjela");

}}} return false; }

Korak 7: Konačno, pokrenite ažuriranje

U vrijeme pokretanja ili možda kao odgovor na MQTT poruku (kao i ja) pokrenite sljedeći kod:

if (_actualUpdate (true)) ESP.restart ();

// ili za SPIFFS …

if (_actualUpdate (false)) ESP.restart ();

Uređaj će se ažurirati i ponovno pokrenuti s najnovijim kodom s poslužitelja. Meni je to puno jednostavnije od ručnog ažuriranja 33 uređaja!

Mnogo korisnijih informacija o kućnoj automatizaciji, IOT -u i programiranju ESP8266 može se pronaći na Mojem blogu

Preporučeni: