Përmbajtje:
- Hapi 1: Ajo që ju nevojitet
- Hapi 2: Krijoni një depo për të mbajtur firmuaret binare
- Hapi 3: Krijoni Binaret
- Hapi 4: Krijoni rrjedhën e serverit
- Hapi 5: Shtoni logjikën e serverit
- Hapi 6: Shtoni kodin në skicë për të kërkuar një azhurnim
- Hapi 7: Së fundi, Filloni Përditësimin
Video: Vendosni një server të azhurnimit automatik ESP8266: 7 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:30
Shumë njerëz tani po përdorin ESP8266 në formatin e tij të shumtë (ESP-01S, Wemos D1, NodeMCU, Sonoff etj) për sistemet e automatizimit të shtëpisë. Nëse shkruani kodin tuaj (siç bëj unë) përditësimi i secilës prej tyre veç e veç edhe përmes OTA (në ajër) bëhet pak i lodhshëm.
Sistemi im, për shembull ka 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV dhe një NodeMCU të cilat ndajnë një bazë të përbashkët të kodit, kështu që gjithsej 33 pajisje do të përditësohen kur të bëj një kod të thjeshtë ndryshim.
Por ka një mënyrë më të lehtë: Një "server përditësimi". Bërthama e shkëlqyer Arduino IDE + ESP8266 ka një bibliotekë për të bërë pjesën më të madhe të punës (ESP8266httpUpdate), por ju duhet të dini se si të krijoni serverin tuaj për ta bërë atë të funksionojë.
Ky udhëzues ju tregon se si të përdorni një server NODE-RED, por e njëjta logjikë vlen për çdo teknologji serveri sipas zgjedhjes tuaj p.sh. Apache + PHP etj
Hapi 1: Ajo që ju nevojitet
- Arduino IDE
- ESP8266 bërthamë
- Çdo bord ESP8266 dev me 1M ose më shumë RAM flash
- Një Web Server (edhe një mjedër i thjeshtë Pi do të bëjë - kjo është ajo që unë përdor)
- (opsional) mjeti mkspiffs nëse doni të azhurnoni automatikisht një imazh të sistemit të skedarëve SPIFFS
Hapi 2: Krijoni një depo për të mbajtur firmuaret binare
Në serverin tim, unë kam një dosje të quajtur/home/pi/trucFirmware e cila mban firmware të ndryshëm të pajisjeve dhe imazhe SPIFFS
Unë mbaj një binar të veçantë për secilin lloj hardueri (nga një skedar burimi i vetëm me disa #përkufizime) dhe kur një lëshim i ri të jetë gati unë përdor komandën e menysë Arduino IDE "skicë/Eksporto përpiluar Binary" për çdo pajisje të synuar. Vini re se edhe megjithëse ekzistojnë 5 lloje të ndryshme të harduerit, ekzistojnë vetëm dy binare SPIFFS: një version 1M dhe 4M - i ndërtuar me mjetin mkspiffs - pasi të gjitha pajisjet kanë flash 1M ose 4M.
Hapi 3: Krijoni Binaret
Duke përdorur skicën e menysë Arduino IDE/Export Compiled Binary, krijoni firmuerin që do të ngarkohet në pajisje kur ta kërkojë nga serveri i përditësimit.
Nëse keni nevojë për një binar SPIFFS, do t'ju duhet të instaloni mjetin mkspiffs.
Pasi ta keni, ndërtimi i binarit SPIFFS është i thjeshtë. Unë kam një skedar grumbull me një rresht për versionin 1M i cili merr numrin e versionit si parametër (%1)
mkspiffs -c data/ spiffs_%1_1M.bin
dhe një tjetër për versionin 4M:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c të dhëna/ spiffs_%1_4M.bin
Pastaj kopjoj të gjitha binarët e përpiluar dhe skedarët binarë SPIFFS në depo
Hapi 4: Krijoni rrjedhën e serverit
Unë jam duke përdorur NODE-RED, por logjika e thjeshtë do të jetë e njëjtë në çdo teknologji / gjuhë serveri.
a) Përcaktoni një url e cila do të dëgjojë kërkesën ESP8266httpUpdate. My raspberryPi serevr është në 192.168.1.4 dhe dëgjon në portin 1880 për /përditësim me llojin e harduerit të bashkangjitur. Pra, nëse do të kërkoj një binar për një Wemos D1 Mini, url përfundon si:
192.168.1.4:1880/update/d1_mini
b) Krijoni kod për të trajtuar logjikën e mëposhtme:
ESP8266: "Përshëndetje, po ekzekutoj versionin e firmuerit a.b.c, keni një version më të ri?" Serveri: "Më lër të shoh … ah po kam a.b.d - ja ku po vjen …"
Nëse ekziston një version më i ri, serveri thjesht e dërgon atë si një ngarkesë e të dhënave binare në përgjigjen http. Klasa ESP8266httpUpdate bën pjesën e ndërlikuar të kopjimit të binarit në memorie, duke ndryshuar adresën e nisjes së firmuerit në kodin e ri sesa (nëse kërkohet) rindezjen e pajisjes për të ekzekutuar kodin e ri.
Nëse nga ana tjetër nuk ka ndonjë version më të lartë, ai përgjigjet me një gabim http 304 i cili në mënyrë efektive thotë: "Unë nuk kam asgjë për ju" dhe kodi juaj vazhdon të funksionojë si zakonisht.
Hapi 5: Shtoni logjikën e serverit
Nyja e parë në rrjedhë "dëgjon" për një kërkesë http në url https://192.168.1.4:1880/update me llojin e pajisjes të bashkangjitur. E kalon këtë në nyjen e funksionit "Ndërto rrugën e kërkimit" e cila ka kodin e mëposhtëm javascript:
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 == "skicë") {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"; } kthimi i mesazhit;
Kjo thjesht krijon rrugën e duhur me wildcard për funksionin sys që vijon, i cili thjesht funksionon
ls - r
Dalja pastaj furnizohet me nyjen e funksionit "Krahasoni versionet":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
nëse (msg.mode == "skicë") {
f = f.zëvendësim ("/home/pi/trucFirmware/truc_", ""); f = f.zëvendësim (". ino."+msg.type+". bin", ""); } else {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.zëvendëso (/_ / dM \.bin/, ""); }
nëse (msg.version <f) {
node.warn ("kërkohet përmirësim");
node.warn ("do të kthehet"+msg.filename); kthe mesazh; } node.warn ("pa azhurnim"); msg.statusCode = 304; msg.pagesa = ;
kthe mesazh;
Nyja e kalimit siguron që mesazhi 304 "nuk ka nevojë për përditësim" të dërgohet ose binari aktual i ri të kthehet dhe të kthehet përsëri në pajisje.
Hapi 6: Shtoni kodin në skicë për të kërkuar një azhurnim
Skica duhet të ketë kodin e mëposhtëm të përfshirë në të, në mënyrë që të azhurnohet automatikisht herën tjetër kur të rrisni numrin e versionit:
#përfshi
#përcakto TRUC_VERSION "0_4_99"
#përcakto SPIFFS_VERSION "0_5_0"
// THIS_DEVICE është vendosur më herët në varësi të përcaktimeve të ndryshme të kohës së përpilimit // të cilat përfundimisht përcaktojnë llojin hw, p.sh. #përcaktoni KIST_Pajisje "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // ky është serveri im i mjedrës Pi, 1880 është porta e paracaktuar NODE-RED // /përditësimi është url që kam zgjedhur për serverin për të "dëgjuar", e ndjekur nga lloji i pajisjes … bool aktualeUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (false); if (skicë) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Kjo është linja që "bën biznes"} tjetër {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } nëse (ret! = HTTP_UPDATE_NO_UPDATES) {nëse (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED");
kthehet e vërtetë; } tjetër {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Përditësimi dështoi");
}}} kthehu false; }
Hapi 7: Së fundi, Filloni Përditësimin
Në kohën e nisjes, ose ndoshta në përgjigje të një mesazhi MQTT (siç bëj unë) drejtoni kodin e mëposhtëm:
if (_actualUpdate (true)) ESP.restart ();
// ose për SPIFFS…
if (_actualUpdate (false)) ESP.restart ();
Pajisja do të azhurnohet vetë dhe do të rindizet duke ekzekutuar kodin e fundit nga serveri. Meshtë shumë më e thjeshtë për mua sesa azhurnimi manual i 33 pajisjeve!
Shumë informacione më të dobishme në lidhje me Automatizimin e Shtëpisë, IOT dhe programimin e ESP8266 mund të gjenden në My Blog
Recommended:
Gjurmuesi i azhurnimit të Covid-19 duke përdorur hapat ESP8266: 9
Gjurmuesi i përditësimit të Covid-19 duke përdorur ESP8266: Ky është një projekt që tregon të dhënat aktuale të shpërthimit të koronavirusit të qyteteve të ndryshme të shteteve të Indisë në kohë reale në ekranin OLED. Ky gjurmues i statusit Live ju ndihmon të monitoroni përditësimin në kohë reale të covid-19 të rrethit tuaj. Ky projekt është plotësisht b
Si të vendosni Pi-Hole në një Raspberry Pi, një bllokues reklamash në rrjetë !!: 25 hapa
Si të vendosni Pi-Hole në një Raspberry Pi, një bllokues i reklamave në rrjetë !!: Për këtë projekt, do t'ju duhet: një Raspberry Pi i aftë për t'u lidhur me internetin Një kartë Micro SD që drejton tastierën Raspbian LiteA (Për të konfiguruar SSH) Një e dytë Pajisja (Për të hyrë në Portalin e Uebit) Njohuritë themelore të UNIX si dhe navigimin e ndërfaqes në
Si të zgjidhet çështja e azhurnimit të kontrolluesit të thjeshtë të klonit SimpleBGC: 4 hapa
Si të zgjidhni Clone SimpleBGC Upgrade Controller Çështja: Përshëndetje. Kohët e fundit, unë po punoja mbi kontrolluesin e gimbalit SimpleBGC për projektin tim me dron. E lidha dhe e sintonizova me sukses. Po punonte në mënyrë perfekte. Pas kësaj, doja të azhurnoja firmware -in e tij nga v2.2 në v2.4. Pra, pasi e përmirësova gimbalin
Vendosni një Raspberry Pi pa një monitor të jashtëm ose tastierë: 7 hapa
Vendosni një Raspberry Pi Pa një Monitor të Jashtëm ose Tastierë: Nuk keni më nevojë për një monitor të jashtëm, tastierë dhe mi për të filluar me Raspberry Pi, ka një zgjidhje tjetër - modaliteti pa kokë
Roboti i shmangies së pengesës Arduino (Versioni i azhurnimit): 7 hapa (me fotografi)
Roboti shmangës i pengesës Arduino (Versioni i azhurnimit): Ky post është publikuar së pari në këtë faqe interneti https://truescience22.blogspot.com/2018/01/arduino-obstacle-avoiding-robotupgrade.html Përshëndetje miq, Sot bëra një version të azhurnuar të Arduino Pengesa Shmangia e Robotit. Kjo është e thjeshtë, por disa veçori dhe u