Turinys:
- 1 žingsnis: ko jums reikia
- 2 žingsnis: sukurkite saugyklą dvejetainei programinei įrangai laikyti
- 3 žingsnis: sukurkite dvejetainius failus
- 4 veiksmas: sukurkite serverio srautą
- 5 veiksmas: pridėkite serverio logiką
- 6 veiksmas: pridėkite kodą prie eskizo ir paprašykite atnaujinimo
- 7 žingsnis: Galiausiai inicijuokite atnaujinimą
Video: ESP8266 automatinio naujinimo serverio nustatymas: 7 veiksmai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:49
Daugelis žmonių dabar naudoja ESP8266 įvairiais būdais (ESP-01S, Wemos D1, NodeMCU, Sonoff ir kt.) Namų automatizavimo sistemoms. Jei rašote savo kodą (kaip ir aš), atnaujinti kiekvieną iš jų net per OTA (per orą) tampa šiek tiek nuobodu.
Mano sistema, pavyzdžiui, turi 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV ir NodeMCU, kurie turi bendrą kodų bazę, todėl iš viso reikia atnaujinti 33 įrenginius, kai sukuriu paprastą kodą keistis.
Tačiau yra ir paprastesnis būdas: „atnaujinimo serveris“. Puikus „Arduino IDE + ESP8266“branduolys turi biblioteką, skirtą daugumai darbų atlikti (ESP8266httpUpdate), tačiau jūs turite žinoti, kaip nustatyti savo serverį, kad jis veiktų.
Ši instrukcija parodo, kaip naudotis NODE-RED serveriu, tačiau ta pati logika galioja bet kuriai jūsų pasirinktai serverio technologijai, pvz. „Apache“+ PHP ir kt
1 žingsnis: ko jums reikia
- „Arduino IDE“
- ESP8266 šerdis
- Bet kuri ESP8266 dev plokštė su 1M ar daugiau „flash“RAM
- Žiniatinklio serveris (net kuklus „Raspberry Pi“tiks - tai aš naudoju)
- (neprivaloma) „mkspiffs“įrankis, jei norite automatiškai atnaujinti SPIFFS failų sistemos vaizdą
2 žingsnis: sukurkite saugyklą dvejetainei programinei įrangai laikyti
Mano serveryje turiu aplanką/home/pi/trucFirmware, kuriame yra įvairių įrenginių programinės įrangos ir SPIFFS vaizdų
Kiekvienam aparatinės įrangos tipui prižiūriu atskirą dvejetainę versiją (iš vieno šaltinio failo su keliais #defines), o kai nauja versija yra paruošta, kiekvienam tiksliniam įrenginiui naudoju „Arduino IDE“eskizo/eksporto sudarytą dvejetainį meniu komandą. Atkreipkite dėmesį, kad net nors yra 5 skirtingi aparatūros tipai, yra tik du SPIFFS dvejetainiai failai: 1M ir 4M versija, sukurta naudojant „mkspiffs“įrankį, nes visi įrenginiai turi 1M arba 4M blykstę.
3 žingsnis: sukurkite dvejetainius failus
Naudodami „Arduino IDE“meniu parinkties eskizą/Eksportuoti sudarytą dvejetainį failą, sukurkite programinę -aparatinę įrangą, kuri bus įkelta į įrenginį, kai jis paprašys atnaujinimo serverio.
Jei jums reikia dvejetainio SPIFFS, turėsite įdiegti „mkspiffs“įrankį.
Kai turėsite, sukurti SPIFFS dvejetainį failą yra paprasta. Turiu 1 eilutės vienos eilutės paketinį failą, kurio versijos numeris laikomas parametru (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
ir dar viena 4M versija:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c data/ spiffs_%1_4M.bin
Tada nukopijuoju visus surinktus dvejetainius failus ir SPIFFS.binary failus į saugyklą
4 veiksmas: sukurkite serverio srautą
Aš naudoju NODE-RED, bet paprasta logika bus ta pati bet kokiose serverio technologijose / kalbose.
a) Nustatykite URL, kuris klausys ESP8266httpUpdate užklausos. Mano „raspberryPi serevr“yra 192.168.1.4 ir klausosi 1880 prievado, kuriame yra /atnaujinama, pridėjus aparatūros tipą. Taigi, jei ketinu paprašyti dvejetainės „Wemos D1 Mini“, URL baigiasi taip:
192.168.1.4:1880/update/d1_mini
b) Sukurkite kodą, kad galėtumėte valdyti šią logiką:
ESP8266: „Sveiki, aš naudoju programinės aparatinės įrangos versiją a.b.c, ar turite naujesnę versiją?“Serveris: „Leiskite man pamatyti … aha, aš turiu a.b.d - čia jis ateina …“
Jei egzistuoja naujesnė versija, serveris tiesiog siunčia ją kaip dvejetainių duomenų krūvą http atsakyme. ESP8266httpUpdate klasė atlieka sudėtingą dvejetainės kopijos kopiją į atmintį, pakeisdama programinės įrangos įkrovos adresą į naują kodą, nei (jei paprašoma) iš naujo paleisti įrenginį, kad būtų paleistas naujas kodas.
Kita vertus, jei nėra aukštesnės versijos, ji atsako pateikdama klaidą „http 304“, kuri iš tikrųjų sako: „Aš tau nieko neturiu“ir jūsų kodas ir toliau veikia kaip įprasta.
5 veiksmas: pridėkite serverio logiką
Pirmasis srauto mazgas „klausosi“http užklausos į URL https://192.168.1.4:1880/atnaujinti, pridėjus įrenginio tipą. Tai perduoda funkcijos mazgui „Sukurti paieškos kelią“, kuriame yra šis „JavaScript“kodas:
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 == "eskizas") {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"; } grąžinti pranešimą;
Tai tiesiog nustato atitinkamą kelią su pakaitos simboliais sekančiai sys funkcijai, kuri tiesiog veikia
ls - r
Tada išvestis tiekiama į funkcijų mazgą „Palyginti versijas“:
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (msg.mode == "eskizas") {
f = f.replace ("/home/pi/trucFirmware/truc_", ""); f = f.replace (". ino."+msg.type+". bin", ""); } else {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.pakeisti (/_ / dM \.bin/, ""); }
if (msg.version <f) {
node.warn ("reikalingas atnaujinimas");
node.warn ("grįš"+žinutės failo pavadinimas); grąžinti pranešimą; } node.warn ("be atnaujinimo"); msg.statusCode = 304; msg.payload = ;
grąžinti pranešimą;
Tada perjungimo mazgas užtikrina, kad būtų išsiųstas pranešimas 304 „atnaujinti nereikia“arba faktinė nauja dvejetainė dalis būtų grąžinta ir išsiųsta atgal į įrenginį.
6 veiksmas: pridėkite kodą prie eskizo ir paprašykite atnaujinimo
Eskizas turi turėti šį kodą, kad kitą kartą padidinus versijos numerį jis būtų automatiškai atnaujinamas:
#įtraukti
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE yra nustatytas anksčiau, priklausomai nuo įvairių kompiliavimo laiko apibrėžimų // kurie galiausiai apibrėžia hw tipą, pvz. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // tai mano „Raspberry Pi“serveris, 1880 yra numatytasis NODE-RED prievadas {Styginių žinutė; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (klaidinga); if (eskizas) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Tai eilutė, kuri „užsiima verslu“} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {
Serial.printf ("ATNAUJINIMAS Sėkmingas");
grįžti tiesa; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf („Nepavyko atnaujinti“);
}}} return false; }
7 žingsnis: Galiausiai inicijuokite atnaujinimą
Įkrovimo metu arba galbūt atsakant į MQTT pranešimą (kaip aš) paleiskite šį kodą:
if (_actualUpdate (true)) ESP.restart ();
// arba SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
Įrenginys atnaujins save ir iš naujo paleis paleidęs naujausią kodą iš serverio. Man tai daug paprasčiau nei rankiniu būdu atnaujinti 33 įrenginius!
Daug daugiau naudingos informacijos apie namų automatizavimą, IOT ir ESP8266 programavimą rasite mano tinklaraštyje
Rekomenduojamas:
Vietinio „Blynk“serverio kūrimas: 5 veiksmai
Vietinio „Blynk“serverio kūrimas: Šiame įraše mes mokomės sukurti vietinį „Blynk“serverį, kuris labai sumažins bendrą delsą, kuri kartais būna naudojant numatytąjį nuotolinį serverį. Mes jį nustatėme naudodami „Pi Zero W“ir taip pat sukuriame demonstracinį projektą, kad įsitikintume, jog tai
Internetinio serverio patikrinimo nešiojamasis signalas (naudojant „NodeMCU ESP8266“): 6 veiksmai
Internetinis serverio patikrinimo nešiojamasis signalas (naudojant „NodeMCU ESP8266“): ką mums reiškia serverio/paslaugos rodiklio rodiklis ..? Internetinės infrastruktūros pasaulyje tai daug … !! Turime išlaikyti visą mūsų paslaugos prieinamumą. nenoriu nuvilti savo paslaugos/serverio ir prarasti savo verslo " Bet kartais įdėti
Ugniasienės/tarpinio serverio apėjimas: 3 veiksmai
Ugniasienės/tarpinio serverio apėjimas: Atėjo daug kitų studentų ir paklausė manęs, kaip apeiti užkardas ir įgaliotinius. IT žmonės mokykloje vis protingiau vertina mokinius, naudojančius įgaliotinius. Kurį laiką galvojau apie šią problemą ir turiu sprendimą. Kodėl gi nesukūrus savo tinklalapių
Kaip išvengti daugelio serverio pusės žiniatinklio blokatorių saugumo: 3 veiksmai
Kaip apeiti daugumos serverio žiniatinklio blokatorių saugumą: tai mano pirmasis pamokomas dalykas, todėl būkite su manimi: Gerai, aš jums pasakysiu, kaip apeiti žiniatinklio blokatorius, kuriuos mačiau naudojamus mokyklose. Viskas, ko jums reikia, yra „flash drive“ir keli programinės įrangos atsisiuntimai
FTP serverio nustatymas naudojant „Filezilla!“: 7 žingsniai
FTP serverio nustatymas naudojant „Filezilla!“: 1. Kas yra FTP serveris? 2. Kodėl aš norėčiau tai padaryti? 1. Failų perdavimo protokolas (FTP) yra tinklo protokolas, naudojamas duomenims perkelti iš vieno kompiuterio į kitą tinklu, pavyzdžiui, internetu. FTP yra failų perdavimo protokolas, skirtas