Satura rādītājs:
- 1. darbība. Kas jums nepieciešams
- 2. darbība. Izveidojiet repozitoriju bināro programmaparatūru glabāšanai
- 3. darbība: izveidojiet bināros failus
- 4. darbība: izveidojiet servera plūsmu
- 5. darbība: pievienojiet servera loģiku
- 6. darbība: pievienojiet skicei kodu, lai pieprasītu atjauninājumu
- 7. solis: Visbeidzot, uzsāciet atjaunināšanu
Video: ESP8266 automātiskās atjaunināšanas servera iestatīšana: 7 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:58
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
- Arduino IDE
- ESP8266 kodols
- Jebkura ESP8266 izstrādātāju plate ar 1M vai vairāk zibatmiņas
- Tīmekļa serveris (pat pazemīgs aveņu Pi darīs - es to izmantoju)
- (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
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
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:
Karstās plāksnes automātiskās vadības sistēma (HPACS): 3 soļi
Karstās plāksnes automātiskās vadības sistēma (HPACS): šī projekta mērķis ir sniegt vienkāršu intuitīvu veidu, kā saprast, kā veikt automātisko PID regulēšanu, izmantojot sildītāju. Tas, ko esmu izveidojis, ir balstīts uz Åström-Hägglund metodi, lai iegūtu parametrus, izmantojot sprādziena kontroli, lai atklātu sistēmas īpašības
DIY automātiskās muzikālās Ziemassvētku gaismas (MSGEQ7 + Arduino): 6 soļi (ar attēliem)
DIY automātiskās muzikālās Ziemassvētku gaismas (MSGEQ7 + Arduino): Tāpēc katru gadu es saku, ka es to darīšu un nekad to nedarīšu, jo daudz kavējos. 2020. gads ir pārmaiņu gads, tāpēc es saku, ka šis ir gads, kad to darīt. Tāpēc ceru, ka jums patīk un izveidojiet savas muzikālās Ziemassvētku gaismas. Šis būs s
Automātiskās palēnināšanas sistēma: 5 soļi
Automātiskās palēnināšanas sistēma: Šis projekts ir izstrādāts, modificējot objekta izvairīšanās algoritmu. Turklāt robotu šajā instrukcijā var vadīt, izmantojot viedtālruni, izmantojot Bluetooth
Automātiskās slodzes (vakuuma) slēdzis ar ACS712 un Arduino: 7 soļi (ar attēliem)
Automātiskās slodzes (vakuuma) slēdzis ar ACS712 un Arduino: Sveiki visi! Elektroinstrumenta lietošana slēgtā telpā ir grūstīšanās, jo visi gaisā esošie putekļi un putekļi gaisā nozīmē putekļus plaušās. Atbrīvojot veikalu, jūs varat novērst šo risku, bet to ieslēgt un izslēgt katru reizi
FTP servera iestatīšana, izmantojot Filezilla !: 7 soļi
FTP servera iestatīšana, izmantojot Filezilla !: 1. Kas ir FTP serveris? 2. Kāpēc es gribētu tādu uztaisīt? 1. Failu pārsūtīšanas protokols (FTP) ir tīkla protokols, ko izmanto datu pārsūtīšanai no viena datora uz citu, izmantojot tīklu, piemēram, internetu. FTP ir failu pārsūtīšanas protokols, piemēram