¿Vale la pena el OTA en ESP32 si siempre pulso BOOT al cargar?

Imagina esto: Has perfeccionado tu prototipo basado en un ESP32. Lo instalas incluso integrado con Home Assistant integrado. Funciona perfecto… hasta que descubres un bug en el cálculo . ¿Y ahora? ¿Abrir el dispositivo sacar cables y pulsar BOOT otra vez? ¡Aquí entra el OTA para salvarte!
Sí, vale la pena implementarlo aunque la primera carga requiera el botón BOOT. Te explico paso a paso por qué.

La situación actual

Programar un ESP32 por USB/serial siempre exige pulsar BOOT (y a veces RESET) para entrar en modo de flasheo.
Esto es inherente al hardware, independientemente de si usas OTA o no.​

La clave del OTA

Después de esa primera carga, el OTA elimina el cable para siempre.

Paso 1 (instalación inicial):

  • Subes firmware con OTA incluido vía USB (sí, con BOOT).

Paso 2 (actualizaciones futuras):

  • El ESP32 se conecta a WiFi.
  • Envías nuevo firmware remotamente desde Arduino IDE (puerto de red), ESPHome o web server.
  • Cero cables, cero botones, cero contacto físico.

Código listo para usar (OTA básico)

Aquí un sketch mínimo basado en el ejemplo oficial BasicOTA. Cárgalo primero por USB:

#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
const char* ssid = "TU_WIFI"; // Cambia por tu red
const char* password = "TU_PASS"; // Cambia por tu clave
void setup() {
Serial.begin(115200);
Serial.println("Booting OTA");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
// Config OTA
ArduinoOTA.setHostname("OTA"); // Nombre visible en red
// ArduinoOTA.setPassword("admin"); // Descomenta para contraseña
ArduinoOTA
.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else
type = "filesystem";
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(); // ¡Esencial! Mantiene OTA activo
// Aquí va tu código ...
}

Pasos para usar:

  1. Cambia SSID/PASS, compila y sube por USB (con BOOT).
  2. Abre Monitor Serie: anota la IP y hostname.
  3. En Arduino IDE: Herramientas > Puerto → selecciona el puerto de red («OTA at IP»).
  4. Sube sketches futuros sin cable.

Cuándo brilla el OTA

  • Instalaciones fijas: Cuadros eléctricos, sensores ocultos ,etc.
  • Flotas de dispositivos: 10+ ESP32 sin visitas.
  • Mantenimiento remoto: Bugs corregidos desde móvil.
  • Alta disponibilidad: Rollbacks automáticos.

Consideraciones clave

  • Seguridad: Activa contraseña con ArduinoOTA.setPassword(). Para prod, usa HTTPS/firmas.
  • Estabilidad: Siempre llama ArduinoOTA.handle() en loop.
  • WiFi: Reconexión auto si signal débil.

Conclusión práctica:

OTA = libertad total post-instalación. Una carga USB inicial, luego updates inalámbricos infinitos.

2024 04 06 19 25 03 Monitorización de gases con Arduino   Buscar con Google y 6 páginas más   Person

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.

La FRASE DEL MES

«Cualquier tecnología suficientemente avanzada es indistinguible de la magia.»

~ Arthur C. Clarke