При разработке распределённых IoT-устройств — будь то метеостанция, система автополива или сеть датчиков в лесу — рано или поздно возникает задача: «Как обновить прошивку, не выезжая на место?»
Ответ — FOTA (Firmware Over The Air) или SOTA (Software Over the Air). Это механизм, позволяющий ESP32 скачивать новую прошивку по Wi-Fi и перезапускаться с ней. Особенно полезно, если устройство:
Например, чтобы подстроить параметры автополива на даче, не нужно везти контроллер в Москву — достаточно, чтобы устройство имело доступ к локальной сети с сервером обновлений.
firmware.bin — скомпилированная прошивка.version.txt — текстовый файл с номером версии (например, 1.3).version.txt.firmware.bin и прошивает себя.Подключите библиотеки:
#include <WiFi.h> #include <HTTPClient.h> #include <Update.h>
Константы (укажите свои):
#define FW_VERSION "1.0" const char* ssid = "YOUR_WIFI_SSID"; const char* password = "YOUR_WIFI_PASS"; const char* versionURL = "http://iot-hub.local/firmware/version.txt"; const char* firmwareURL = "http://iot-hub.local/firmware/firmware.bin";
Функция проверки обновления:
bool checkForUpdate() {
HTTPClient http;
http.begin(versionURL);
int code = http.GET();
if (code == 200) {
String remoteVer = http.getString().substring(0, 3); // берём "1.3"
http.end();
return remoteVer.toFloat() > FW_VERSION.toFloat();
}
http.end();
return false;
}
Функция OTA-обновления:
void performOTA() {
WiFiClient client;
t_httpUpdate_return ret = httpUpdate.update(client, firmwareURL);
switch (ret) {
case HTTP_UPDATE_OK:
Serial.println("✅ Обновление успешно. Перезагрузка...");
ESP.restart();
break;
case HTTP_UPDATE_NO_UPDATES:
Serial.println("ℹ️ Нет обновлений.");
break;
default:
Serial.printf("❌ Ошибка OTA: %d\n", ret);
break;
}
}
Основной цикл (упрощённо):
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
if (checkForUpdate()) {
Serial.println("📡 Найдена новая версия — запуск OTA...");
performOTA();
} else {
Serial.println("🚀 Запуск основной логики...");
// Ваша логика: чтение датчиков, управление насосом и т.п.
}
}
void loop() {
// Основная работа устройства
}
Достаточно простого веб-сервера с двумя файлами:
/firmware/version.txt → содержит только: 1.3/firmware/firmware.bin → бинарный файл из Arduino IDE (экспорт через «Sketch → Export compiled Binary»)Сервер может быть:
python3 -m http.server 80).OTA превращает «умное устройство» в эволюционирующее. Вы больше не привязаны к USB-кабелю и физическому доступу. Особенно ценно для систем, развёрнутых в полевых условиях — будь то дача, лес или промышленный объект.
А теперь — ни одного выезда ради перепрошивки! 😉
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!