Kazalo:

Nastavitev strežnika za samodejno posodabljanje ESP8266: 7 korakov
Nastavitev strežnika za samodejno posodabljanje ESP8266: 7 korakov

Video: Nastavitev strežnika za samodejno posodabljanje ESP8266: 7 korakov

Video: Nastavitev strežnika za samodejno posodabljanje ESP8266: 7 korakov
Video: Control 32 Servo over Wi-Fi using ESP32 and PCA9685 via desktop or mobile phone V5 2024, November
Anonim
Nastavite strežnik za samodejno posodabljanje ESP8266
Nastavite strežnik za samodejno posodabljanje ESP8266

Mnogi ljudje zdaj uporabljajo ESP8266 v številnih oblikah (ESP-01S, Wemos D1, NodeMCU, Sonoff itd.) Za sisteme avtomatizacije doma. Če napišete svojo kodo (tako kot jaz), posodabljanje vsakega od teh ločeno tudi prek OTA (po zraku) postane nekoliko dolgočasno.

Moj sistem, na primer, ima 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV in NodeMCU, ki imajo skupno kodo, tako da je to 33 naprav, ki jih je treba posodobiti, ko naredim preprosto kodo spremeniti.

Obstaja pa lažji način: "strežnik za posodobitve". Odlično jedro Arduino IDE + ESP8266 ima knjižnico, ki opravi večino dela (ESP8266httpUpdate), vendar morate vedeti, kako nastaviti svoj strežnik, da bo deloval.

Ta navodila vam pokažejo, kako uporabljate strežnik NODE-RED, vendar ista logika velja za katero koli strežniško tehnologijo po vaši izbiri, npr. Apache + PHP itd

1. korak: Kaj potrebujete

  1. Arduino IDE
  2. Jedro ESP8266
  3. Katera koli plošča za razvijalce ESP8266 z 1 M ali več bliskovnega pomnilnika RAM
  4. Spletni strežnik (tudi skromni malinov Pi bo - to uporabljam)
  5. (izbirno) orodje mkspiffs, če želite samodejno posodobiti sliko datotečnega sistema SPIFFS

2. korak: Ustvarite skladišče za shranjevanje binarnih vdelanih programov

Ustvarite skladišče za shranjevanje binarne programske opreme
Ustvarite skladišče za shranjevanje binarne programske opreme

Na mojem strežniku imam mapo z imenom/home/pi/trucFirmware, ki vsebuje različne vdelane programske opreme in slike SPIFFS

Za vsako vrsto strojne opreme vzdržujem ločeno binarno datoteko (iz ene izvorne datoteke z nekaj #defines) in ko je nova izdaja pripravljena, za vsako ciljno napravo uporabim ukaz menija Arcino "skica/izvoz kompilirane binarne datoteke" za vsako ciljno napravo. čeprav obstaja 5 različnih vrst strojne opreme, obstajata samo dve binarni datoteki SPIFFS: 1M in 4M različica - izdelana z orodjem mkspiffs - saj imajo vse naprave 1M ali 4M bliskavico.

3. korak: Ustvarite binarne datoteke

Z možnostjo menija Arduino IDE skica/Izvoz sestavljenega binarnega dokumenta ustvarite vdelano programsko opremo, ki bo naložena v napravo, ko to zahteva od strežnika za posodobitve.

Če potrebujete binarno datoteko SPIFFS, boste morali namestiti orodje mkspiffs.

Ko ga imate, je izdelava binarne datoteke SPIFFS preprosta. Imam enovrstično paketno datoteko za različico 1M, ki za parameter vzame številko različice (%1)

mkspiffs -c podatki/ spiffs_%1_1M.bin

in še ena za različico 4M:

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

Nato vse prevedene binarne datoteke in binarne datoteke SPIFFS kopiram v skladišče

4. korak: Ustvarite tok strežnika

Ustvarite tok strežnika
Ustvarite tok strežnika

Uporabljam NODE-RED, vendar bo preprosta logika enaka v kateri koli strežniški tehnologiji / jeziku.

a) Določite URL, ki bo poslušal zahtevo ESP8266httpUpdate. Moj raspberryPi serevr je na 192.168.1.4 in posluša na vratih 1880 za /update z dodanim tipom strojne opreme. Torej, če bom zahteval binarno datoteko za Wemos D1 Mini, se URL konča kot:

192.168.1.4:1880/update/d1_mini

b) Ustvarite kodo za naslednjo logiko:

ESP8266: "Živjo, uporabljam različico vdelane programske opreme a.b.c, ali imaš novejšo različico?" Strežnik: "Naj vidim … ah ja, imam a.b.d - tukaj je …"

Če obstaja novejša različica, jo strežnik samo pošlje kot obremenitev binarnih podatkov v odgovoru http. Razred ESP8266httpUpdate zapleteno kopira binarno datoteko v pomnilnik in spremeni zagonski naslov vdelane programske opreme v novo kodo, kot pa (če se zahteva) ponovni zagon naprave za zagon nove kode.

Če na drugi strani ni višje različice, odgovori z napako http 304, ki dejansko pravi: "Nimam ničesar za vas" in vaša koda še naprej deluje kot običajno.

5. korak: Dodajte logiko strežnika

Prvo vozlišče v toku "posluša" zahtevo http za url https://192.168.1.4:1880/update z dodanim tipom naprave. To posreduje v vozlišče funkcije "Konstruiraj iskalno pot", ki ima naslednjo kodo javascript:

msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-različica"];

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;

To samo nastavi ustrezno pot z nadomestnim znakom za funkcijo sys, ki sledi, ki se preprosto zažene

ls - r

Izhod se nato vnese v vozlišče funkcije "Primerjaj različice":

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 nadgradnja");

node.warn ("vrne"+msg. ime datoteke); return msg; } node.warn ("brez nadgradnje"); msg.statusCode = 304; msg.payload = ;

return msg;

Preklopno vozlišče nato zagotovi, da je poslano sporočilo 304 "posodobitev ni potrebna" ali pa se vrne dejanska nova binarna datoteka in jo pošlje nazaj v napravo.

6. korak: Dodajte kodo v skico, da zahtevate posodobitev

Skica mora vsebovati naslednjo kodo, da se bo samodejno posodobila, ko naslednjič povečate številko različice:

#vključi

#define TRUC_VERSION "0_4_99"

#define SPIFFS_VERSION "0_5_0"

// THIS_DEVICE je nastavljen prej, odvisno od različnih časov prevajanja //, ki sčasoma definirajo tip hw, npr. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // to je moj strežnik maline Pi, 1880 je privzeto NODE-RED vrata // /update je url, ki sem ga izbral za "poslušanje" strežnika, sledi vrsta naprave … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (napačno); if (skica) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** To je vrstica, ki "posluje"} drugače {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } če (ret! = HTTP_UPDATE_NO_UPDATES) {če (ret == HTTP_UPDATE_OK) {

Serial.printf ("UPDATE SUCCEEDED");

vrni true; } drugače {if (ret == HTTP_UPDATE_FAILED) {

Serial.printf ("Nadgradnja ni uspela");

}}} return false; }

7. korak: Na koncu zaženite posodobitev

Ob zagonu ali morda kot odgovor na sporočilo MQTT (tako kot jaz) zaženite naslednjo kodo:

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

// ali za SPIFFS …

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

Naprava se bo posodobila in znova zagnala najnovejšo kodo s strežnika. Zame je veliko enostavnejše kot ročno posodabljanje 33 naprav!

Veliko več koristnih informacij o avtomatizaciji doma, IOT -u in programiranju ESP8266 najdete na mojem blogu

Priporočena: