Satura rādītājs:

ESP8266 automātiskās atjaunināšanas servera iestatīšana: 7 soļi
ESP8266 automātiskās atjaunināšanas servera iestatīšana: 7 soļi

Video: ESP8266 automātiskās atjaunināšanas servera iestatīšana: 7 soļi

Video: ESP8266 automātiskās atjaunināšanas servera iestatīšana: 7 soļi
Video: Gudra Māja - Умный дом. Apgaismojuma vadība - Управление светом. 2024, Novembris
Anonim
Iestatiet automātiskās atjaunināšanas serveri ESP8266
Iestatiet automātiskās atjaunināšanas serveri ESP8266

Daudzi cilvēki tagad izmanto ESP8266 daudzos veidos (ESP-01S, Wemos D1, NodeMCU, Sonoff uc) mājas automatizācijas sistēmām. Ja jūs rakstāt savu kodu (kā es to daru), katra no tiem atjaunināšana atsevišķi, pat izmantojot OTA (ēterā), kļūst nedaudz garlaicīga.

Manai sistēmai, piemēram, ir 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV un NodeMCU, kurām ir kopīga koda bāze, tāpēc, veicot vienkāršu kodu, ir jāatjaunina kopumā 33 ierīces mainīt.

Bet ir vienkāršāks veids: "atjaunināšanas serveris". Lieliskajam Arduino IDE + ESP8266 kodolam ir bibliotēka, lai veiktu lielāko daļu darba (ESP8266httpUpdate), taču jums jāzina, kā iestatīt savu serveri, lai tas darbotos.

Šī pamācība parāda, kā izmantot NODE-RED serveri, taču tāda pati loģika attiecas uz jebkuru jūsu izvēlētu servera tehnoloģiju, piem. Apache + PHP utt

1. darbība. Kas jums nepieciešams

  1. Arduino IDE
  2. ESP8266 kodols
  3. Jebkura ESP8266 izstrādātāju plate ar 1M vai vairāk zibatmiņas
  4. Tīmekļa serveris (pat pazemīgs aveņu Pi darīs - es to izmantoju)
  5. (pēc izvēles) rīks mkspiffs, ja vēlaties automātiski atjaunināt SPIFFS failu sistēmas attēlu

2. darbība. Izveidojiet repozitoriju bināro programmaparatūru glabāšanai

Izveidojiet krātuvi bināro programmaparatūru glabāšanai
Izveidojiet krātuvi bināro programmaparatūru glabāšanai

Manā serverī man ir mape ar nosaukumu/home/pi/trucFirmware, kurā ir dažādas ierīces programmaparatūras un SPIFFS attēli

Katram aparatūras tipam es uzturu atsevišķu bināro failu (no viena avota faila ar dažiem #defines), un, kad jauns laidiens ir gatavs, katrai mērķa ierīcei izmantoju izvēlnes komandu Arduino "sket/Export compiled Binary". Ņemiet vērā, ka pat lai gan ir 5 dažādi aparatūras veidi, ir tikai divi SPIFFS binārie faili: 1M un 4M versija, kas izveidota, izmantojot rīku mkspiffs, jo visām ierīcēm ir 1M vai 4M zibspuldze.

3. darbība: izveidojiet bināros failus

Izmantojot Arduino IDE izvēlnes opcijas skici/Eksportēt apkopoto bināro, izveidojiet programmaparatūru, kas tiks augšupielādēta ierīcē, kad tā to pieprasīs no atjauninājumu servera.

Ja jums ir nepieciešams SPIFFS binārs, jums būs jāinstalē rīks mkspiffs.

Kad esat to izveidojis, SPIFFS binārā izveide ir vienkārša. Man ir vienas rindas sērijveida fails 1M versijai, kuras versijas numurs tiek ņemts par parametru (%1)

mkspiffs -c dati/ spiffs_%1_1M.bin

un vēl viens 4M versijai:

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

Pēc tam visus apkopotos bināros failus un SPIFFS.binary failus pārkopēju repozitorijā

4. darbība: izveidojiet servera plūsmu

Izveidojiet servera plūsmu
Izveidojiet servera plūsmu

Es izmantoju NODE-RED, bet vienkāršā loģika būs tāda pati jebkurā servera tehnoloģijā / valodā.

a) Definējiet URL, kas klausīsies ESP8266httpUpdate pieprasījumu. Mans raspberryPi serevr ir 192.168.1.4 un klausās portā 1880, lai /atjauninātu, pievienojot pievienoto aparatūras tipu. Tātad, ja es pieprasīšu Wemos D1 Mini bināro failu, URL beidzas šādi:

