Категории

SOTA FOTA для ESP32: обновление прошивки по воздуху без кабеля

2025-10-24 13:27:08 | Статья из категории: IOT умный дом

SOTA FOTA для ESP32: обновление прошивки по воздуху без кабеля

При разработке распределённых IoT-устройств — будь то метеостанция, система автополива или сеть датчиков в лесу — рано или поздно возникает задача: «Как обновить прошивку, не выезжая на место?»

Ответ — FOTA (Firmware Over The Air) или SOTA (Software Over the Air). Это механизм, позволяющий ESP32 скачивать новую прошивку по Wi-Fi и перезапускаться с ней. Особенно полезно, если устройство:

Например, чтобы подстроить параметры автополива на даче, не нужно везти контроллер в Москву — достаточно, чтобы устройство имело доступ к локальной сети с сервером обновлений.

Как это работает?

  1. На веб-сервере (даже на Raspberry Pi) размещаются два файла:
    • firmware.bin — скомпилированная прошивка.
    • version.txt — текстовый файл с номером версии (например, 1.3).
  2. ESP32 при старте (или по таймеру) проверяет version.txt.
  3. Если версия на сервере новее — скачивает firmware.bin и прошивает себя.
  4. При успешной прошивке — перезагружается. При ошибке — остаётся на старой версии.

Пример кода для ESP32 (Arduino Core)

Подключите библиотеки:

#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() {
  // Основная работа устройства
}

Требования к серверу

Достаточно простого веб-сервера с двумя файлами:

Сервер может быть:

Важно

Заключение

OTA превращает «умное устройство» в эволюционирующее. Вы больше не привязаны к USB-кабелю и физическому доступу. Особенно ценно для систем, развёрнутых в полевых условиях — будь то дача, лес или промышленный объект.

А теперь — ни одного выезда ради перепрошивки! 😉

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA