ESP8266 OTA-обновления через Arduino IDE | По воздуху (Over the Air)
OTA (Over the Air) обновление — это процесс загрузки новой прошивки в модуль ESP8266 через Wi-Fi соединение, а не через последовательную связь. Этот тип функциональности чрезвычайно полезен в случае отсутствия физического доступа к модулю ESP.
Беспроводная загрузка нового скетча из Arduino IDE предназначена для следующих типичных сценариев:
во время разработки прошивки — как более быстрая альтернатива загрузке нового скетча через последовательный порт
для обновления прошивки нескольких ESP в вашей сети
Если вам нравится ESP и вы хотите делать больше проектов, вы можете прочитать электронную книгу Home Automation using ESP8266.
Давайте начнём!
Шаг #1 — Загрузка BasicOTA.ino через последовательное соединение
Чтобы загрузить прошивку на ESP8266 по беспроводной сети, сначала необходимо загрузить скетч-пример BasicOTA.ino.
Убедитесь, что у вас установлена последняя версия Arduino IDE с сайта arduino.cc/en/Main/Software. Выполните следующие инструкции:
Подключите ESP8266 к компьютеру с помощью USB-кабеля:
Перейдите в Tools, чтобы выбрать модель вашей платы ESP. Также необходимо выбрать COM-порт вашего ESP
Откройте пример 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 и пароль.
Нажмите кнопку «Upload» в Arduino IDE и дождитесь сообщения «Done uploading»
Откройте монитор последовательного порта Arduino IDE на скорости 115200 бод. Если вы ввели правильные сетевые данные, через несколько секунд вы должны увидеть IP-адрес вашего ESP:
Шаг #2 — Загрузка нового скетча OTA (по воздуху)
Теперь ваш ESP8266 готов принимать OTA-обновления прошивки. Вы можете отключить ESP8266 от компьютера и запитать его от любого источника питания (например, от повербанка). Если ваш ESP8266 имеет беспроводное подключение к роутеру, вы сможете загрузить новую прошивку.
Перейдите в Arduino IDE. Откройте вкладку Tools, выберите опцию Port, и вы должны увидеть что-то вроде: esp8266-xxxxxx по адресу your_esp_ip_address
Скопируйте следующий скетч в 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 и пароль.
Нажмите кнопку «Upload» в Arduino IDE и дождитесь сообщения «Done uploading»
Встроенный светодиод вашего ESP должен мигать каждую секунду
Заключение
Надеюсь, это руководство было полезным. Теперь вы можете разместить ESP8266 в удалённом месте и обновлять его прошивку без необходимости физического доступа к устройству ESP.
У вас есть вопросы? Оставьте комментарий ниже.
Спасибо за чтение. Если вам понравилась эта статья, возможно, вам понравятся и следующие, поэтому, пожалуйста, поддержите меня, подписавшись на мой блог.