Оглавление:
- Шаг 1. Что вам нужно
- Шаг 2: Создайте репозиторий для хранения двоичных прошивок
- Шаг 3: Создайте двоичные файлы
- Шаг 4: Создайте поток сервера
- Шаг 5: Добавьте серверную логику
- Шаг 6. Добавьте код в эскиз, чтобы запросить обновление
- Шаг 7. Наконец, запустите обновление
Видео: Настройка сервера автоматического обновления ESP8266: 7 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:54
Многие люди сейчас используют 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. Что вам нужно
- IDE Arduino
- ESP8266 ядро
- Любая плата разработчика ESP8266 с 1 МБ или более флэш-ОЗУ.
- Веб-сервер (подойдет даже скромный Raspberry Pi - это то, что я использую)
- (необязательно) инструмент mkspiffs, если вы хотите автоматически обновить образ файловой системы SPIFFS
Шаг 2: Создайте репозиторий для хранения двоичных прошивок
На моем сервере есть папка с именем / home / pi / trucFirmware, в которой хранятся различные прошивки устройств и образы SPIFFS.
Я поддерживаю отдельный двоичный файл для каждого типа оборудования (из одного исходного файла с несколькими #defines), и когда новый выпуск будет готов, я использую команду меню Arduino IDE «Эскиз / Экспорт скомпилированного двоичного файла» для каждого целевого устройства. Обратите внимание, что даже Хотя существует 5 различных типов оборудования, есть только два двоичных файла SPIFFS: версия 1M и версия 4M, созданная с помощью инструмента mkspiffs, поскольку все устройства имеют либо 1M, либо 4M flash.
Шаг 3: Создайте двоичные файлы
Используя параметр меню Arduino IDE sketch / Export Compiled Binary, создайте прошивку, которая будет загружена на устройство, когда оно запросит ее с сервера обновлений.
Если вам нужен двоичный файл 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 в репозиторий.
Шаг 4: Создайте поток сервера
Я использую NODE-RED, но простая логика будет одинаковой для любой серверной технологии / языка.
a) Определите 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"];
если (msg.mode == "эскиз") {msg.payload = "/ home / pi / trucFirmware / *. ino." + msg.type + ". bin"; } else {var sz = h ['размер-микросхемы x-esp8266']; 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 == "sketch") {
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); return msg; } node.warn («без обновления»); msg.statusCode = 304; msg.payload = ;
return msg;
Затем коммутационный узел гарантирует, что либо отправлено сообщение 304 «обновление не требуется», либо фактический новый двоичный файл будет возвращен и отправлен обратно на устройство.
Шаг 6. Добавьте код в эскиз, чтобы запросить обновление
В скетч должен быть включен следующий код, чтобы он автоматически обновлялся при следующем увеличении номера версии:
#включают
#define TRUC_VERSION "0_4_99"
#define SPIFFS_VERSION "0_5_0"
// THIS_DEVICE устанавливается раньше в зависимости от различных // определений времени компиляции, которые в конечном итоге определяют тип hw, например #define ЭТО_УСТРОЙСТВО "d1_mini" const char * updateUrl = "https://192.168.1.4:1880/update/" ЭТО_УСТРОЙСТВО; // это мой сервер Raspberry Pi, 1880 - порт NODE-RED по умолчанию // / update - это URL-адрес, который я выбрал для сервера, который будет «слушать», за которым следует тип устройства… bool actualUpdate (bool sketch = false) {String msg; t_httpUpdate_return ret; ESPhttpUpdate.rebootOnUpdate (ложь); если (эскиз) {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 («ОБНОВЛЕНИЕ УСПЕШНО»);
вернуть истину; } else {if (ret == HTTP_UPDATE_FAILED) {
Serial.printf («Ошибка обновления»);
}}} return false; }
Шаг 7. Наконец, запустите обновление
Во время загрузки или, возможно, в ответ на сообщение MQTT (как и я) запустите следующий код:
если (_actualUpdate (true)) ESP.restart ();
// или для SPIFFS…
если (_actualUpdate (false)) ESP.restart ();
Устройство обновится и перезагрузится, запустив последний код с сервера. Для меня это намного проще, чем вручную обновить 33 устройства!
Еще больше полезной информации о домашней автоматизации, IOT и программировании ESP8266 можно найти в моем блоге.
Рекомендуемые:
Средство обновления статуса Slack с ESP8266: 5 шагов (с изображениями)
Средство обновления статуса Slack с ESP8266: этот проект помогает сделать ваш день немного проще, если вы являетесь удаленным сотрудником, использующим Slack. Я покажу вам, как собрать его с помощью платы Wi-Fi ESP8266. Не пропустите видео с обзором. Независимо от того, используете ли вы Slack впервые или только что
Ксеноновая плазменная лампа + ОБНОВЛЕНИЯ !: 6 шагов
Ксеноновая плазменная лампа + ОБНОВЛЕНИЯ! Сначала я хочу начать с … * ВСЕГДА ПРОЧИТАЙТЕ ВСЮ ИНСТРУКЦИЮ ПЕРЕД ИЗГОТОВЛЕНИЕМ ИЛИ ВЫ МОЖЕТЕ Сожалеть об этом! * Это руководство включает в себя высокое напряжение и острые инструменты, поэтому всегда будьте осторожны *. не могут сделать это безопасным способом
Настройка Raspberry Pi для прокси-сервера: 6 шагов
Настройка Raspberry Pi для прокси-сервера: если вы хотите, чтобы ваш Raspberry Pi имел доступ к Интернету через прокси-сервер, вам необходимо настроить Pi для использования сервера, прежде чем вы сможете получить доступ к Интернету. Есть два метода настройки прокси-сервера. Но, однако, в первом м
Как решить проблему обновления контроллера Clone SimpleBGC: 4 шага
Как решить проблему обновления контроллера клонирования SimpleBGC: Здравствуйте. Недавно я работал над контроллером подвеса SimpleBGC для своего проекта дрона. Я успешно подключил и настроил. Он работал отлично. После этого я хотел обновить его прошивку с v2.2 до v2.4. Итак, после того, как я модернизировал стабилизатор, он
Настройка FTP-сервера с помощью Filezilla !: 7 шагов
Настройка FTP-сервера с помощью Filezilla !: 1. Что такое FTP-сервер? 2. Зачем мне это делать? 1. Протокол передачи файлов (FTP) - это сетевой протокол, используемый для передачи данных с одного компьютера на другой через сеть, например Интернет. FTP - это протокол передачи файлов, например