Когда вы развертываете сотни устройств в рамках проекта Интернета вещей (IoT), возникает вопрос, как подключить их к сети заказчика и предоставить на устройство последнюю специальную прошивку.

Проблема в том, что вы не знаете, где и когда устройство будет впервые загружено. Устройство не будет знать параметры WiFi, и его прошивка может быть устаревшей. Вот здесь-то ColdBoot приходит на помощь.
ColdBoot (github.com/arkhipenko/EspColdBoot) – это предварительно скомпилированная прошивка для микроконтроллера ESP8266 или ESP32, способная быстро собирать от конечного пользователя через простую веб-форму параметры WiFi (SSID и пароль) , URL последней версии файла конфигурации и URL-адрес сервера обновлений OTA.
Основная задача ColdBoot – получить доступ к Wi-Fi и максимально быстро и легко установить последнюю версию прошивки для конкретного устройства. ColdBoot предоставляет пошаговые инструкции через окно терминала, подключенное к USB или последовательному порту (настройка 115200 бит/с).
Как использовать ColdBoot? В целом есть два варианта. Вариант 1: загрузка предварительно скомпилированных двоичных файлов непосредственно в чип. Вариант 2. скомпилируйте и загрузите предоставленный скетч. Дополнительно: отредактируйте файл data/config.json и загрузите его в SPIFFS с помощью инструмента загрузки.
ШАГ 1: ПРОЧИТАЙТЕ КОНФИГУРАЦИЮ ИЗ SPIFFS
ColdBoot пытается прочитать файл конфигурации из файловой системы SPIFFS устройства. Файл конфигурации должен называться config.json и находиться в корневой папке. Файл конфигурации представляет собой простой массив JSON и может определять следующие параметры:
- Title – заголовок веб-формы для сбора параметров от пользователя
- SSID – SSID сети Wi-Fi
- Password – пароль сети Wi-Fi
- Config – URL-адрес файла конфигурации, если параметры должны быть получены из Интернета
- OTA – URL-адрес HTTP-сервера обеспечения прошивки OTA
- Fields – количество полей для отображения в веб-форме
Все или подмножество полей могут быть определены здесь файл может повлиять на последующий процесс.
Пример: файл конфигурации содержит заголовок для веб-формы, URL-адрес для последней конфигурации и ограничивает количество полей веб-формы до 2 (SSID и пароль).
{
"Title" : "My Amazing IoT device",
"Config" : "http://ota.home.lan/esp/config/",
"fields" : "2"
}
ШАГ 2: ПОДКЛЮЧИТЕСЬ К WIFI НА ОСНОВЕ КОНФИГУРАЦИИ SPIFFS
Если чтение конфигурации из SPIFFS прошло успешно, есть вероятность, что там были указаны SSID и пароль, поэтому ColdBoot пытается подключиться к WiFi. Если SPIFFS не был доступен или файл orconfig.json был недоступен, шаг 2 пропускается.
ШАГ 3: ПРЕДОСТАВЛЕНИЕ КОНФИГУРАЦИИ ОТ ПОЛЬЗОВАТЕЛЯ
Если устройство смогло подключиться к сети Wi-Fi на шаге 2, этот шаг пропускается. На этом этапе устройство создает точку доступа WiFi и создает простую веб-форму для сбора параметров конфигурации от пользователя. AP SSID является ESP8266-идентификатор устройства или ESP32-идентификатор устройства. Пример: ESP8266-dac26e. Конечный пользователь должен подключиться к точке доступа и перейти к http://10.1.1.1.

Полная веб-форма будет выглядеть так.

Сокращенная веб-форма, основанная на примере файла config.json шага 1, будет выглядеть следующим образом.

