Sadržaj:
- Korak 1: Što vam treba
- Korak 2: Izradite spremište za držanje binarnih firmvera
- Korak 3: Izradite binarne datoteke
- Korak 4: Stvorite tijek poslužitelja
- Korak 5: Dodajte logiku poslužitelja
- Korak 6: Dodajte kôd skici da biste zatražili ažuriranje
- Korak 7: Konačno, pokrenite ažuriranje
Video: Postavljanje poslužitelja za automatsko ažuriranje ESP8266: 7 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:38
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
- Arduino IDE
- Jezgra ESP8266
- Bilo koja ploča za razvoj ESP8266 s 1M ili više flash RAM -a
- Web poslužitelj (čak i skromni malina Pi može - to je ono što ja koristim)
- (izborno) alat mkspiffs ako želite automatski ažurirati sliku datotečnog sustava SPIFFS
Korak 2: 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
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:
Postavljanje vlastitog poslužitelja za praćenje GPS -a na Raspberry Pi: 8 koraka
Postavljanje vlastitog poslužitelja za praćenje GPS -a na Raspberry Pi: U ovom projektu pokazat ću vam kako postaviti svoj vlastiti poslužitelj za praćenje GPS -a na Raspberry pi. Ne mora biti Raspberry pi jer je softver koji ćemo koristiti za poslužitelj za praćenje dostupan i za Windows i Linux
Sigurna SSH / SCP veza od Raspberry Pi do Cloud poslužitelja za sigurnosno kopiranje i ažuriranje: 3 koraka
Sigurna SSH / SCP veza od Raspberry Pi -a do Cloud poslužitelja za sigurnosno kopiranje i ažuriranje: Svrha ove upute je pokazati vam kako se automatski i sigurno povezati s vašeg Raspberry Pi -a na udaljeni poslužitelj u oblaku (i obrnuto) kako biste izvršili sigurnosne kopije i ažuriranja itd. Da biste to učinili, koristite parove ključeva SSH koji izbjegavaju
Kako zaobići sigurnost većine poslužitelja na strani poslužitelja: 3 koraka
Kako zaobići sigurnost većine poslužitelja na strani poslužitelja: Ovo je moje prvo uputstvo, pa me podnesite: Ok, reći ću vam kako zaobići blokatore weba koje sam vidio u školama. Sve što trebate je flash pogon i nekoliko preuzimanja softvera
Postavljanje FTP poslužitelja pomoću Filezilla !: 7 koraka
Postavljanje FTP poslužitelja pomoću Filezille !: 1. Što je FTP poslužitelj? 2. Zašto bih želio napraviti jedan? 1. Protokol za prijenos datoteka (FTP) je mrežni protokol koji se koristi za prijenos podataka s jednog računala na drugo putem mreže, kao što je Internet. FTP je protokol za prijenos datoteka za ex
Postavljanje vlastitog web poslužitelja!: 12 koraka
Postavite svoj vlastiti web poslužitelj !: Jeste li ikada željeli imati mjesto na kojem biste mogli čuvati svoje datoteke i pristupiti im gdje god imate internetsku vezu? Recimo da ste htjeli imati svoju glazbenu biblioteku na raspolaganju u slučaju da želite pjesmu pokloniti nekom od svojih prijatelja, ili ste možda htjeli