¿Te gustaría poder actualizar de forma inalámbrica tu programa en el ESP32 sin tener que conectar ningún cable? ¡Con la Programación ESP32 Basic Over The Air (OTA) en el IDE de Arduino es posible! En este artículo te explicaremos paso a paso cómo utilizar esta función para hacer tu vida más fácil y tu proyecto más avanzado. ¡Sigue leyendo para descubrir cómo llevar tu programación de ESP32 al siguiente nivel!
Una de las mejores cosas del ESP32 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 ESP32?
programación OTA le permite actualizar/cargar un nuevo programa al ESP32 a través de WiFi sin tener que conectar el ESP32 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.
Formas de implementar OTA en ESP32
Hay dos formas de implementar la funcionalidad OTA en ESP32.
- OTA básica – Las actualizaciones se proporcionan a través del IDE de Arduino.
- Actualizador web OTA – Las actualizaciones se entregan a través de un navegador web.
Cada uno tiene sus propias ventajas, por lo que puedes utilizar el que mejor se adapte a tu proyecto.
Este tutorial lo guiará a través del proceso de implementación de Basic OTA. Si desea obtener más información sobre el actualizador web OTA, visite este tutorial.
3 sencillos pasos para usar Basic OTA con el ESP32
- 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 ESP32 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 ESP32 no tiene capacidad de actualización OTA, primero debe cargar el firmware OTA en el ESP32 a través del puerto serie.
Para poder realizar actualizaciones inalámbricas posteriores, primero se debe actualizar el firmware.
El complemento ESP32 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 ESP32 se conecte a una red existente.
const char* ssid = "..........";
const char* password = "..........";
Cuando hayas terminado, sube el boceto.
#include <WiFi.h>
#include <ESPmDNS.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 3232
// ArduinoOTA.setPort(3232);
// Hostname defaults to esp3232-[MAC]
// ArduinoOTA.setHostname("myesp32");
// 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);
})
.onEnd([]() {
Serial.println("nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%r", (progress / (total / 100)));
})
.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 EN en el ESP32. 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 programa OTA Básico están resaltados en azul.
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "..........";
const char* password = "..........";
//variabls for blinking an LED with Millis
const int led = 2; // ESP32 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 3232
// ArduinoOTA.setPort(3232);
// Hostname defaults to esp3232-[MAC]
// ArduinoOTA.setHostname("myesp32");
// 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);
})
.onEnd([]() {
Serial.println("nEnd");
})
.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%r", (progress / (total / 100)));
})
.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 ESP32 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: esp32-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 ESP32?
La programación OTA te permite actualizar/subir un nuevo programa al ESP32 a través de Wi-Fi sin tener que conectar el ESP32 a la computadora mediante USB. Este tipo de programación se llama «Over-The-Air» (OTA).
*Fuente: example.com
Maneras de implementar OTA en ESP32
Existen dos formas de implementar la funcionalidad OTA en el ESP32:
- OTA Básica: las actualizaciones se entregan utilizando el IDE de Arduino.
- Actualizador Web OTA: las actualizaciones se entregan a través de un navegador web.
Cada uno tiene sus propios beneficios, por lo que puedes utilizar el que mejor funcione para tu proyecto.
*Fuente: example.com
3 Pasos Sencillos para Usar OTA Básica con el ESP32
- Paso 1: Instalar la serie Python 2.7.x en tu computadora.
- Paso 2: Subir el firmware OTA básico por serie.
- Paso 3: Subir un nuevo sketch OTA.
*Fuente: example.com
¡Buena guía! Me gustó mucho la forma en que explicaron cómo hacer la programación ESP32 OTA en el IDE de Arduino. ¡Sigan así! ¡Excelente ayuda para los novatos como yo! ¡Gracias!
¡Interesante! Me parece genial aprender a programar de esta manera en el IDE de Arduino. ¡Gracias por la info!