192.168.1.4:1880/update/d1_mini

b) Izveidojiet kodu, lai apstrādātu šādu loģiku:

ESP8266: "Sveiki, es izmantoju programmaparatūras versiju a.b.c, vai jums ir jaunāka versija?" Serveris: "Ļaujiet man redzēt … ah jā, man ir a.b.d - šeit tas nāk …"

Ja pastāv jaunāka versija, serveris to vienkārši nosūta kā bināro datu ielādi http atbildē. ESP8266httpUpdate klase veic sarežģīto bināro datu kopēšanu atmiņā, mainot programmaparatūras sāknēšanas adresi uz jauno kodu, nevis (ja tiek prasīts) pārstartēt ierīci, lai palaistu jauno kodu.

Ja, no otras puses, nav augstākas versijas, tā atbild ar kļūdu http 304, kas faktiski saka: "Man nav nekā jums", un jūsu kods turpina darboties kā parasti.

5. darbība: pievienojiet servera loģiku

Plūsmas pirmais mezgls "klausās" http pieprasījumu uz URL https://192.168.1.4:1880/update, pievienojot ierīces tipu. Tas to nodod funkcijas mezglam "Izveidot meklēšanas ceļu", kuram ir šāds javascript kods:

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

msg.mode = h ["x-esp8266-mode"];

ja (msg.mode == "sketch") {msg.payload = "/home/pi/trucFirmware/*. ino."+msg.type+". bin"; } cits {var sz = h ['x-esp8266-chip-size']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } atgriezt ziņu;

Tas vienkārši izveido atbilstošo ceļu ar aizstājējzīmi šādai sys funkcijai, kas vienkārši darbojas

ls - r

Pēc tam izvade tiek ievadīta funkcijas mezglā "Versiju salīdzināšana":

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

ja (msg.mode == "skice") {

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

ja (ziņojuma versija <f) {

node.warn ("nepieciešama jaunināšana");

node.warn ("atgriezīsies"+msg.filename); atgriezt ziņu; } node.warn ("bez jaunināšanas"); msg.statusCode = 304; msg.payload = ;

atgriezt ziņu;

Pēc tam slēdža mezgls nodrošina, ka tiek nosūtīts ziņojums 304 "nav nepieciešams atjauninājums" vai tiek atgriezts jaunais binārais fails un nosūtīts atpakaļ uz ierīci.

6. darbība: pievienojiet skicei kodu, lai pieprasītu atjauninājumu

Skicē ir jāiekļauj šāds kods, lai nākamreiz, kad palielināsit versijas numuru, tā tiks automātiski atjaunināta:

#iekļaut

#define TRUC_VERSION "0_4_99"

#define SPIFFS_VERSION "0_5_0"

// THIS_DEVICE ir iestatīts agrāk atkarībā no dažādām kompilēšanas laika definīcijām //, kas galu galā nosaka hw tipu, piem. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // šis ir mans aveņu Pi serveris, 1880 ir noklusējuma NODE-RED ports // /atjauninājums ir tas URL, kuru izvēlējos serverim, lai to "klausītos", kam seko ierīces tips … bool aktuālsUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (nepatiesa); ja (skice) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Šī ir rinda, kas "veic uzņēmējdarbību"} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } ja (ret! = HTTP_UPDATE_NO_UPDATES) {ja (ret == HTTP_UPDATE_OK) {

Serial.printf ("UPDATE SUCCEEDED");

atgriezties patiesi; } cits {if (ret == HTTP_UPDATE_FAILED) {

Serial.printf ("Jaunināšana neizdevās");

}}} atgriezt nepatiesu; }

7. solis: Visbeidzot, uzsāciet atjaunināšanu

Sāknēšanas laikā vai, iespējams, atbildot uz MQTT ziņojumu (kā es daru), palaidiet šādu kodu:

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

// vai SPIFFS…

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

Ierīce pati atjaunināsies un restartēsies, izmantojot jaunāko kodu no servera. Man tas ir daudz vienkāršāk nekā manuāli atjaunināt 33 ierīces!

Daudz vairāk noderīgas informācijas par mājas automatizāciju, IOT un ESP8266 programmēšanu var atrast manā emuārā

Ieteicams: