ESP8266:Примеры/Прошивка ESP8266 методом OTA
Прошивка ESP8266 методом OTA[1]
OTA (от «over the air», что можно перевести как «по воздуху») – это метод загрузки на модуль ESP8266 новой прошивки, но не через последовательный порт, а по WiFI-связи. Этот метод крайне полезен, если ESP8266 находится в каком-то труднодоступном месте.
Беспроводная загрузка нового скетча из IDE Arduino может пригодиться в следующих ситуациях:
- При разработке прошивки – как более быстрая альтернатива загрузке нового скетча через последовательный порт
- При загрузке прошивки на несколько ESP, подключенных к вашей сети
Давайте приступим!
Шаг 1 – Установка Python 2.7.x
Во-первых, на компьютер нужно будет установить Python 2.7.x.
- Зайдите на сайт Python и загрузите версию 2.7.x для Windows
- Откройте файл и следуйте инструкциям программы-установщика
- Выберите вариант «Install for all users»
- В секции «Customize Python 2.7.X» включите последнюю опцию, т.е. «Add python.exe to Path»
Шаг 2 – Загрузка BasicOTA.ino (по проводу)
Чтобы у вас появилась возможность загружать новую прошивку беспроводным путем, на ESP8266 нужно сначала установить скетч «BasicOTA.ino», и сделать это нужно через последовательный порт, т.е. по проводу. Перед загрузкой убедитесь, что у вас стоит последняя версия IDE Arduino. Скачать ее можно отсюда.
Потом следуйте этим инструкциям:
- Откройте в IDE Arduino меню Инструменты > Плата (Tools > Board) и выберите свой ESP. Также выберите COM-порт, соответствующий вашему ESP
- Откройте скетч-пример «BasicOTA.ino». Для этого кликните в IDE Arduino на Файл > Примеры > Arduino OTA > BasicOTA.ino (File > Examples > Arduino OTA > BasicOTA.ino) или просто скопируйте скетч, показанный ниже, в рабочую область IDE Arduino:
/*********
Руи Сантос (Rui Santos)
Более подробно о проекте на: http://randomnerdtutorials.com
Пример в IDE Arduino: File > Examples > Arduino OTA > BasicOTA.ino
(Файл > Примеры > Arduino OTA > BasicOTA.ino)
*********/
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
// замените значения в этих константах на те,
// что соответствуют вашей сети:
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();
}
// строчка для номера порта по умолчанию
// можно вписать «8266»:
// ArduinoOTA.setPort(8266);
// строчка для названия хоста по умолчанию;
// можно вписать «esp8266-[ID чипа]»:
// ArduinoOTA.setHostname("myesp8266");
// строчка для аутентификации
// (по умолчанию никакой аутентификации не будет):
// ArduinoOTA.setPassword((const char *)"123");
ArduinoOTA.onStart([]() {
Serial.println("Start"); // "Начало OTA-апдейта"
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd"); // "Завершение OTA-апдейта"
});
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");
// "Ошибка при начале OTA-апдейта"
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");
// "Ошибка при завершении OTA-апдейта"
});
ArduinoOTA.begin();
Serial.println("Ready"); // "Готово"
Serial.print("IP address: "); // "IP-адрес: "
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
}
- Нажмите в IDE Arduino на кнопку «Загрузка» и дождитесь сообщения «Загрузка завершена»
- Откройте в IDE Arduino монитор порта на скорости 115200 бод. Если вы ввели правильные данные для своей WiFi-сети, спустя несколько секунд в мониторе порта должен отобразиться IP-адрес чипа ESP:
Шаг 3 – Загрузка нового скетча методом OTA
Теперь ESP8266 готов к загрузке новых скетчей методом OTA. Вы можете отключить ESP8266 от компьютера и запитать от другого источника питания (к примеру, от портативного зарядного устройства). Если ESP8266 установил беспроводное соединение с роутером, новая прошивка должна загрузиться безо всяких проблем.
- Откройте IDE Arduino, а затем кликните на Инструменты > Порт (Tools > Port). Вы должны увидеть что-то вроде «esp8266-xxxxxx», имеющее IP-адрес, показанный ранее в мониторе порта.
- Скопируйте в IDE Arduino скетч, показанный ниже, и загрузите его на ESP8266. Этот скетч программирует модуль NodeMCU с чипом ESP12-E на мигание встроенного светодиода один раз в секунду.
/*********
Руи Сантос (Rui Santos)
Подробнее о проекте на: http://randomnerdtutorials.com
Пример в IDE Arduino: File > Examples > Arduino OTA > BasicOTA.ino
(Файл > Примеры > Arduino OTA > BasicOTA.ino)
*********/
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
// замените значения в этих константах на те,
// что соответствуют вашей сети:
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();
}
// строчка для номера порта по умолчанию
// можно вписать «8266»:
// ArduinoOTA.setPort(8266);
// строчка для названия хоста по умолчанию;
// можно вписать «esp8266-[ID чипа]»:
// ArduinoOTA.setHostname("myesp8266");
// строчка для аутентификации
// (по умолчанию никакой аутентификации не будет):
// ArduinoOTA.setPassword((const char *)"123");
ArduinoOTA.onStart([]() {
Serial.println("Start"); // "Начало OTA-апдейта"
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd"); // "Завершение OTA-апдейта"
});
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");
// "Ошибка при начале OTA-апдейта"
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");
// "Ошибка при завершении OTA-апдейта"
});
ArduinoOTA.begin();
Serial.println("Ready"); // "Готово"
Serial.print("IP address: "); // "IP-адрес: "
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);
}
- Нажмите в IDE Arduino кнопку «Загрузка» и дождитесь сообщения «Загрузка завершена».
- Ваш ESP должен начать мигать встроенным светодиодом с частотой один раз в секунду.
См.также
Внешние ссылки
ESP8266 AT-команды | |
---|---|
Список AT-команд | |
Базовые команды |
|
Команды для WiFi |
|
Команды для TCP/IP |
|