ESP8266:Примеры/Прошивка ESP8266 методом OTA: различия между версиями
Myagkij (обсуждение | вклад) |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 2: | Строка 2: | ||
{{Перевод от Сubewriter}} | {{Перевод от Сubewriter}} | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Прошивка ESP8266 методом OTA<ref>[https://randomnerdtutorials.com/esp8266-ota-updates-with-arduino-ide-over-the-air/ randomnerdtutorials.com - ESP8266 OTA Updates with Arduino IDE | Over the Air]</ref>= | =Прошивка ESP8266 методом OTA<ref>[https://randomnerdtutorials.com/esp8266-ota-updates-with-arduino-ide-over-the-air/ randomnerdtutorials.com - ESP8266 OTA Updates with Arduino IDE | Over the Air]</ref>= | ||
Строка 45: | Строка 43: | ||
* Откройте скетч-пример '''«BasicOTA.ino»'''. Для этого кликните в '''IDE Arduino''' на '''Файл > Примеры > Arduino OTA > BasicOTA.ino (File > Examples > Arduino OTA > BasicOTA.ino)''' или просто скопируйте скетч, показанный ниже, в рабочую область '''IDE Arduino''': | * Откройте скетч-пример '''«BasicOTA.ino»'''. Для этого кликните в '''IDE Arduino''' на '''Файл > Примеры > Arduino OTA > BasicOTA.ino (File > Examples > Arduino OTA > BasicOTA.ino)''' или просто скопируйте скетч, показанный ниже, в рабочую область '''IDE Arduino''': | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/********* | /********* | ||
Руи Сантос (Rui Santos) | Руи Сантос (Rui Santos) | ||
Строка 143: | Строка 141: | ||
* Скопируйте в '''IDE Arduino''' скетч, показанный ниже, и загрузите его на [[ESP8266]]. Этот скетч программирует модуль [[NodeMCU]] с чипом [[ESP12-E]] на мигание встроенного светодиода один раз в секунду. | * Скопируйте в '''IDE Arduino''' скетч, показанный ниже, и загрузите его на [[ESP8266]]. Этот скетч программирует модуль [[NodeMCU]] с чипом [[ESP12-E]] на мигание встроенного светодиода один раз в секунду. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/********* | /********* | ||
Руи Сантос (Rui Santos) | Руи Сантос (Rui Santos) | ||
Строка 231: | Строка 229: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 238: | Строка 234: | ||
<references /> | <references /> | ||
{{Навигационная таблица/ | {{Навигационная таблица/Портал/ESP8266}} | ||
[[Категория:ESP8266]] | [[Категория:ESP8266]] |
Текущая версия от 12:37, 18 июня 2023
Прошивка 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 |
|