6.7 KiB
OTA — обновление прошивки по воздуху
Источник: Wiki LightHub (lazyhome.ru), страница «ota_обновление_прошивки_по_воздуху». Снапшот от 2026-10-02.
OTA
Контроллер имеет возможность обновлять свою прошивку "по воздуху" через http API Данная возможность доступна для следующих вариантов прошивки:
- due
- lighthub21
- esp32-wifi
- esp8266-wifi
- mega2560-optiboot
- m5stack
Прошивка должна быть скомпилирована с опцией OTA (предкомпилированные версии прошивок для указанных выше окружений уже скомпилированы с такой опцией)
Управление размером/опциями прошивки
Чтобы прошивка могла успешно обновиться, она должна занимать строго не более 50% flash памяти. Это не является проблемой для всех архитектур, исключая MEGA2560. Данный контроллер имеет очень скромные характеристики, поэтому приходится ужиматься. В пред-компилированной версии для этой архитектуры отключены почти все опциональные модули (DMX, Modbus, 1-wire). Но перекомпилировав проект, можно подключить нужные опции, пожертвовав чем-то еще (например, MDNS)
См файл build-flags/build_flags_mega2560-optiboot с опциями по умолчанию, которые можно переопределить в custom-build-flags/build_flags_mega2560-optiboot
Подробнее про опции компиляции в разделе опции компиляции
OptiBoot
Для того, чтобы Mega2560 имела возможность обновлять сама себе прошивку, необходимо заменить ее штатный кривой бутлоадер на optiboot. Кроме всего прочего, этот загрузчик занимает намного меньше места, чем штатный. Поэтому, если вы зачем-то до сих пор используете Mega - загрузчик лучше обновить (тем более, что у старых штатных загрузчиков не работает watchdog)
Проект Optiboot живет здесь: https://github.com/Optiboot/optiboot
Конкретно вариант для Mega2560 тут: https://github.com/MCUdude/MegaCore
Инструкция для загрузки там имеется. Шить проще всего "штатным" Arduino IDE, используя любую другую AVR Arduino в качестве программатора.
Как ее приспособить для этого, описано тут https://docs.arduino.cc/built-in-examples/arduino-isp/ArduinoISP/
Где что лежит
Компилированные образы прошивок доступны в папке compiled Там же размещены примеры скриптов, прошивающих образ (как по кабелю так и OTA)
Тулзы для этого выложены в папке compiled/tools
Пример прошивки по воздуху:
arduinoOTA -address 192.168.1.2 -port 80 -username arduino -password password -sketch firmware.bin -b -upload /sketch
В примере приведены username и password по-умолчанию Пароль необходимо сменить на свой
Задать пароль и сохранить его в NVRAM можно при помощи команды otapwd cli_интерфейс
для коммита прошивки от 20/05/24 и позднее, можно воспользоваться опциями компиляции DEFAULT_OTA_USERNAME и DEFAULT_OTA_PASSWORD
Примечание (2026-10-02): OTA в актуальных версиях прошивки переделана. Механизм управляется опцией компиляции OTA_ENABLE (флаг в build-flags/build_flags_* и код под #ifdef OTA_ENABLE в lighthub/main.cpp), обновление по воздуху для ESP-платформ осуществляется через библиотеку ArduinoOTA (форк https://github.com/anklimov/ArduinoOTA). Для ESP32/ESP8266 в platformio.ini задана таблица разделов board_build.partitions = min_spiffs.csv, выделенная под обновление прошивка больше не ограничена правилом «строго не более 50% flash» (комментарий в platformio.ini: «>50% space - ok for ESP due spare partition»). Правило 50% flash по-прежнему актуально для AVR-платформ (MEGA2560). Порт OTA по умолчанию 65280 (OTA_PORT, lighthub/options.h:28-29), для esp32-wifi задан -DOTA_PORT=80. В wiki не упомянута сборка esp32c3-wifi, также поддерживающая OTA.
Сверка с кодом (2026-10-02)
- Корректно: опция
OTA_ENABLEприсутствует в build-flags для due, lighthub21, esp32-wifi, esp8266-wifi, mega2560, mega2560-optiboot, mega2560slim, m5stack и esp32c3-wifi. - Корректно:
DEFAULT_OTA_USERNAME/DEFAULT_OTA_PASSWORD(по умолчаниюarduino/password) —lighthub/options.h:394-399; командаotapwdсохраняется пароль в NVRAM —cmdFunctionOTAPwd(main.cpp:1761),systemConfig::setOTAPwd(config.cpp:107). - Устарело: утверждение об обязательном ограничении «не более 50% flash» для всех архитектур — для ESP32/ESP8266 теперь используется отдельный раздел flash (
min_spiffs.csvвplatformio.ini, строки 142, 205, 282). - Уточнение: пример с утилитой
arduinoOTAсоответствуетupload_commandизplatformio.ini(строки 133, 212) — утилита по-прежнему используется в скриптах прошивки.