Мазмұны:

ESP8266 автоматты жаңарту серверін орнату: 7 қадам
ESP8266 автоматты жаңарту серверін орнату: 7 қадам

Бейне: ESP8266 автоматты жаңарту серверін орнату: 7 қадам

Бейне: ESP8266 автоматты жаңарту серверін орнату: 7 қадам
Бейне: MAX6675 Температура термопары через WiFi с ESP8266 NodeMCU D1 Mini 2024, Шілде
Anonim
ESP8266 автоматты жаңарту серверін орнатыңыз
ESP8266 автоматты жаңарту серверін орнатыңыз

Қазір көптеген адамдар үйде автоматтандыру жүйелері үшін ESP8266-ды әр түрлі формада қолданады (ESP-01S, Wemos D1, NodeMCU, Sonoff т.б.). Егер сіз өзіңіздің жеке кодыңызды жазсаңыз (мен сияқты), олардың әрқайсысын OTA арқылы (эфирде) бөлек жаңарту біраз жалықтырады.

Менің жеке жүйемде, мысалы, 8x ESP-01S, 6x Wemos D1, 4x Sonoff Basic 12x Sonoff S20, 2x Sonoff SV және NodeMCU бар, олар жалпы кодтық базаны бөліседі, сондықтан мен қарапайым код жасаған кезде жаңартылатын 33 құрылғы. өзгерту.

Бірақ оңай жолы бар: «жаңарту сервері». Тамаша Arduino IDE + ESP8266 ядросында жұмыстың көп бөлігін орындауға арналған кітапхана бар (ESP8266httpUpdate), бірақ оны жұмыс жасау үшін сіз өзіңіздің серверіңізді қалай орнату керектігін білуіңіз керек.

Бұл нұсқаулық NODE-RED серверін қалай пайдалану керектігін көрсетеді, бірақ дәл сол логика сіз таңдаған кез келген сервер технологиясына қолданылады. Apache + PHP және т

1 -қадам: Сізге не қажет

  1. Arduino IDE
  2. ESP8266 ядросы
  3. 1M немесе одан да көп флэш -жады бар кез келген ESP8266 тақтасы
  4. Веб -сервер (тіпті қарапайым таңқурай Pi жасайды - мен қолданамын)
  5. (міндетті емес) mkspiffs құралы, егер сіз SPIFFS файлдық жүйенің кескінін автоматты түрде жаңартқыңыз келсе

2 -қадам: екілік бағдарламалық қамтамасыз етуді сақтау үшін репозиторий жасаңыз

Екілік бағдарламалық қамтамасыз етуді сақтау үшін репозиторий жасаңыз
Екілік бағдарламалық қамтамасыз етуді сақтау үшін репозиторий жасаңыз

Менің серверімде/home/pi/trucFirmware деп аталатын қалта бар, ол әр түрлі құрылғы бағдарламалары мен SPIFFS суреттерін сақтайды.

Мен әр аппараттық құралдың жеке екілік файлын сақтаймын (бірнеше #анықтамасы бар бір бастапқы файлдан) және жаңа шығарылым дайын болғанда, мен әрбір мақсатты құрылғы үшін Arduino IDE «құрастырылған екілік» мәзір командасын қолданамын. 5 түрлі жабдық түрі болса да, тек SPIFFS екілік файлдары бар: 1M және 4M нұсқасы - mkspiffs құралының көмегімен жасалған, өйткені барлық құрылғыларда 1M немесе 4M жарқылдығы бар.

3 -қадам: екілік файлдарды жасаңыз

Arduino IDE мәзірінің эскиз/экспорттық компиляторлық опциясын қолданып, жаңарту серверінен сұраған кезде құрылғыға жүктелетін микробағдарламаны жасаңыз.

Егер сізге SPIFFS екілік жүйесі қажет болса, mkspiffs құралын орнату қажет болады.

Сізде бар болса, SPIFFS екілік файлын құру қарапайым. Менде 1M нұсқасы үшін бір жолды пакеттік файл бар, ол нұсқа нөмірін параметр ретінде қабылдайды (%1)

mkspiffs -c data/ spiffs_%1_1M.bin

және 4M нұсқасы үшін басқасы:

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

Содан кейін мен барлық жинақталған екілік файлдарды және SPIFFS.binary файлдарын репозиторийге көшіремін

4 -қадам: Сервер ағынын жасаңыз

Сервер ағынын жасаңыз
Сервер ағынын жасаңыз

Мен NODE-RED қолданамын, бірақ қарапайым логика кез келген сервер технологиясында / тілінде бірдей болады.

а) ESP8266httpUpdate сұранысын тыңдайтын URL мекенжайын анықтаңыз. Менің raspberryPi serevr 192.168.1.4 нұсқасында және 1880 портында /жаңартылған жабдық түрімен жаңартылады. Егер мен Wemos D1 Mini үшін екілік файлды сұрағым келсе, URL келесі түрде аяқталады:

