Для электронщиков и радиолюбителей

Как загрузить прошивку в ESP32 «по воздуху» (OTA)

Как загрузить прошивкув ESP32 «по воздуху» (OTA)

ESP32 – это микроконтроллер, способный выполнять обновления по беспроводной сети (over-the-air или OTA). OTA-обновления позволяют обновлять прошивку вашего ESP32 по беспроводной сети без необходимости физического подключения его к компьютеру.

Обновления по беспроводной сети (OTA) – это процесс обновления встроенного программного обеспечения устройства по беспроводной сети без необходимости физического подключения его к компьютеру. OTA-обновления полезны, поскольку позволяют обновлять устройство удаленно, а также могут сэкономить время и усилия, устраняя необходимость физического доступа к устройству для выполнения обновления. OTA-обновления обычно используются для устройств, которые установлены в труднодоступных местах или требуют частого обновления, например устройств Интернета вещей (IoT). Для выполнения OTA-обновлений вам необходимо настроить веб-сервер, который обслуживает файл обновления встроенного ПО, и настроить ESP32 для подключения к этому серверу и загрузки файла обновления. Затем вы можете использовать библиотеку ArduinoOTA для выполнения обновления. Рассмотрим пример кода, демонстрирующий, как настроить OTA-обновления на ESP32 с использованием библиотеки ArduinoOTA.

Во-первых, вам нужно будет включить библиотеки ArduinoOTA и WiFi в верхнюю часть вашего скетча:

#include <ArduinoOTA.h>
#include <WiFi.h>

Затем настройте соединение Wi-Fi, вызвав функцию WiFi.begin() и передав имя и пароль вашей сети Wi-Fi:

const char* ssid = "your_wifi_name";
const char* password = "your_wifi_password";
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}

Инициализируйте библиотеку ArduinoOTA, вызвав функцию ArduinoOTA.begin(). Установите имя хоста и пароль для OTA-обновления с помощью функций ArduinoOTA.setHostname() и ArduinoOTA.setPassword():

ArduinoOTA.setHostname("esp32-ota");
ArduinoOTA.setPassword("password");

Настройте функцию для обработки входящих запросов на обновление OTA с помощью функции ArduinoOTA.onStart():

void handleOTAStart() {
  Serial.println("OTA update starting...");
}
ArduinoOTA.onStart(handleOTAStart);

Настройте функцию для обработки хода обновления OTA с помощью функции ArduinoOTA.onProgress():

void handleOTAProgress(unsigned int progress, unsigned int total) {
  Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
}
ArduinoOTA.onProgress(handleOTAProgress);

Настройте функцию для обработки завершения OTA-обновления с помощью функции ArduinoOTA.onEnd():

void handleOTAEnd() {
  Serial.println("\nOTA update complete!");
  ESP.restart();
}
ArduinoOTA.onEnd(handleOTAEnd);

Наконец, вызовите функцию ArduinoOTA.handle() в основном цикле вашей программы, чтобы прослушивать и обрабатывать запросы на обновление OTA:

void loop() {
  ArduinoOTA.handle();
}

Вот и все! Выполнив эти шаги, вы теперь сможете выполнять OTA-обновления на своем ESP32. Не забудьте тщательно протестировать OTA-обновления перед их развертыванием на производственных устройствах. А весь код ниже:

#include <ArduinoOTA.h>
#include <WiFi.h>
const char* ssid = "your_wifi_name";
const char* password = "your_wifi_password";
void handleOTAStart() {
  Serial.println("OTA update starting...");
}
void handleOTAProgress(unsigned int progress, unsigned int total) {
  Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
}
void handleOTAEnd() {
  Serial.println("\nOTA update complete!");
  ESP.restart();
}
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  ArduinoOTA.begin();
  ArduinoOTA.setHostname("esp32-ota");
  ArduinoOTA.setPassword("password");
  ArduinoOTA.onStart(handleOTAStart);
  ArduinoOTA.onProgress(handleOTAProgress);
  ArduinoOTA.onEnd(handleOTAEnd);
}
void loop() {
  ArduinoOTA.handle();
  // Свой код в бесконечном цикле можно писать здесь
}

Резюмируя, в этом коде ESP32 подключается к указанной сети Wi-Fi, а затем инициализирует библиотеку ArduinoOTA. Он устанавливает имя хоста и пароль для OTA-обновления и регистрирует обработчики событий для начала, хода и окончания обновления. Наконец, функция ArduinoOTA.handle() вызывается в основном цикле программы для прослушивания и обработки запросов на обновление OTA.