Sisukord:

ESP8266 automaatse värskendusserveri seadistamine: 7 sammu
ESP8266 automaatse värskendusserveri seadistamine: 7 sammu

Video: ESP8266 automaatse värskendusserveri seadistamine: 7 sammu

Video: ESP8266 automaatse värskendusserveri seadistamine: 7 sammu
Video: Aqara E1 zigbee - умный выключатель для круглого подрозетника, интеграция в Home Assistant 2024, Juuli
Anonim
Seadistage ESP8266 automaatvärskendusserver
Seadistage ESP8266 automaatvärskendusserver

Paljud inimesed kasutavad nüüd ESP8266 oma paljudes vormides (ESP-01S, Wemos D1, NodeMCU, Sonoff jne) koduautomaatikasüsteemide jaoks. Kui kirjutate oma koodi (nagu mina), muutub igaüks neist eraldi isegi OTA kaudu (õhu kaudu) pisut tüütuks.

Minu enda süsteemis on näiteks 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV ja NodeMCU, millel on ühine koodibaas, nii et lihtsa koodi tegemisel tuleb uuendada kokku 33 seadet muutus.

Kuid on ka lihtsam viis: "värskendusserver". Suurepärasel Arduino IDE + ESP8266 tuumal on enamiku töö tegemiseks raamatukogu (ESP8266httpUpdate), kuid selle toimimiseks peate teadma, kuidas oma serverit seadistada.

See juhend juhendab teile, kuidas kasutada NODE-RED-serverit, kuid sama loogika kehtib teie valitud mis tahes serveritehnoloogia kohta, nt. Apache + PHP jne

Samm: mida vajate

  1. Arduino IDE
  2. ESP8266 tuum
  3. Mis tahes ESP8266 arendusplaat, millel on 1M või rohkem välkmälu
  4. Veebiserver (isegi alandlik vaarika Pi teeb seda - ma kasutan seda)
  5. (valikuline) tööriist mkspiffs, kui soovite SPIFFS-failisüsteemi pilti automaatselt värskendada

Samm: looge hoidla binaarsete püsivara hoidmiseks

Looge hoidla binaarsete püsivara hoidmiseks
Looge hoidla binaarsete püsivara hoidmiseks

Minu serveris on mul kaust nimega/home/pi/trucFirmware, mis sisaldab erinevaid seadme püsivara ja SPIFFS -pilte

Hoian iga riistvaratüübi jaoks eraldi binaarfaili (ühest allikafailist, millel on mõned #defines) ja kui uus väljalase on valmis, kasutan iga sihtseadme jaoks menüükäsku Arduino IDE "sketch/Export compiled Binary". Pange tähele, et isegi kuigi on olemas 5 erinevat riistvaratüüpi, on ainult kaks SPIFFS -i binaarfaili: 1M ja 4M versioon, mis on loodud tööriistaga mkspiffs - kuna kõigil seadmetel on kas 1M või 4M välk.

Samm: looge binaarfailid

Kasutades Arduino IDE menüüvaliku visandit/Ekspordi kompileeritud binaar, looge püsivara, mis laaditakse seadmesse üles, kui see seda värskendusserverilt nõuab.

Kui vajate SPIFFS -binaarfaili, peate installima tööriista mkspiffs.

Kui see on olemas, on SPIFFS -i binaarfaili loomine lihtne. Mul on 1M versiooni jaoks ühe rea pakettfail, mis võtab parameetrina kasutusele versiooni numbri (%1)

mkspiffs -c andmed/ spiffs_%1_1M.bin

ja teine 4M versiooni jaoks:

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

Seejärel kopeerin kõik kompileeritud binaarfailid ja SPIFFS.binary failid hoidlasse

Samm: looge serverivool

Looge serverivool
Looge serverivool

Ma kasutan NODE-RED-i, kuid lihtne loogika on mis tahes serveritehnoloogia / keele puhul sama.

a) Määrake URL, mis kuulab ESP8266httpUpdate taotlust. Minu raspberryPi serevr on 192.168.1.4 ja kuulab porti 1880, et /update koos lisatud riistvaratüübiga. Nii et kui ma taotlen Wemos D1 Mini jaoks binaarfaili, lõpeb URL järgmiselt:

192.168.1.4:1880/update/d1_mini

b) Looge kood järgmise loogika haldamiseks:

ESP8266: "Tere, mul on püsivara versioon a.b.c, kas teil on uuem versioon?" Server: "Las ma vaatan … ah jah, mul on a.b.d - siit see tuleb …"

Kui uuem versioon on olemas, saadab server selle lihtsalt binaarsete andmete koormaks http -vastuses. Klass ESP8266httpUpdate teeb keerulise osa binaarmälu kopeerimisest mällu, muutes püsivara alglaadimisaadressi uueks koodiks, kui (soovi korral) seadme taaskäivitamine uue koodi käivitamiseks.

Kui teisest küljest pole kõrgemat versiooni, vastab see veaga http 304, mis ütleb tegelikult: "Mul pole teile midagi" ja teie kood töötab jätkuvalt nagu tavaliselt.

Samm: lisage serveriloogika

Voo esimene sõlm "kuulab" http -taotlust URL -ile https://192.168.1.4:1880/update, millele on lisatud seadme tüüp. See edastab selle funktsiooni sõlmele „Otsingutee ehitamine”, millel on järgmine javascripti kood:

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"; } else {var sz = h ['x-esp8266-chip-size']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } tagasiside;

See lihtsalt määrab järgneva sys -funktsiooni jaoks sobiva metamärgiga tee, mis lihtsalt töötab

ls - r

Seejärel edastatakse väljund funktsiooni sõlmele "Võrdle versioone":

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

kui (msg.mode == "sketch") {

f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } else {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.asend (/_ / dM \.bin/, ""); }

if (msg.version <f) {

node.warn ("vajalik uuendamine");

node.warn ("tagastab"+msg.filename); tagasiside; } node.warn ("no upgrade"); msg.statusCode = 304; msg.payload = ;

tagasiside;

Seejärel tagab lülitussõlm, et kas saadetakse teade 304 "värskendust pole vaja" või tagastatakse tegelik uus binaarfail ja saadetakse seadmesse tagasi.

Samm: värskenduse taotlemiseks lisage visandile kood

Eskiis peab sisaldama järgmist koodi, et seda värskendataks automaatselt järgmisel korral, kui versiooninumbrit suurendate:

#kaasake

#define TRUC_VERSION "0_4_99"

#define SPIFFS_VERSION "0_5_0"

// THIS_DEVICE on varem määratud, sõltuvalt erinevatest kompileerimisaja määratlustest //, mis lõpuks määravad hw tüübi, nt #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // see on minu vaarika Pi server, 1880 on vaikimisi NODE-PUNANE port {Stringi sõnum; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (vale); if (sketch) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // ***************** See on rida, mis "teeb äri"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } kui (ret! = HTTP_UPDATE_NO_UPDATES) {kui (ret == HTTP_UPDATE_OK) {

Serial.printf ("UPDATE SUCCEEDED");

tagastama tõene; } muu {if (ret == HTTP_UPDATE_FAILED) {

Serial.printf ("Uuendamine ebaõnnestus");

}}} return false; }

Samm 7: Lõpuks käivitage värskendus

Käivitamise ajal või võib -olla vastuseks MQTT -teatele (nagu mina) käivitage järgmine kood:

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

// või SPIFFS …

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

Seade värskendab ennast ja taaskäivitab serverist uusima koodi. Minu jaoks on see palju lihtsam kui 33 seadme käsitsi värskendamine!

Palju rohkem kasulikku teavet koduautomaatika, IOT -i ja ESP8266 programmeerimise kohta leiate minu ajaveebist

Soovitan: