Sadržaj:

Postavljanje servera za automatsko ažuriranje ESP8266: 7 koraka
Postavljanje servera za automatsko ažuriranje ESP8266: 7 koraka

Video: Postavljanje servera za automatsko ažuriranje ESP8266: 7 koraka

Video: Postavljanje servera za automatsko ažuriranje ESP8266: 7 koraka
Video: SKR 1.4 - TMC2209 v1.2 2024, Novembar
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 sisteme kućne automatizacije. Ako napišete vlastiti kod (kao i ja), ažuriranje svakog od njih zasebno čak i putem OTA (bežičnim putem) postaje pomalo zamorno.

Moj vlastiti sistem, 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 promjena.

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

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

Korak 1: Šta vam treba

  1. Arduino IDE
  2. Jezgro ESP8266
  3. Bilo koja ploča za razvoj ESP8266 sa 1M ili više flash RAM -a
  4. Web server (čak će i skromni malina Pi raditi - to je ono što ja koristim)
  5. (opcionalno) mkspiffs alat ako želite automatski ažurirati sliku sistema datoteka SPIFFS

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

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

Na mom serveru imam fasciklu pod nazivom/home/pi/trucFirmware koja sadrži različite firmvere uređaja i slike SPIFFS

Održavam zasebnu binarnu datoteku za svaki tip hardvera (iz jedne izvorne datoteke s nekoliko #defines), a kada je novo izdanje spremno, koristim Arduino IDE naredbu izbornika "sketch/Export compiled Binary" za svaki ciljni uređaj. Imajte na umu da čak iako postoji 5 različitih vrsta hardvera, postoje samo dvije SPIFFS binarne datoteke: 1M i 4M verzija - konstruirana pomoću alata mkspiffs - budući da svi uređaji imaju 1M ili 4M flash.

Korak 3: Kreirajte binarne datoteke

Pomoću opcije menija Arduino IDE skiciraj/izvezi kompajlirani binarni format, kreiraj firmver koji će se učitati na uređaj kada to zatraži od servera 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 jednorednu paketnu datoteku za 1M verziju koja uzima broj verzije kao parametar (%1)

mkspiffs -c data/ 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 prevedene binarne datoteke i SPIFFS.binarne datoteke u spremište

Korak 4: Kreirajte tok servera

Kreirajte tok servera
Kreirajte tok servera

Koristim NODE-RED, ali jednostavna logika će biti ista na bilo kojoj serverskoj 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 sa dodatim tipom 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) Kreirajte kôd koji će se nositi sa sljedećom logikom:

ESP8266: "Zdravo, koristim verziju firmvera a.b.c, imate li noviju verziju?" Server: "Da vidim … ah da imam a.b.d - evo stiže …"

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

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

Korak 5: Dodajte logiku servera

Prvi čvor u toku "sluša" http zahtjev za url https://192.168.1.4:1880/update s dodanim tipom 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ću putanju sa zamjenskim znakom za funkciju sys koja slijedi, koja se jednostavno izvodi

ls - r

Izlaz se zatim šalje 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"+msg.filename); return msg; } node.warn ("bez nadogradnje"); msg.statusCode = 304; msg.payload = ;

return msg;

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

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

Skica mora imati sljedeći kod uključen kako bi se automatski ažurirala sljedeći put kada povećate broj verzije:

#include

#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 eventualno definiraju tip hw, npr. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // ovo je moj maline Pi server, 1880 je zadani NODE-RED port // /update je url koji sam odabrao za poslužitelj za "preslušavanje", nakon čega slijedi tip uređaja … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (false); 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 ponovo pokrenuti s najnovijim kodom s poslužitelja. Meni je to mnogo 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 mom blogu

Preporučuje se: