WiFi OTA обновление Meshtastic
Удалённое обновление прошивки Meshtastic по WiFi без физического доступа к устройству. Работает только на ESP32 (не nRF52).
Принцип работы
ESP32 имеет две партиции для приложений: app0 (ota_0) и app1 (ota_1). Основная прошивка Meshtastic работает в app0. В app1 записывается OTA-загрузчик (firmware-ota-wifi), который умеет принимать новую прошивку по WiFi через протокол ArduinoOTA.
Процесс обновления:
- Meshtastic получает команду
--reboot-otaи перезагружается в партициюapp1 - OTA-загрузчик подключается к WiFi и ждёт прошивку
espota.pyотправляет новый firmware по сети- OTA-загрузчик записывает его в
app0и перезагружается обратно в Meshtastic
Требования
- ESP32 с WiFi (Heltec V4, T-Beam и др.)
- WiFi настроен и работает на ноде
- OTA-загрузчик записан в партицию
app1(ota_1) - Компьютер в той же WiFi-сети (или есть маршрут до ноды)
Подготовка OTA-загрузчика
Из GitHub-релиза (рекомендуемый, firmware ≥2.7.19)
Скачать mt-esp32s3-ota.bin со страницы релиза. Записать:
esptool --port /dev/cu.usbmodemXXXX write-flash 0x650000 mt-esp32s3-ota.binProject name должен быть MeshtasticOTA (без дефиса). Старый bleota-s3.bin (Meshtastic-OTA с дефисом) не поддерживает WiFi OTA.
Сборка из исходников (устаревший метод)
git clone https://github.com/meshtastic/firmware-ota-wifi.git
cd firmware-ota-wifi
pio run -e esp32s3Результат: .pio/build/esp32s3/firmware.bin (~614 КБ, вписывается в партицию ota_1 = 640 КБ).
Доступные окружения: esp32, esp32s3, esp32c3 — выбирать по чипу устройства.
Запись в партицию
Адрес ota_1 для Heltec V4 (16MB, BIGDB_16MB): 0x650000.
esptool --chip esp32s3 --port /dev/cu.usbmodemXXXX \
write-flash 0x650000 firmware-ota-wifi/.pio/build/esp32s3/firmware.binМожно записать одновременно с основной прошивкой:
esptool --chip esp32s3 --port /dev/cu.usbmodemXXXX write-flash \
0x00 firmware-heltec-v4-<VER>.bin \
0x650000 firmware-ota-wifi/.pio/build/esp32s3/firmware.bin \
0xc90000 littlefs-heltec-v4-<VER>.binНастройка WiFi для OTA
OTA-загрузчик берёт WiFi-credentials из NVS (namespace ota-wifi). Если Meshtastic уже настроен с WiFi — credentials могут быть доступны автоматически. Если нет, нужно прописать вручную через NVS перед использованием OTA.
Процесс обновления
Метод 1: meshtastic CLI (рекомендуемый, firmware ≥2.7.19)
Начиная с v2.7.19 Meshtastic CLI умеет делать OTA одной командой:
meshtastic --host <IP> --ota-update <path-to-firmware.bin>Использовать .bin (НЕ .factory.bin). CLI сам перезагружает ноду в OTA-режим, отправляет прошивку по TCP:3232, нода перезагружается обратно.
Требования:
- OTA-загрузчик на партиции
0x650000должен бытьmt-esp32s3-ota.binиз GitHub-релиза (project nameMeshtasticOTA) - НЕ использовать старый
bleota-s3.bin— у него project nameMeshtastic-OTA(с дефисом), WiFi OTA не поддерживается - Скачать правильный бинарь: на странице релиза →
mt-esp32s3-ota.bin(~620 КБ)
Метод 2: espota.py (ручной)
Шаг 1: Перезагрузка в OTA-режим
meshtastic --host <IP> --reboot-otaУстройство перезагрузится в партицию ota_1 (OTA-загрузчик). Экран покажет статус подключения к WiFi.
Шаг 2: Отправка прошивки
espota.py -i <IP> -f firmware-heltec-v4-<VER>.binespota.py входит в состав Arduino/PlatformIO. Обычно находится в ~/.platformio/packages/framework-arduinoespressif32/tools/espota.py.
Шаг 3: Автоматическая перезагрузка
После успешной записи устройство перезагрузится обратно в app0 с новой прошивкой.
Адреса партиций
Для Heltec V4 (ESP32-S3, 16MB flash, схема BIGDB_16MB):
| Партиция | Тип | Адрес | Размер |
|---|---|---|---|
| app0 (ota_0) | Meshtastic firmware | 0x10000 | 6.25 МБ |
| app1 (ota_1) | OTA WiFi loader | 0x650000 | 6.25 МБ |
| spiffs | LittleFS | 0xc90000 | 3.375 МБ |
Factory-образ (firmware.factory.bin) включает bootloader и пишется на 0x00, перекрывая app0.
Ограничения
- OTA обновляет только firmware в
app0. LittleFS и сам OTA-загрузчик не обновляются по WiFi. - WiFi и BLE на ESP32 взаимоисключающие. Пока нода подключена к WiFi, BLE (приложение на телефоне) недоступен.
- OTA-загрузчик должен знать WiFi-credentials. Если WiFi сеть сменилась — обновить credentials можно только физически.
- Размер firmware не должен превышать размер партиции app0 (6.25 МБ для 16MB flash).
- Если OTA-процесс прерван (потеря связи, питания) — устройство останется в OTA-загрузчике до следующей попытки или ручной перезагрузки.
Troubleshooting
- OTA-загрузчик не подключается к WiFi: проверить credentials в NVS, проверить что SSID и пароль корректны
- espota.py не находит устройство: убедиться что компьютер и нода в одной подсети, проверить firewall
- После OTA нода не загружается: прошивка повреждена или несовместима. Нужен физический доступ для erase-flash и перезаписи