¿Te gustaría poder actualizar el firmware de tu ESP8266 de forma inalámbrica y sin la necesidad de conectar cables? En este artículo te enseñaremos cómo realizar Programación ESP8266 Over The Air (OTA) en el IDE de Arduino. ¡Sigue leyendo para descubrir cómo hacerlo de manera sencilla y efectiva!
Una de las mejores cosas del ESP8266 es que su firmware se puede actualizar de forma inalámbrica. Este tipo de programación se llama “Over-The-Air” (OTA).
¿Qué es la programación OTA en ESP8266?
programación OTA le permite actualizar/cargar un nuevo programa al ESP8266 a través de WiFi sin tener que conectar el ESP8266 a la computadora a través de USB.
La funcionalidad OTA es conveniente cuando no hay acceso físico al módulo ESP. Además, reduce el tiempo necesario para actualizar cada módulo ESP durante el mantenimiento.
Una ventaja clave de OTA es que una única ubicación central puede enviar una actualización a varios ESP en la misma red.
El único inconveniente es que debes proporcionar un código OTA con cada boceto cargado para poder utilizar OTA en la próxima actualización.
3 sencillos pasos para usar OTA con el ESP8266
- Instalación de la serie Python 2.7.x: El primer paso es instalar la serie Python 2.7.x en su computadora.
- Carga en serie del firmware OTA básico: Sube en serie el boceto con firmware OTA. Este es un paso necesario para realizar actualizaciones posteriores de forma inalámbrica.
- Cargue un nuevo boceto de forma inalámbrica: Ahora puedes cargar nuevos bocetos desde el IDE de Arduino al ESP8266 de forma inalámbrica.
Paso 1: Instale la serie Python 2.7.x
Para utilizar la funcionalidad OTA, primero debe instalar Python 2.7.x si aún no está instalado en su computadora.
Descargue Python 2.7.x para Windows (instalador MSI) desde el sitio web oficial de Python.
Inicie el instalador y ejecute el asistente de instalación.
Asegúrese de que la opción «Agregar Python.exe a la ruta» esté marcada en la sección «Personalizar Python 2.7.X».
Paso 2: Carga en serie el firmware OTA básico
Dado que la imagen de fábrica del ESP8266 no tiene capacidad de actualización OTA, primero debe cargar el firmware OTA en el ESP8266 a través del puerto serie.
Para poder realizar actualizaciones inalámbricas posteriores, primero se debe actualizar el firmware.
El complemento ESP8266 para Arduino IDE incluye una biblioteca OTA y un ejemplo de BasicOTA. Simplemente navega hasta archivo > Ejemplos > ArduinoOTA > BásicoOTA.
Antes de comenzar a cargar el boceto, debe cambiar las dos variables siguientes con sus credenciales de red para permitir que el ESP8266 se conecte a una red existente.
const char* ssid = "..........";
const char* password = "..........";
Cuando hayas terminado, sube el boceto.
#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();
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
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();
}
Ahora abra el monitor serie con una velocidad de baudios de 115200 y presione el botón RST en el ESP8266. Si todo está bien, debería ver la dirección IP dinámica asignada por su enrutador. Escríbelo.
Paso 3: sube un nuevo boceto de forma inalámbrica
Ahora carguemos un nuevo boceto de forma inalámbrica.
Recuerda que debes incluir el código OTA en cada sketch subido. De lo contrario, perderá la capacidad OTA y no podrá realizar la siguiente carga inalámbrica. Por lo tanto, se recomienda modificar el código anterior para incluir el nuevo código.
Como ejemplo incluiremos parpadeo simple Boceto en código OTA básico. Recuerde cambiar las variables SSID y contraseña con sus credenciales de red.
Los cambios en el código se resaltan en azul.
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "..........";
const char* password = "..........";
//variabls for blinking an LED with Millis
const int led = D0; // ESP8266 Pin to which onboard LED is connected
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
int ledState = LOW; // ledState used to set the LED
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();
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
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();
//loop to blink without delay
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
ledState = not(ledState);
// set the LED with the ledState of the variable:
digitalWrite(led, ledState);
}
}
Tenga en cuenta que no usamos eso delay()
Función para hacer que el LED parpadee. Esto se debe a que el delay()
La función pausa el programa. Cuando se genera la siguiente solicitud OTA mientras el ESP8266 está en pausa y esperando la delay()
Para completar el proceso, su programa no cumplirá con este requisito.
Después de copiar el boceto anterior en su IDE de Arduino, navegue hasta Herramientas > Puerto Posibilidad. Busque algo como: esp8266-xxxxxx bajo your_esp_ip_address. Si no puede encontrarlo, es posible que deba reiniciar su IDE.
Seleccione el puerto y haga clic en el botón «Cargar». El nuevo boceto se cargará en unos segundos. El LED integrado debería empezar a parpadear.
¿Qué es la programación OTA en ESP8266?
La programación OTA permite actualizar/subir un nuevo programa al ESP8266 a través de Wi-Fi sin necesidad de conectar físicamente el ESP8266 a la computadora mediante USB. Esta funcionalidad es muy útil cuando no se tiene acceso físico al módulo ESP y reduce el tiempo requerido para actualizar cada módulo durante el mantenimiento. Una ventaja clave de la OTA es que una ubicación central puede enviar una actualización a varios ESP en la misma red. La única desventaja es que se debe incluir un código OTA con cada sketch que se carga para poder usar OTA en la próxima actualización.
3 Pasos Sencillos para Usar OTA con el ESP8266
-
Paso 1: Instalar Python 2.7.x series
Para utilizar la funcionalidad OTA, primero debes instalar Python 2.7.x en tu computadora.
-
Paso 2: Subir el Firmware Básico OTA Serialmente
Debido a que la imagen de fábrica del ESP8266 carece de la capacidad de actualización OTA, primero debes cargar el firmware OTA en el ESP8266 a través de la interfaz serial.
-
Paso 3: Subir un Nuevo Sketch OTA
Ahora, puedes subir un nuevo sketch OTA al ESP8266 desde el IDE de Arduino.
Para obtener más información detallada sobre cómo realizar cada paso, te recomendamos seguir el enlace fuente.
Preguntas Frecuentes sobre Programación OTA en ESP8266
-
¿Qué beneficios ofrece la programación OTA en ESP8266?
La programación OTA en ESP8266 permite actualizar el firmware de forma inalámbrica y sin necesidad de conectar físicamente el dispositivo a la computadora. Esto simplifica el proceso de mantenimiento y ahorra tiempo al actualizar múltiples dispositivos en la misma red.
-
¿Es necesario incluir un código OTA en cada sketch que se carga?
Sí, es necesario incluir un código OTA en cada sketch que se carga en el ESP8266 para poder utilizar la funcionalidad OTA en futuras actualizaciones. De lo contrario, se perderá la capacidad de OTA.
-
¿Qué precauciones debo tener al utilizar la programación OTA en ESP8266?
Es importante no utilizar la función delay() en los sketches OTA, ya que pausa el programa y puede causar que se pierdan solicitudes OTA mientras el ESP8266 está esperando a que el delay() se complete.