Talaan ng mga Nilalaman:
- Hakbang 1: Ano ang Kailangan Mo
- Hakbang 2: Lumikha ng isang Repository upang Maghawak ng Mga Binary Firmwares
- Hakbang 3: Lumikha ng Mga Binary
- Hakbang 4: Lumikha ng Daloy ng Server
- Hakbang 5: Idagdag ang Server Logic
- Hakbang 6: Magdagdag ng Code sa Sketch upang Humiling ng isang Update
- Hakbang 7: Panghuli, Simulan ang Update
Video: Mag-set up ng isang ESP8266 Awtomatikong Pag-update ng Server: 7 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:15
Maraming mga tao ang gumagamit ngayon ng ESP8266 sa maraming mga guises nito (ESP-01S, Wemos D1, NodeMCU, Sonoff atbp) para sa mga system ng automation ng bahay. Kung sumulat ka ng iyong sariling code (tulad ng ginagawa ko) na pag-update ng bawat isa sa mga ito nang hiwalay kahit sa pamamagitan ng OTA (sa paglipas ng hangin) ay medyo nakakapagod.
Ang aking sariling system, halimbawa ay mayroong 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV at isang NodeMCU na nagbabahagi ng isang karaniwang base ng code, kaya't 33 na aparato ang lahat upang mai-update kapag gumawa ako ng isang simpleng code magbago
Ngunit may isang mas madaling paraan: Isang "update server". Ang mahusay na core ng Arduino IDE + ESP8266 ay may silid-aklatan upang gawin ang karamihan sa gawain (ESP8266httpUpdate), ngunit kailangan mong malaman kung paano i-set up ang iyong sariling server upang ito ay gumana.
Ipinapakita sa iyo ng Instructable na ito kung paano gumagamit ng isang NODE-RED server, ngunit ang parehong lohika ay nalalapat sa anumang teknolohiya ng server na iyong pinili hal. Apache + PHP atbp
Hakbang 1: Ano ang Kailangan Mo
- Arduino IDE
- Core ng ESP8266
- Anumang ESP8266 dev board na may 1M o higit pang flash RAM
- Isang Web Server (kahit na ang isang mapagpakumbabang raspberry Pi ay gagawin - Ito ang ginagamit ko)
- (opsyonal) tool na mkspiff kung nais mong awtomatikong i-update ang isang imahe ng SPIFFS file system
Hakbang 2: Lumikha ng isang Repository upang Maghawak ng Mga Binary Firmwares
Sa aking server, mayroon akong isang folder na tinatawag na / home / pi / trucFirmware na humahawak sa iba't ibang mga firmwares ng aparato at mga imahe ng SPIFFS
Pinapanatili ko ang isang hiwalay na binary para sa bawat uri ng hardware (mula sa isang solong pinagmulan ng file na may ilang #defines) at kapag handa na ang isang bagong paglabas ginagamit ko ang Arduino IDE na "sketch / Export compiled Binary" na menu command para sa bawat target na aparato. Tandaan na kahit bagaman mayroong 5 magkakaibang uri ng hardware, mayroon lamang dalawang mga binary na SPIFFS: isang 1M at isang bersyon na 4M - na itinayo gamit ang tool na mkspiff - dahil ang lahat ng mga aparato ay may alinman sa 1M o 4M flash.
Hakbang 3: Lumikha ng Mga Binary
Gamit ang sketch ng pagpipilian ng menu ng Arduino IDE / I-export ang Pinagsama na Binary, lumikha ng firmware na mai-upload sa aparato kapag hiniling nito ito mula sa server ng pag-update.
Kung kailangan mo ng isang binary na SPIFFS kakailanganin mong i-install ang tool na mkspiff.
Kapag mayroon ka nito, ang pagbuo ng SPIFFS binary ay simple. Mayroon akong isang linya na file ng batch para sa bersyon ng 1M na kukuha ng numero ng bersyon bilang isang parameter (% 1)
mkspiff -c data / spiff_% 1_1M.bin
at isa pa para sa bersyon ng 4M:
mkspiff -p 256 -b 8192 -s 0x0FB000 -c data / spiff_% 1_4M.bin
Kinopya ko pagkatapos ang lahat ng naipong mga binary at ang SPIFFS.binary files papunta sa repository
Hakbang 4: Lumikha ng Daloy ng Server
Gumagamit ako ng NODE-RED, ngunit ang simpleng lohika ay magiging pareho sa anumang teknolohiya / wika ng server.
a) Tukuyin ang isang url na makikinig para sa kahilingan sa ESP8266httpUpdate. Ang aking raspberryPi serevr ay nasa 192.168.1.4 at nakikinig sa port 1880 para sa / pag-update sa aparatong hardware na nakadugtong. Kaya't kung hihiling ako ng isang binary para sa isang Wemos D1 Mini, ang url ay nagtatapos bilang:
192.168.1.4:1880/update/d1_mini
b) Lumikha ng code upang hawakan ang sumusunod na lohika:
ESP8266: "Kumusta, nagpapatakbo ako ng bersyon ng firmware a.b.c, mayroon ka bang isang mas bagong bersyon?" Server: "Tingnan mo ako … ah oo mayroon akong a.b.d - narito na …"
Kung mayroong isang mas bagong bersyon ay ipapadala lamang ito ng server bilang isang pag-load ng binary data sa sagot sa http. Ginagawa ng klase ng ESP8266httpUpdate ang nakakalito na bahagi ng pagkopya ng binary sa memorya, binabago ang firmware boot address sa bagong code kaysa sa (kung hiniling) na muling i-reboot ang aparato upang patakbuhin ang bagong code.
Kung sa kabilang banda walang mas mataas na bersyon, ito ay tumugon nang may error na http 304 na mabisang nagsasabing: "Wala akong para sa iyo" at ang iyong code ay patuloy na tumatakbo bilang normal.
Hakbang 5: Idagdag ang Server Logic
Ang unang node sa daloy na "nakikinig" para sa isang kahilingan sa http na url https://192.168.1.4:1880/update kasama ang uri ng aparato na naidugtong. Ipinapasa ito sa node ng function na "Bumuo ng paghahanap ng landas" na may mga sumusunod na javascript code:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-bersyon"];
msg.mode = h ["x-esp8266-mode"];
kung (msg.mode == "sketch") {msg.payload = "/ home / pi / trucFirmware / *. ino." + msg.type + ". bin"; } iba pa {var sz = h ['x-esp8266-size-chip']; msg.payload = "/ home / pi / trucFirmware / spiff _ * _" + (sz / 1048576) + "M.bin"; } ibalik ang msg;
Itinatakda lamang nito ang naaangkop na landas na may wildcard para sa pagpapaandar ng sys na sumusunod, na simpleng tumatakbo
ls - r
Pagkatapos ang output ay pinakain sa node ng function na "Paghambingin ang mga bersyon":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
kung (msg.mode == "sketch") {
f = f.replace ("/ home / pi / trucFirmware / truc_", ""); f = f.replace (". ino." + msg.type + ". bin", ""); } iba pa {f = f.replace ("/ home / pi / trucFirmware / spiff_", ""); f = f.replace (/ _ / dM \.bin /, ""); }
kung (msg.version <f) {
node.warn ("kinakailangan ng pag-upgrade");
node.warn ("babalik" + msg.filename); ibalik ang msg; } node.warn ("walang pag-upgrade"); msg.statusCode = 304; msg.payload = ;
ibalik ang msg;
Ang switch node pagkatapos ay tinitiyak na ang alinman sa 304 "walang kinakailangang pag-update" na mensahe ay naipadala o ang aktwal na bagong binary ay naibalik at ipinadala pabalik sa aparato.
Hakbang 6: Magdagdag ng Code sa Sketch upang Humiling ng isang Update
Ang sketch ay kailangang may kasamang sumusunod na code dito upang awtomatiko itong mag-update sa susunod na taasan mo ang numero ng bersyon:
# isama
# tukuyin ang TRUC_VERSION "0_4_99"
# tukuyin ang SPIFFS_VERSION "0_5_0"
// IT_DEVICE ay itinakda nang mas maaga depende sa iba't ibang mga tumutukoy sa oras ng pagsasaayos // na sa kalaunan ay tumutukoy sa uri ng hw, hal. #define THIS_DEVICE "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" THIS_DEVICE; // this is my raspberry Pi server, the 1880 is the default NODE-RED port // / update is the url pinili ko para sa server na "makinig" para sa, sinusundan ng uri ng aparato … bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (false); kung (sketch) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Ito ang linya na "ginagawa ang negosyo"} iba pa {ret = ESPhttpUpdate.updateSpiff (updateUrl, SPIFFS_VERSION); } kung (ret! = HTTP_UPDATE_NO_UPDATE) {kung (ret == HTTP_UPDATE_OK) {
Serial.printf ("UPDATE SUCCEEDED");
bumalik totoo; } iba pa {kung (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Nabigo ang Pag-upgrade");
}}} bumalik na hindi totoo; }
Hakbang 7: Panghuli, Simulan ang Update
Sa oras ng pag-boot, o marahil bilang tugon sa isang mensahe ng MQTT (tulad ng ginagawa ko) patakbuhin ang sumusunod na code:
kung (_actualUpdate (totoo)) ESP. restart ();
// o para sa SPIFFS…
kung (_actualUpdate (false)) ESP. restart ();
I-a-update ng aparato ang sarili nito at i-reboot ang pagpapatakbo ng pinakabagong code mula sa server. Mas simple para sa akin kaysa sa manu-manong pag-update ng 33 mga aparato!
Maraming mas kapaki-pakinabang na impormasyon tungkol sa Home Automation, IOT at pag-program ng ESP8266 ay matatagpuan sa Aking Blog
Inirerekumendang:
Awtomatikong Pag-iikma ng Iniksyon para sa Pag-recycle ng Plastik: 5 Mga Hakbang
Awtomatikong Iniksyon na Pag-iikma ng Iniksyon para sa Pag-recycle ng Plastik: Kumusta :) Ang Ituturo na Ito ay tungkol sa aming " awtomatikong iniksyon na iniksyon ng iniksyon para sa pag-recycle ng plastik ". (tinatawag na: Smart Injector) Ang ideya sa likod ng makina ay upang mag-alok ng isang desentralisadong solusyon sa pag-recycle ng plastic. Ang pag-recycle ay madalas na limitado
Awtomatikong Magsimula ng isang Programa Kapag Nag-hook ng isang Laptop Sa isang Docking Station: 5 Mga Hakbang
Awtomatikong Magsimula ng isang Programa Kapag Ang Pag-hook ng isang Laptop Sa isang Docking Station: Ang itinuturo na ito ay tungkol sa kung paano magpatakbo ng isang programa o isang application kapag na-hook mo ang iyong laptop sa isang docking station. Sa halimbawang ito gumagamit ako ng Lenovo T480 Windows 10
WiFi Awtomatikong Tagapakain ng Halaman Na May Reservoir - Panloob / Panlabas na Pag-aayos ng Paglilinang - Awtomatikong Mga Halaman ng Tubig na May Remote na Pagsubaybay: 21 Hakbang
Ang WiFi Awtomatikong Tagapakain ng halaman na may reservoir - Pag-set up ng Panloob / Panlabas na Paglilinang - Awtomatikong Mga Halaman ng Tubig Na May Malayuang Pagsubaybay: Sa tutorial na ito ipapakita namin kung paano mag-set up ng isang pasadyang panloob / panlabas na sistema ng feeder ng halaman na awtomatikong nagdidilig ng mga halaman at maaaring subaybayan nang malayuan gamit ang Adosia platform
Paano Mag-disassemble ng isang Dell Inspiron 15 5570 Laptop upang Mag-install ng isang M.2 SSD: 20 Hakbang
Paano Mag-disassemble ng isang Dell Inspiron 15 5570 Laptop upang Mag-install ng isang M.2 SSD: Kung nakita mong kapaki-pakinabang ang pagtuturo na ito, mangyaring isaalang-alang ang pag-subscribe sa aking Youtube channel para sa paparating na mga tutorial sa DIY tungkol sa teknolohiya. Salamat
Pag-iniksyon sa Keyboard / Awtomatikong I-type ang Iyong Password Sa Isang Pag-click !: 4 Mga Hakbang (na may Mga Larawan)
Pag-iniksyon sa Keyboard / Awtomatikong I-type ang Iyong Password Sa Isang Pag-click !: Mahirap ang mga password … at ang pag-alala sa isang ligtas ay mas mahirap pa! Bukod dito kung mayroon kang kasama, nagbabagong password ay magtatagal ito upang mai-type. Ngunit huwag matakot sa aking mga kaibigan, mayroon akong solusyon dito! Lumikha ako ng isang maliit na awtomatikong pag-type ng makina na