192.168.1.4:1880/update/d1_mini

b) Келесі логиканы басқару үшін код жасаңыз:

ESP8266: «Сәлеметсіз бе, мен a.b.c микробағдарламасының нұсқасымен жұмыс жасаймын, сізде жаңа нұсқасы бар ма?» Сервер: «Көруге рұқсат етіңіз … иә, менде a.b.d бар - міне келді …»

Егер жаңа нұсқасы болса, сервер оны http жауапында екілік деректердің жүктемесі ретінде жібереді. ESP8266httpUpdate класы екілік файлды жадқа көшірудің қиын бөлігін атқарады, микробағдарламаның жүктелу мекенжайын жаңа кодқа өзгертуге (қажет болған жағдайда) жаңа кодты іске қосу үшін құрылғыны қайта жүктеуге қарағанда.

Егер басқа нұсқасы болмаса, ол http 304 қатесімен жауап береді, онда тиімді түрде: «Менде сенің ештеңе жоқ», - деп жазылған және сіздің кодыңыз қалыпты түрде жұмыс істей береді.

5 -қадам: Сервер логикасын қосыңыз

Ағынның бірінші түйіні https://192.168.1.4:1880/update URL мекенжайына http сұранысын «тыңдайды», құрылғы түрі қосылған. Ол келесі JavaScript коды бар «Іздеу жолын құру» функция түйініне өтеді:

msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h [«x-esp8266-нұсқасы»];

msg.mode = h [«x-esp8266-режимі»];

if (msg.mode == «эскиз») {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»; } хабарды қайтару;

Бұл жай ғана жұмыс істейтін sys функциясы үшін қойылмалы таңбамен тиісті жолды орнатады

ls - r

Содан кейін шығыс «Нұсқаларды салыстыру» функция түйініне беріледі:

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

егер (msg.mode == «эскиз») {

f = f.replace («/home/pi/trucFirmware/truc_», «»); f = f.replace («. ino.»+msg.type+«. bin», «»); } else {f = f.replace («/home/pi/trucFirmware/spiffs_», «»); f = f.резиденция (/_ / dM \.bin/, «»); }

if (msg.version <f) {

node.warn («жаңарту қажет»);

node.warn («қайтарылады»+msg.filename); хабарды қайтару; } node.warn («жаңарту жоқ»); msg.statusCode = 304; msg.payload = ;

хабарды қайтару;

Коммутатор түйіні 304 «жаңартудың қажеті жоқ» хабарламасының жіберілуін немесе нақты жаңа екілік файлдың қайтарылып, құрылғыға қайта жіберілуін қамтамасыз етеді.

6 -қадам: Жаңартуды сұрау үшін эскизге код қосыңыз

Нұсқаның келесі нөмірін көбейткенде ол автоматты түрде жаңартылуы үшін эскизде келесі код болуы керек:

#қосу

#анықтаңыз TRUC_VERSION «0_4_99»

#анықтаңыз SPIFFS_VERSION «0_5_0»

// THIS_DEVICE компиляция уақытының әр түрлі анықтамаларына байланысты ертерек орнатылады // олар ақырында hw түрін анықтайды, мысалы: #DEFine THIS_DEVICE «d1_mini» const char * updateUrl = «https://192.168.1.4:1880/update/» THIS_DEVICE; // бұл менің таңқурай Pi сервері, 1880-NODE-RED әдепкі порты // /жаңарту-бұл серверді «тыңдау» үшін таңдаған URL, содан кейін құрылғы түрі … bool actualUpdate (bool sketch = false) {Жолдық хабарлама; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (жалған); if (эскиз) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Бұл - «бизнес» жасайтын жол}} else {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {

Serial.printf («UPDATE SUCCEEDED»);

шындықты қайтару; } басқа {if (ret == HTTP_UPDATE_FAILED) {

Serial.printf («Жаңарту сәтсіз аяқталды»);

}}} false қайтару; }

7 -қадам: Соңында, жаңартуды бастаңыз

Жүктеу кезінде немесе MQTT хабарламасына жауап ретінде (мен сияқты) келесі кодты іске қосыңыз:

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

// немесе SPIFFS үшін …

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

Құрылғы жаңартылады және серверден соңғы кодты қосады. Бұл мен үшін 33 құрылғыны қолмен жаңартудан әлдеқайда қарапайым!

Менің блогымда үйді автоматтандыру, IOT және ESP8266 бағдарламалау туралы көптеген пайдалы ақпаратты табуға болады

Ұсынылған: