Мазмуну:

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

Video: ESP8266 автоматтык жаңыртуу серверин орнотуу: 7 кадам

Video: ESP8266 автоматтык жаңыртуу серверин орнотуу: 7 кадам
Video: Windows'до Google Chrome'дун БАРДЫК жаңыртууларын кантип толугу менен бөгөттөө. 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), бирок аны иштетүү үчүн өз сервериңизди кантип орнотууну билишиңиз керек.

Бул Instructable сизге NODE-RED серверин кантип колдонууну көрсөтөт, бирок ошол эле логика сиз тандаган сервер технологиясына тиешелүү, мис. Apache + PHP ж

1 -кадам: Сизге эмне керек

  1. Arduino IDE
  2. ESP8266 өзөгү
  3. 1M же андан көп флэш -RAM менен каалаган ESP8266 dev board
  4. Веб -сервер (ал тургай, момун малина Пи кылат - Мен колдонгон нерсе)
  5. (милдеттүү эмес) mkspiffs куралы, эгер сиз SPIFFS файл тутумунун сүрөтүн автоматтык түрдө жаңырткыңыз келсе

2 -кадам: Экилик программаларды кармоо үчүн репозиторийди түзүңүз

Экилик программаларды кармоо үчүн репозиторийди түзүңүз
Экилик программаларды кармоо үчүн репозиторийди түзүңүз

Менин серверимде/home/pi/trucFirmware деп аталган папка бар, ал ар кандай түзмөктүн программаларын жана SPIFFS сүрөттөрүн камтыйт

Мен ар бир жабдыктын түрү үчүн өзүнчө бинардык файлды сактайм (бир нече #аныктамасы бар бир булак файлынан) жана жаңы релиз даяр болгондо, мен ар бир максаттуу түзмөк үчүн Arduino IDE "эскиз/экспорттук экилик" меню командасын колдоном. 5 түрдүү жабдык түрү бар болсо да, эки гана SPIFFS экилик файлдары бар: 1M жана 4M версиясы - mkspiffs куралы менен курулган - анткени бардык түзмөктөрдө 1M же 4M флеш бар.

3 -кадам: бинардык файлдарды түзүү

Arduino IDE менюсу боюнча эскиз/Экспорттук Экилик Экспортун колдонуп, жаңыртуу серверинен аны сураганда түзмөккө жүктөлө турган камтылган программаны түзүңүз.

Эгер сизге SPIFFS экилик керек болсо, mkspiffs куралын орнотушуңуз керек болот.

Сизде болгондон кийин, SPIFFS бинардык курулушу жөнөкөй. Менде 1М версиясы үчүн версиянын номерин параметр катары алган бир саптуу партиялык файлым бар (%1)

mkspiffs -c маалыматтар/ spiffs_%1_1M.bin

жана башка 4M версиясы үчүн:

mkspiffs -p 256 -b 8192 -s 0x0FB000 -c маалыматтар/ spiffs_%1_4M.bin

Мен андан кийин бардык түзүлгөн экилик файлдарды жана SPIFFS.binary файлдарын репозиторийге көчүрөм

4 -кадам: Server агымын түзүү

Сервер агымын түзүү
Сервер агымын түзүү

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

а) ESP8266httpUpdate өтүнүчүн уга турган url аныктаңыз. Менин raspberryPi serevr 192.168.1.4 жана 1880 портунда угулат /жаңыртылган жабдык түрү менен. Ошентип, эгер мен Wemos D1 Mini үчүн бинардык сурамакчы болсом, url төмөнкүдөй аяктайт:

192.168.1.4:1880/update/d1_mini

б) төмөнкү логиканы иштетүү үчүн код түзүү:

ESP8266: "Саламатсызбы, мен a.b.c программалык камсыздоосунун версиясын иштетип жатам, сизде жаңы версия барбы?" Сервер: "Мени көрөйүн … аа ооба, менде a.b.d - мында келди …"

Эгер жаңыраак версия бар болсо, сервер аны жөн гана http жообуна бинардык маалыматтардын жүктөлүшү катары жөнөтөт. ESP8266httpUpdate классы экилик файлды эстутумга көчүрүүнүн татаал бөлүгүн аткарат, жаңы кодду иштетүү үчүн түзмөктү кайра жүктөөчүгө караганда (эгер талап кылынса) микрофайманын жүктөөчү дарегин жаңы кодго алмаштырат.

Эгерде башка версия жок болсо, анда ал http 304 катасы менен жооп берет, анда эффективдүү түрдө: "Менде эч нерсе жок" деп айтылат жана сиздин код кадимкидей эле иштей берет.

5 -кадам: Server Logic кошуу

Агымдагы биринчи түйүн 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 == "sketch") {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"; } msg кайтаруу;

Бул жөн эле иштеп жаткан sys функциясы үчүн joker белгиси менен тиешелүү жолду орнотот

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", ""); } башка {f = f.replace ("/home/pi/trucFirmware/spiffs_", ""); f = f.replace (/_ / dM \.bin/, ""); }

if (msg.version <f) {

node.warn ("жогорулатуу талап кылынат");

node.warn ("кайтат"+msg.filename); msg кайтаруу; } node.warn ("жаңыртуу жок"); msg.statusCode = 304; msg.payload = ;

msg кайтаруу;

Коммутатор түйүнү 304 "эч кандай жаңыртуунун кереги жок" билдирүүсүнүн жөнөтүлүшүн же иш жүзүндөгү жаңы бинардык нерсенин кайтарылып, кайра түзмөккө жөнөтүлүшүн камсыз кылат.

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

Эскизде кийинки коддун версиянын номерин көбөйткөндө автоматтык түрдө жаңыртылышы үчүн камтылган болушу керек:

#кошуу

#аныктоо TRUC_VERSION "0_4_99"

#define 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) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (жалган); эгер (эскиз) {ret = ESPhttpUpdate.update (updateUrl, TRUC_VERSION); // **************** Бул "бизнес кылган"} сап}} башка {ret = ESPhttpUpdate.updateSpiffs (updateUrl, SPIFFS_VERSION); } if (ret! = HTTP_UPDATE_NO_UPDATES) {if (ret == HTTP_UPDATE_OK) {

Serial.printf ("UPDATE SUCCEEDED");

чындыкка кайтуу; } башка {эгер (ret == HTTP_UPDATE_FAILED) {

Serial.printf ("Жаңыртуу ишке ашкан жок");

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

7 -кадам: Акырында, Жаңыртууну баштаңыз

Жүктөө учурунда, же MQTT билдирүүсүнө жооп катары (мен сыяктуу) төмөнкү кодду иштетиңиз:

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

// же SPIFFS үчүн…

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

Түзмөк өзүн жаңыртат жана серверден акыркы кодду иштетип кайра жүктөйт. Мен үчүн 33 түзмөктү кол менен жаңыртууга караганда бир топ жөнөкөй!

Менин блогумда Home Automation, IOT жана ESP8266 программалоо боюнча дагы көптөгөн пайдалуу маалыматтарды таба аласыз

Сунушталууда: