Sisukord:
- Samm: mida vajate
- Samm: looge hoidla binaarsete püsivara hoidmiseks
- Samm: looge binaarfailid
- Samm: looge serverivool
- Samm: lisage serveriloogika
- Samm: värskenduse taotlemiseks lisage visandile kood
- Samm 7: Lõpuks käivitage värskendus
Video: ESP8266 automaatse värskendusserveri seadistamine: 7 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:50
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
- Arduino IDE
- ESP8266 tuum
- Mis tahes ESP8266 arendusplaat, millel on 1M või rohkem välkmälu
- Veebiserver (isegi alandlik vaarika Pi teeb seda - ma kasutan seda)
- (valikuline) tööriist mkspiffs, kui soovite SPIFFS-failisüsteemi pilti automaatselt värskendada
Samm: 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
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:
Patareitoitega kontor. Päikesesüsteem automaatse lülitusega ida/lääne päikesepaneelide ja tuuleturbiini vahel: 11 sammu (koos piltidega)
Patareitoitega kontor. Päikesesüsteem automaatse lülitusega ida/lääne päikesepaneelid ja tuuleturbiin: Projekt: 200 ruutjalga kontor peab olema toitega. Kontor peab sisaldama ka kõiki selle süsteemi jaoks vajalikke kontrollereid, patareisid ja komponente. Päikese- ja tuuleenergia laeb akusid. Väike probleem on ainult
Ainult ühe sõna automaatse parandamise keelamine (iOS): 3 sammu
Ainult ühe sõna automaatse parandamise keelamine (iOS): mõnikord võib automaatparandus parandada midagi, mida te ei soovi parandada, nt. teksti lühendid hakkavad endale suurtähti tegema (näiteks IMO -le parandamine). Siit saate teada, kuidas sundida see lõpetama ühe sõna või fraasi parandamine ilma automaatset keelamata
Raudtee mudelipaigutus automaatse voodriga: 13 sammu (piltidega)
Mudeli raudtee paigutus koos automaatse voodriga: mudelrongide paigutuse tegemine on suurepärane hobi, selle automatiseerimine muudab selle palju paremaks! Vaatame mõningaid selle automatiseerimise eeliseid: Odav operatsioon: kogu paigutust kontrollib Arduino mikrokontroller, kasutades L298N-i
Automaatse päikesejälgija ehitamine Arduino Nano V2 abil: 17 sammu (piltidega)
Automaatse päikeseseire rajamine Arduino Nano V2 abil: Tere! See juhend on mõeldud minu Solar Tracker projekti teiseks osaks. Päikeseenergia jälgijate tööpõhimõtte ja oma esimese jälgija kujundamise selgitamiseks kasutage allolevat linki. See pakub selle projekti jaoks konteksti. Https://www.instructables.co
Suurepärane kasvuhoone automaatse jootmise, Interneti -ühenduse ja palju muuga: 7 sammu (piltidega)
Suurepärane kasvuhoone automaatse jootmise, Interneti -ühenduse ja palju muuga: Tere tulemast sellesse juhendisse. Märtsi alguses olin aiapoes ja nägin mõnda kasvuhoonet. Ja kuna ma tahtsin juba pikka aega teha projekti taimede ja elektroonikaga, siis läksin edasi ja ostsin ühe: https://www.instagram.com/p