ESP8266 OTA-обновления через Arduino IDE | По воздуху (Over the Air)

OTA (Over the Air) обновление — это процесс загрузки новой прошивки в модуль ESP8266 через Wi-Fi соединение, а не через последовательную связь. Этот тип функциональности чрезвычайно полезен в случае отсутствия физического доступа к модулю ESP.

Беспроводная загрузка нового скетча из Arduino IDE предназначена для следующих типичных сценариев:

  • во время разработки прошивки — как более быстрая альтернатива загрузке нового скетча через последовательный порт

  • для обновления прошивки нескольких ESP в вашей сети

Если вам нравится ESP и вы хотите делать больше проектов, вы можете прочитать электронную книгу Home Automation using ESP8266.

Давайте начнём!

ESP8266 OTA обновления

Шаг #1 — Загрузка BasicOTA.ino через последовательное соединение

Чтобы загрузить прошивку на ESP8266 по беспроводной сети, сначала необходимо загрузить скетч-пример BasicOTA.ino.

Убедитесь, что у вас установлена последняя версия Arduino IDE с сайта arduino.cc/en/Main/Software. Выполните следующие инструкции:

  1. Подключите ESP8266 к компьютеру с помощью USB-кабеля:

ESP8266 подключён к компьютеру
  1. Перейдите в Tools, чтобы выбрать модель вашей платы ESP. Также необходимо выбрать COM-порт вашего ESP

Выбор ESP8266 COM-порта
  1. Откройте пример BasicOTA.ino: File > Examples > Arduino OTA > BasicOTA.ino или скопируйте следующий скетч в Arduino IDE

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com
  Arduino IDE example: Examples > Arduino OTA > BasicOTA.ino
*********/

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

// Replace with your network credentials
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}

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

Просмотреть исходный код

Примечание: вам необходимо изменить скетч-пример, указав свой SSID и пароль.

  1. Нажмите кнопку «Upload» в Arduino IDE и дождитесь сообщения «Done uploading»

Arduino IDE загрузка скетча
  1. Откройте монитор последовательного порта Arduino IDE на скорости 115200 бод. Если вы ввели правильные сетевые данные, через несколько секунд вы должны увидеть IP-адрес вашего ESP:

Монитор последовательного порта Arduino IDE

Шаг #2 — Загрузка нового скетча OTA (по воздуху)

Теперь ваш ESP8266 готов принимать OTA-обновления прошивки. Вы можете отключить ESP8266 от компьютера и запитать его от любого источника питания (например, от повербанка). Если ваш ESP8266 имеет беспроводное подключение к роутеру, вы сможете загрузить новую прошивку.

ESP8266 подключён к повербанку
  1. Перейдите в Arduino IDE. Откройте вкладку Tools, выберите опцию Port, и вы должны увидеть что-то вроде: esp8266-xxxxxx по адресу your_esp_ip_address

Выбор ESP8266 WiFi порта
  1. Скопируйте следующий скетч в Arduino IDE и загрузите его на ESP8266. Этот скетч мигает встроенным светодиодом ESP12-E NodeMCU каждую секунду

/*********
  Rui Santos
  Complete project details at https://randomnerdtutorials.com
  Arduino IDE example: Examples > Arduino OTA > BasicOTA.ino
*********/

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

// Replace with your network credentials
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

const int ESP_BUILTIN_LED = 2;

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword((const char *)"123");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  pinMode(ESP_BUILTIN_LED, OUTPUT);
}

void loop() {
  ArduinoOTA.handle();
  digitalWrite(ESP_BUILTIN_LED, LOW);
  delay(1000);
  digitalWrite(ESP_BUILTIN_LED, HIGH);
  delay(1000);
}

Просмотреть исходный код

Примечание: вам необходимо изменить скетч-пример, указав свой SSID и пароль.

  1. Нажмите кнопку «Upload» в Arduino IDE и дождитесь сообщения «Done uploading»

  2. Встроенный светодиод вашего ESP должен мигать каждую секунду

Заключение

Надеюсь, это руководство было полезным. Теперь вы можете разместить ESP8266 в удалённом месте и обновлять его прошивку без необходимости физического доступа к устройству ESP.

У вас есть вопросы? Оставьте комментарий ниже.

Спасибо за чтение. Если вам понравилась эта статья, возможно, вам понравятся и следующие, поэтому, пожалуйста, поддержите меня, подписавшись на мой блог.