Como funciona la actualización sin cable en Arduino


¿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

Cómo reciclar un receptor infrarrojo rescatado de un viejo equipo y usarlo con un ESP32


¿Tienes un mando a distancia y un receptor de infrarrojos rescatado de algún aparato viejo, pero no sabes cómo conectarlo al ESP32? No te preocupes: aunque no se vea el modelo o fabricante, es posible identificar los pines con un poco de observación y unas mediciones básicas. Solo eso sí: no conectes nada al azar o podrías quemarlo. Vamos paso a paso.

1. Empezar con una suposición razonable

En la mayoría de receptores IR tipo TSOP de 3 pines, mirando la cápsula de frente (el lado plano hacia ti y las patillas hacia abajo), el orden más común es:

  • Izquierda: OUT (señal)
  • Centro: GND (masa)
  • Derecha: VCC (alimentación, normalmente 5 V o 3,3 V)

No obstante, hay versiones que cambian este orden, así que tómalo solo como hipótesis inicial, no como regla fija.

2. Identificar primero la masa (GND)

Es el paso más seguro. Si el receptor tiene carcasa metálica, muchas veces está unida eléctricamente al pin de masa. También puedes comprobarlo con un multímetro en modo continuidad: si un pin tiene conexión directa al negativo del conector de alimentación, ése es tu GND. Cuando lo tengas localizado, márcalo para no confundirlo después.

3. Determinar cuál es VCC y cuál es la salida

Con GND ya identificado, quedan dos pines por probar. Usa una fuente regulada con limitador de corriente (por ejemplo 5 V y 20 mA). Conecta masa al pin central y selecciona uno de los otros dos como VCC. Añade una resistencia en serie de unos 100–220 Ω por seguridad.

Mide el tercer pin respecto a GND:

  • Si en reposo ves algo cercano a VCC (por ejemplo 4–5 V) que cae momentáneamente a 0 V cuando apuntas un mando IR y pulsas botones, ese pin es la salida (OUT).
  • Si no pasa nada, cambia el pin de VCC al otro extremo y repite.

Estos receptores suelen tener salida activa en bajo, es decir, la salida está “en alto” con pull‑up y baja cuando detecta una señal IR.

4. Algunas pistas visuales

Aunque no veas el modelo, ciertos detalles ayudan:

  • El lado plano del encapsulado suele marcar la orientación y el pin 1.
  • Muchos modelos (TSOP1738, TSOP4838, etc.) comparten el patrón OUT–GND–VCC.

Comparar tu receptor con imágenes puede aclararte mucho.

5. Montaje de prueba visual

Si quieres confirmar el pinout de forma sencilla, monta un pequeño circuito: VCC, GND y un LED con resistencia (1 kΩ) conectado a la probable salida. Si el LED parpadea o se enciende al pulsar un botón del mando, habrás identificado correctamente la salida.

Caso práctico: comprobando con resistencias

Supón que ya has identificado que el pin central es GND (porque está unido a la carcasa) y mides los otros dos con un comprobador de componentes o un polímetro en escala de ohmios:

  • Un pin da unos 35 kΩ en ambos sentidos → comportamiento casi simétrico, típico de la salida (OUT).
  • El otro muestra 5 kΩ en un sentido e infinito en el otro → comportamiento asimétrico, típico del pin de VCC, por las protecciones internas contra polaridad invertida.

Así, mirando la cápsula de frente (lado plano hacia ti, patillas hacia abajo):

PosiciónFunción
IzquierdaOUT (salida)
CentroGND (masa)
DerechaVCC (3–5 V)

Verificación final

Conecta VCC (derecha) a 5 V o 3,3 V y GND (centro) a masa.
Pon una resistencia de 10 kΩ entre VCC y OUT (izquierda) como pull‑up.
Mide el pin de salida con un multímetro:

  • En reposo: tensión cercana a VCC.
  • Al recibir señal del mando: caídas rápidas o parpadeos de voltaje.

Si todo coincide y el consumo es bajo (0,5–5 mA), ¡ya has identificado correctamente tu receptor y puedes usarlo directamente con un pin digital del ESP32!

Prueba final con código

Una vez tenemos el montaje , lo ideal es hacer la prueba con nuestro microcontrolador. En este caso concreto usaremos un ESP32, pero el siguiente código debería funcionar con caquier variante Arduino ya que se usa una librería genérica.

Respecto al mando a emplear podemos usar cualquier mando de algun equipo que ya no usemos y tengamos olvidado. Es fundamental comprobar con una cámara que el diodo de infrarrojo del mando emite luz infraroja al pulsar cualquier botón del mando.

Bien, una vez montado el receptor de infrarojos con la toma de GND al pin central , el terminal de la izquierda a un GPIO ( en nuestro caso C23) y el terminal de la derecha a 3.3v , es momento de probar su salida , para lo cual podemos usar el siguiente código:

#include <IRremote.hpp>
#define IR_PIN 23
uint32_t ultimoCodigo = 0;
unsigned long ultimoTiempo = 0;
void setup() {
Serial.begin(115200);
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
Serial.println("✅ IR ANTI-RUIDO FINAL - Pulsa MANDO TV");
}
void loop() {
if (IrReceiver.decode()) {
uint32_t codigo = IrReceiver.decodedIRData.decodedRawData;
uint8_t bits = IrReceiver.decodedIRData.numberOfBits;
// ANTI-RUIDO: 30+ bits, código nuevo
if (bits >= 30 && codigo != 0 &&
(codigo != ultimoCodigo || millis() - ultimoTiempo > 400)) {
Serial.print("🎮 0x");
Serial.print(codigo, HEX);
Serial.print(" (");
Serial.print(bits);
Serial.println(" bits)");
ultimoCodigo = codigo;
ultimoTiempo = millis();
}
IrReceiver.resume();
}
delay(150);
}
//ejemplo de energy system
//play 0xFF00BF00 (32 bits)
//ch- 0xFE01BF00 (32 bits)
//ch+ 0xFD02BF00 (32 bits)

Obviamente si «pasa esta prueba», podemos usar librerías mas específicas según el microcontrolador porque existen librerías especificas para ESP8266 o ESP32.

Algunos de los receptores mas habituales en electrónica de consumo

Por el comportamiento de detectar 38 kHz, ruido ambiental, pinout OUT-GND-VCC, los  receptores TSOP son lo mas estándar de Vishay.

Modelos exactos (o equivalentes)

TIPOSModelo probableEspecificaciones 
tipo 1TSOP4838 o TSOP173838 kHz, 2.7-5.5V, OUT-GND-VCC 
tipo 2TSOP4838TT1 o VS1838BIgual, encapsulado plano negro típico AliExpress 

Ambos son idénticos funcionalmente:

  • Frecuencia: 38 kHz (estándar mandos TV/DVD).
  • Pinout: 1=OUT, 2=GND, 3=VCC (frontal ventana hacia ti).
  • Salida: Baja al detectar (activo LOW).
  • Sensibilidad: 10-15m con buen mando.

Datasheet recomendado

Descarga TSOP48xx Vishay:

  • Confirma tu pinout exacto (figura 1).
  • Rangos voltaje/temperatura.
  • Curvas sensibilidad.

Equivalentes genéricos (AliExpress/Amazon)

  • TSOP1738 / TSOP1838: Mismo pinout, 38 kHz.
  • VS1838B: Clon chino idéntico, 0,20€ unidad.
  • HX1838: Módulo con resistencia incluida (no suelto).