Программирование OTA позволяет обновлять / загружать новую программу в ESP8266 с помощью Wi-Fi (по воздуху).
Функциональность OTA чрезвычайно полезна в случае отсутствия физического доступа к модулю ESP. Это помогает сократить время, затрачиваемое на обновление каждого модуля ESP во время обслуживания.
Чтобы использовать функциональные возможности OTA, вам необходимо установить версию Python 2.7.x, если она еще не установлена на вашем компьютере.
Зайдите на официальный сайт Python и загрузите 2.7.x (специальный выпуск) для Windows (установщик MSI)
Запустите установщик и следуйте указаниям мастера установки.
В разделе «Настройка Python 2.7.X» убедитесь, что включен последний параметр «Add python.exe to Path»
Чтобы у вас появилась возможность загружать новую прошивку беспроводным путем, на ESP8266 нужно сначала установить скетч «BasicOTA.ino», и сделать это нужно через последовательный порт, т.е. по проводу.
Вам необходимо изменить следующие две переменные чтобы ESP8266 мог установить соединение с вашей Wifi сетью. ssid - Имя Wifi, password - пароль.
const char* ssid = "..........";
const char* password = "..........";
Теперь можно приступить к загрузке скетча
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "..........";
const char* 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();
}
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else
type = "filesystem";
Serial.println("Start updating " + type);
});
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();
}
Теперь откройте Serial Monitor со скоростью 115200 бод. И нажмите кнопку RST на ESP8266. Если все в порядке, он выведет динамический IP-адрес, полученный от вашего маршрутизатора. Запишите это.
Теперь давайте загрузим новый эскиз по воздуху.
Помните! Вы должны добавить код OTA в каждый загружаемый скетч. В противном случае вы потеряете возможность делать загрузки по воздуху.
В качестве примера мы добавим Blink в базовый код OTA.
Изменения в базовой программе OTA выделены цветом.
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "..........";
const char* password = "..........";
const int led = D0;
unsigned long previousMillis = 0;
const long interval = 1000;
int ledState = LOW;
void setup() {
pinMode(led, OUTPUT);
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();
}
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else
type = "filesystem";
Serial.println("Start updating " + type);
});
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();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = not(ledState);
digitalWrite(led, ledState);
}
}
Примечание: Поменяйте в этом скетче SSID и пароль на те, что соответствуют вашей сети.
После того, как вы скопируете скетч в Arduino IDE, перейдите в меню Инструменты - Tools > Порт - Port и вы увидите что-то вроде этого: esp8266-xxxxxx плюс IP ESP_ешки. Если вы не можете его найти, вам, возможно, придется перезапустить вашу IDE.
Выберите свою ESP и нажмите кнопку « Загрузить» . В течение нескольких секунд новый скетч будет загружен. Ваш ESP должен начать мигать встроенным светодиодом.
Комментарии
Отправить комментарий