Мазмуну:
- 1 -кадам: Сизге эмне керек
- 2 -кадам: Экилик программаларды кармоо үчүн репозиторийди түзүңүз
- 3 -кадам: бинардык файлдарды түзүү
- 4 -кадам: Server агымын түзүү
- 5 -кадам: Server Logic кошуу
- 6 -кадам: Жаңыртууну сураныш үчүн эскизге кодду кошуңуз
- 7 -кадам: Акырында, Жаңыртууну баштаңыз
Video: ESP8266 автоматтык жаңыртуу серверин орнотуу: 7 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:43
Азыр көптөгөн адамдар 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 -кадам: Сизге эмне керек
- Arduino IDE
- ESP8266 өзөгү
- 1M же андан көп флэш -RAM менен каалаган ESP8266 dev board
- Веб -сервер (ал тургай, момун малина Пи кылат - Мен колдонгон нерсе)
- (милдеттүү эмес) 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 программалоо боюнча дагы көптөгөн пайдалуу маалыматтарды таба аласыз
Сунушталууда:
De La Carte TagTagTag орнотуу Nabaztag төгүү / TagTagTag тактасын өз набазтагыңызга орнотуу: 15 кадам
De La Carte TagTagTag орнотуу Nabaztag төгүү / TagTagTag тактасын өз набазтагыңызга орнотуу: (англисче версиясын төмөндөн караңыз) La carte TagTagTag a eté créée en 2018 lors de Maker Faire Paris pour faire renaitre les Nabaztag et les Nabaztag: tag. 2019 -жылдын финансылык каржылоосунун катышуучулары 2019 -жылдын январь -июнь айларында
ESP8266 веб-серверин колдонуу менен 7-сегменттеги LED дисплейди көзөмөлдөө: 8 кадам (сүрөттөр менен)
ESP8266 веб-серверин колдонуу менен 7-сегменттеги LED дисплейди көзөмөлдөө: Менин проектимде Nodemcu ESP8266 бар, ал html формасын колдонуп http сервери аркылуу 7 сегменттүү дисплейди көзөмөлдөйт
Саат радиосун жаңыртуу - Bluetooth бирдигин орнотуу: 6 кадам
Саат радиосунун модернизациясы-Bluetooth бирдигин орнотуу: Бул өзгөртүүнүн эки бөлүгү бар, бири-учурдагы Радио Сааты, экинчиси " Bluetooth Hands-Free MP3 декодер тактасы ZTV-M01BT Shell & Алыстан башкаруу " кошумча аудио күчөткүчкө муктаж болот. Саат
Filezilla аркылуу FTP серверин орнотуу!: 7 кадам
Filezilla аркылуу FTP Server орнотуу !: 1. FTP -сервер деген эмне? 2. Эмне үчүн мен аны жасагым келет? 1. Файлдарды өткөрүп берүү протоколу (FTP) - бул бир компьютерден экинчисине Интернет аркылуу маалымат берүү үчүн колдонулган тармактык протокол. FTP бул мурунку файлды өткөрүп берүү протоколу
Үй веб -сайтын/серверин кантип баштоо керек: 5 кадам
Үй веб -сайтын/Серверди кантип баштоо керек: Мен муну дем алыш күндөрү кылдым, анткени зеригип кеттим, ырахат алыңыз