Съдържание:
- Стъпка 1: Какво ви трябва
- Стъпка 2: Създайте хранилище за съхранение на двоични фърмуери
- Стъпка 3: Създайте двоични файлове
- Стъпка 4: Създайте потока на сървъра
- Стъпка 5: Добавете логиката на сървъра
- Стъпка 6: Добавете код към скицата, за да поискате актуализация
- Стъпка 7: Накрая стартирайте актуализацията
Видео: Настройте сървър за автоматично актуализиране на ESP8266: 7 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:55
Сега много хора използват 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: Какво ви трябва
- Arduino IDE
- ESP8266 ядро
- Всяка платка за разработка на ESP8266 с 1M или повече флаш RAM
- Уеб сървър (дори скромният малинов Pi ще свърши работа - това е, което използвам)
- (по избор) инструмент mkspiffs, ако искате да актуализирате автоматично изображение на файлова система SPIFFS
Стъпка 2: Създайте хранилище за съхранение на двоични фърмуери
На моя сървър имам папка, наречена/home/pi/trucFirmware, която съхранява различните фърмуери на устройства и SPIFFS изображения
Поддържам отделен двоичен файл за всеки тип хардуер (от един изходен файл с няколко #дефиниции) и когато нова версия е готова, използвам командата от менюто за скица/експортиране на компилирана двоична информация на Arduino за всяко целево устройство. Обърнете внимание, че дори въпреки че има 5 различни типа хардуер, има само две SPIFFS двоични файлове: 1M и 4M версия - конструирана с инструмента mkspiffs - тъй като всички устройства имат 1M или 4M флаш.
Стъпка 3: Създайте двоични файлове
Използвайки скицата на менюто на Arduino IDE/Експортиране на компилиран двоичен файл, създайте фърмуера, който ще бъде качен на устройството, когато го поиска от сървъра за актуализация.
Ако имате нужда от двоичен файл SPIFFS, ще трябва да инсталирате инструмента mkspiffs.
След като го имате, изграждането на двоичен файл SPIFFS е лесно. Имам едноредов партиден файл за 1M версията, който приема номера на версията като параметър (%1)
mkspiffs -c данни/ spiffs_%1_1M.bin
и още една за 4M версията:
mkspiffs -p 256 -b 8192 -s 0x0FB000 -c данни/ spiffs_%1_4M.bin
След това копирам всички компилирани двоични файлове и SPIFFS.binary файлове в хранилището
Стъпка 4: Създайте потока на сървъра
Използвам NODE-RED, но простата логика ще бъде същата на всяка сървърна технология / език.
а) Определете URL адрес, който да слуша заявката ESP8266httpUpdate. Моят 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: Добавете логиката на сървъра
Първият възел в потока „слуша“за http заявка за URL адрес https://192.168.1.4:1880/update с добавен тип устройство. Той предава това на функционален възел "Конструиране на път за търсене", който има следния код на javascript:
msg.type = msg.req.params.type; var h = msg.req.headers; msg.version = h ["x-esp8266-версия"];
msg.mode = h ["x-esp8266-mode"];
if (msg.mode == "скица") {msg.payload = "/home/pi/trucFirmware/*. ino."+msg.type+". bin"; } else {var sz = h ['x-esp8266-size-chip']; msg.payload = "/home/pi/trucFirmware/spiffs _*_"+(sz/1048576)+"M.bin"; } return msg;
Това просто задава подходящия път с заместващ знак за функцията sys, която следва, която просто се изпълнява
ls - r
След това изходът се подава към функционалния възел "Сравняване на версии":
var f = msg.payload.split ("\ n") [0]; msg.filename = f;
if (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.replace (/_ / 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"
#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 портът по подразбиране // /update е URL адресът, който избрах за сървъра да "слуша", последван от типа на устройството … bool actualUpdate (bool sketch = false) {String msg; 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");
връщане true; } иначе {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf ("Неуспешно надстройване");
}}} return false; }
Стъпка 7: Накрая стартирайте актуализацията
По време на зареждане или може би в отговор на съобщение MQTT (както правя аз) изпълнете следния код:
if (_actualUpdate (true)) ESP.restart ();
// или за SPIFFS …
if (_actualUpdate (false)) ESP.restart ();
Устройството ще се актуализира и ще рестартира най -новия код от сървъра. За мен е много по -просто, отколкото ръчно актуализиране на 33 устройства!
Много повече полезна информация за домашната автоматизация, IOT и програмирането на ESP8266 можете да намерите в Моят блог
Препоръчано:
(АКТУАЛИЗИРАНЕ - ИМА КРЕМЕН ПРОБЛЕМ) USB ИГРЕН КОНТРОЛЕР ЗА ПК: 10 стъпки (със снимки)
(АКТУАЛИЗИРАНЕ - ИМА КРЕМЕН ПРОБЛЕМ) USB ИГРЕН КОНТРОЛЕР ЗА ПК: КОМПЛЕКТЪР ЗА ИГРИ ЗА ВСЯКА ИГРА (ПОЧТОВО)
Програма MicroPython: Актуализиране на данните за коронавирусната болест (COVID-19) в реално време: 10 стъпки (със снимки)
Програма MicroPython: Актуализиране на данните за коронавирусната болест (COVID-19) в реално време: През последните няколко седмици броят на потвърдените случаи на коронавирусна болест (COVID 19) в световен мащаб надхвърли 100 000, а Световната здравна организация (СЗО) обяви новата епидемия от коронавирус пневмония ще бъде глобална пандемия. Аз бях много
WiFi Автоматично захранване на растенията с резервоар - Настройка за отглеждане на закрито/на открито - Водни растения автоматично с дистанционно наблюдение: 21 стъпки
WiFi Автоматично захранване на растенията с резервоар - Настройка за отглеждане на закрито/на открито - Водни растения автоматично с дистанционно наблюдение: В този урок ще демонстрираме как да настроим персонализирана система за захранване на закрито/външно растение, която автоматично полива растенията и може да се наблюдава дистанционно с помощта на платформата Adosia
Актуализиране на данни на Tyverialarm IIOT 4.0: 8 стъпки
Dataopsamling Af Tyverialarm IIOT 4.0: Dette projekt и faget IIOT е видян за видеоклипове с entyverialarm, като е в хардуер за Arduino и др. Der er i dette projekt blevet фокусира върху данните, които са закъснели от минималната тивериална аларма, samt at lave et brugerinterface. Д
Настройте своя собствен уеб сървър!: 12 стъпки
Настройте своя собствен уеб сървър !: Искали ли сте някога да имате място, където да съхранявате файловете си и да имате достъп до тях навсякъде, където имате интернет връзка? Кажете, че искате да имате музикалната си библиотека на разположение в случай, че искате да дадете песен на някой от приятелите си, или може би искате