Как только пользователь нажимает кнопку «Submit», устройство попытается подключиться к WiFi снова и снова, пока подключение не будет успешно. Устройство перезагрузится через 10 минут бездействия.
ШАГ 4: ПРОЧИТАЙТЕ КОНФИГУРАЦИЮ С HTTP-СЕРВЕРА
Если указан URL-адрес конфигурации, устройство попытается прочитать и проанализировать параметры конфигурации с HTTP-сервера. Здесь есть два варианта. Первый: вы можете указать путь к серверу, на котором хранятся определенные файлы конфигурации для каждого устройства. Второй: вы можете указать путь к файлу конфигурации напрямую (в этом случае несколько устройств могут читать один и тот же файл).
Если указан только путь к папке, ColdBoot добавит идентификатор устройства и версию, поэтому запрашиваемая конфигурация считается уникальной. Например, для идентификатора устройства ESP8266-dac26e URL будет выглядеть следующим образом: http://ota.home.lan/esp/config/coldboot-dac26e-1.0.0.json. (при условии, что http://ota.home.lan/esp/config/ является вашим сервером конфигурации).
Кроме того, вы можете указать прямой URL-адрес файла, например: http://ota.home.lan/esp/config/iotdevice.json. Если ColdBoot определяет, что действительный URL-адрес не предоставлен, этот шаг пропускается как необязательный.
ШАГ 5: ОБНОВЛЕНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ОТ OTA-СЕРВЕРА
На этом этапе ColdBoot предполагает наличие действительного URL-адреса для сервера обновлений OTA. Устройство попытается выполнить обновление прошивки OTA на основе предоставленного URL-адреса. Здесь есть два варианта. Первый: Вы можете указать путь к серверу, на котором хранятся определенные двоичные файлы для каждого устройства. Второй: вы можете указать путь к двоичному файлу напрямую (в этом случае несколько устройств могут обновляться на основе одного файла).
Если указан только путь к папке, ColdBoot добавит идентификатор устройства и версию, поэтому запрашиваемое OTA считается уникальным. Например, для идентификатора устройства ESP8266-dac26e URL будет выглядеть следующим образом: http://ota.home.lan/esp/bin/coldboot-dac26e-1.0.0.bin (при условии, что http://ota.home.lan/esp/bin/ является URL-адресом вашего OTA-сервера). Кроме того, вы можете указать прямой URL-адрес файла, например: http: //ota.home.lan/esp/bin/iotdevice.bin.
ШАГ 6: ПЕРЕЗАГРУЗКА
Если все идет хорошо, шаг 6 не должен быть достигнут, поскольку устройство перезагрузится в конце успешного обновления OTA на шаге 5. Однако в случае сбоя обновления OTA устройство подождет 10 секунд и перезагрузится.
Ниже представлен вывод терминала реального устройства, предоставляемого через ColdBoot. Обратите внимание, что идентификатор приложения изменится на «success» после выполнения прошивки по воздуху (ОТА).
ESP8266 ColdBoot v1.0.0
ESP8266 ID: ESP8266-dac26e
Full Application Version: coldboot-dac26e-1.0.0
---------------------------------------------
STEP 1:
> Reading configuration file from SPIFFS if present
> SUCCESS.
STEP 2:
> Configuration read from SPIFFS:
> Title : ColdBoot Initial Config
> SSID : <your wifi ssid>
> Password : <your wifi password>
> Config : http://ota.home.lan/esp/config/
> OTA : <path to OTA firmware>
> fields : 2
> Current count = 6
> Current size = 157
> Attempting WiFi connection ............................................................ WiFi connection timeout
> WiFi connection unsuccessful.
STEP 3:
> Provisioning configuration from the user
Navigate to http://10.1.1.1 and fill out the form
Provide WiFi SSID and password
as well as URLs for Configuration and/or OTA
> Bootstrapping SUCCESS.
> Configuration after Bootstrap:
> Title : ColdBoot Initial Config
> SSID : devices
> Password : ********
> Config : http://ota.home.lan/esp/config/
> OTA : <path to OTA firmware>
> fields : 2
> Current count = 6
> Current size = 142
> Attempting WiFi connection ............. WiFi connected
> IP address: 192.168.122.65
> SSID: devices
> mac: 98:F4:AB:DA:C2:6E
STEP 4:
> Checking if configuration should be read from an HTTP server
> Attempting to read config from this URL:
http://ota.home.lan/esp/config/coldboot-dac26e-1.0.0.json
> SUCCESS.
> Dictionary after HTTP config:
> Title : ColdBoot Initial Config
> SSID : devices
> Password : ********
> Config : http://ota.home.lan/esp/config/
> OTA : http://ota.home.lan/esp/bin/
> fields : 2
> Current count = 6
> Current size = 148
STEP 5:
> Checking for the OTA provisioning URL
> Attempting OTA Update from this URL:
http://ota.home.lan/esp/bin/coldboot-dac26e-1.0.0.bin
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x4010f000, len 3456, room 16
tail 0
chksum 0x84
csum 0x84
va5432625
@cp:0
ld
ColdBoot v1.0.0
ESP8266 ID: ESP8266-dac26e
AppVersion: success-dac26e-1.0.0
© digitrode.ru