El problema que descubres a medio proyecto
Quieres que tu proyecto con ESP32 obedezca a un control remoto, sin tener que cablear 10 pulsadores ni inventar un menú por Bluetooth. La aparente solución de fin de semana: desarmas un equipo viejo, sacas el receptor IR de tres pines del tablero y lo conectas. Compilas, subes, y… nada. O peor: a veces decodifica, a veces no, y otras devuelve códigos basura que nunca se repiten.
Este tutorial cubre lo que pasa entre esa primera frustración y un sistema que funciona estable: por qué los receptores reciclados fallan, qué sensor económico te resuelve el problema, cómo cablearlo al ESP32 sin quemarle un GPIO, y cómo configurar la librería de IR para que no se coma 30 KB de flash por incluir protocolos que nunca vas a usar.
Está inspirado en el artículo de Soloelectronicos.com, reorientado a la práctica chilena y con foco en optimización de memoria.

Por qué un receptor reciclado falla más de lo que parece
Los receptores IR de tres pines de un VCR, una radio o una TV antigua se ven idénticos al HX1838 que compras nuevo. Pero hay tres trampas técnicas que la mayoría no nota:
- Pinout no estandarizado. El orden VCC/GND/OUT cambia según el fabricante. Si te equivocas, prendes VCC en GND y el componente se calienta o muere silenciosamente.
- Voltaje de salida a 5 V. Muchos receptores antiguos operan a 5 V y entregan la señal demodulada también a 5 V. El ESP32 no es tolerante a 5 V en sus pines GPIO: un solo pulso a 5 V puede romper el pin (o todo el SoC).
- Componente degradado. Los filtros internos del receptor (que demodulan los pulsos a 38 kHz) se desgastan con los años. El síntoma es una señal "sucia": tren de pulsos con jitter, que la librería no puede mapear a ningún protocolo conocido.
Diagnóstico rápido sin osciloscopio: si tienes un multímetro con modo Hz/frecuencia, mide la salida del receptor mientras aprietas un botón del mando. Deberías ver pulsos a ~38 kHz. Si solo ves DC o ruido, el receptor está malo. Si tienes osciloscopio, espera ráfagas que bajen de 3.3 V a 0 V en patrones reconocibles. Nada de eso significa que va al tarro.
La solución: un sensor nuevo, barato y a 3.3 V
El HX1838 (o sus equivalentes VS1838B y TSOP1838) es un receptor IR moderno con filtros estables, alimentación de 3.3 a 5 V, y salida digital limpia. Cuesta menos de $1.000 CLP en el catálogo chileno y normalmente viene en kit con un control remoto NEC genérico, exactamente lo que necesitas para empezar.

Hardware: cableado mínimo al ESP32
Tres cables y opcionalmente una resistencia:
| HX1838 | ESP32 | Nota |
|---|---|---|
| VCC | 3.3V | NO 5V con el ESP32 |
| GND | GND | tierra común |
| OUT | GPIO 34 | (también sirve GPIO 35) |
¿Por qué GPIO 34?
Los pines 34, 35, 36 y 39 del ESP32 son "solo entrada": no pueden ser configurados como salida ni tienen pull-up/pull-down internos. Justo por eso son ideales para sensores de lectura: no compiten con otros periféricos del ESP32 (la pantalla por SPI, el bus I²C de un DHT, etc.) y no te equivocas escribiéndolos accidentalmente. Resérvalos siempre para señales digitales entrantes que no necesiten interrupciones complejas.
Resistencia pull-up de 10 kΩ (opcional)
Si usas el módulo HX1838 con su PCB, la resistencia pull-up ya viene integrada en placa. Si soldaste un HX1838 desnudo, agrega una resistencia de 10 kΩ entre OUT y 3.3 V: sin ella, la línea queda flotando entre pulsos y puedes leer ruido.
Software: librería IRremoteESP8266 optimizada
La librería estándar para IR en ESP32 es IRremoteESP8266. El problema: por defecto incluye decoders para 30+ protocolos (NEC, Sony, RC5, Panasonic, LG, Samsung, etc.) y eso pesa 30 a 50 KB de flash y RAM. La gran mayoría de controles remotos chinos baratos usan solo NEC. Si ya tienes un proyecto con WiFi + display + sensores, esos 30 KB pueden ser la diferencia entre compilar y no.
Activar SOLO el protocolo NEC
Crea un archivo llamado build_opt.h en la carpeta del proyecto (al lado del .ino) con este contenido:
-DIR_ENABLE_DEFAULT=false
-DDECODE_NEC=true
IR_ENABLE_DEFAULT=false apaga todos los protocolos por defecto. DECODE_NEC=true activa explícitamente solo NEC. Resultado: la librería pasa de ~45 KB a ~8 KB de flash.
Sketch mínimo con mapeo a teclas
Este código mapea los 17 botones más comunes de un control remoto NEC genérico (1-9, 0, estrella, gato, OK, flechas) a un enum, listo para conectar con la lógica de tu proyecto:
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#define IR_PIN 34
IRrecv irrecv(IR_PIN);
decode_results results;
enum IRKey : uint8_t {
IR_NONE = 0, IR_0, IR_1, IR_2, IR_3, IR_4, IR_5, IR_6, IR_7, IR_8, IR_9,
IR_STAR, IR_HASH, IR_OK, IR_UP, IR_DOWN, IR_LEFT, IR_RIGHT
};
static IRKey readIRKey() {
if (!irrecv.decode(&results)) return IR_NONE;
const uint32_t code = (uint32_t)results.value;
irrecv.resume();
switch (code) {
case 0xFFA25D: return IR_1;
case 0xFF629D: return IR_2;
case 0xFFE21D: return IR_3;
case 0xFF22DD: return IR_4;
case 0xFF02FD: return IR_5;
case 0xFFC23D: return IR_6;
case 0xFFE01F: return IR_7;
case 0xFFA857: return IR_8;
case 0xFF906F: return IR_9;
case 0xFF6897: return IR_STAR;
case 0xFF9867: return IR_0;
case 0xFFB04F: return IR_HASH;
case 0xFF18E7: return IR_UP;
case 0xFF4AB5: return IR_DOWN;
case 0xFF10EF: return IR_LEFT;
case 0xFF5AA5: return IR_RIGHT;
case 0xFF38C7: return IR_OK;
default: return IR_NONE;
}
}
void setup() {
pinMode(IR_PIN, INPUT);
irrecv.enableIRIn();
}
void loop() {
IRKey key = readIRKey();
if (key == IR_NONE) return;
// tu lógica acá: navegar menús, controlar relés, ajustar valores, etc.
// ejemplo: if (key == IR_OK) toggleRele();
}
Cómo saber los códigos de TU mando
Los códigos 0xFFA25D etc. son del mando NEC genérico que viene con el HX1838. Si quieres usar el control de tu TV o un mando distinto, agrega un Serial.printf("0x%X\n", code); antes del switch y lee los códigos de tu mando uno a uno desde el monitor serial.
Pruebas: confirmar que funciona
- Compila y sube el sketch al ESP32.
- Abre el monitor serial a 115200 baud.
- Apunta el mando hacia el HX1838 y aprieta un botón.
- Si todo está bien, vas a ver el código del botón en el monitor (si dejaste el
Serial.printfde diagnóstico).
Si no ves nada:
- Línea muerta: revisa la pull-up. Sin ella, la lectura es ruido.
- Códigos siempre 0xFFFFFFFF: es el código de "repetición" NEC. Pulsa brevemente, no mantengas.
- Códigos al azar distintos: receptor degradado (vuelve al tarro) o mando agotado (cambia la pila).
Variantes y mejoras
Tres extensiones que el artículo original no incluye:
Modo low-power con interrupción IR: si tu proyecto corre con batería, deja el ESP32 en light sleep y configura GPIO 34 como wake-source con
esp_sleep_enable_ext0_wakeup(GPIO_NUM_34, 0). El ESP32 duerme con ~1 mA y se despierta solo cuando llega un pulso IR. Útil para un control de luces con duración de meses por carga.Aprender el mando una sola vez y guardarlo en NVS: en lugar de hardcodear los códigos, haz un modo de "aprendizaje" donde el usuario aprieta cada tecla del mando una vez, y el ESP32 los guarda en NVS (NonVolatile Storage) con la librería Preferences. Así el mismo firmware sirve con cualquier mando.
Repetidor IR sobre WiFi: combina un HX1838 (recibe) con un LED IR + transistor (emite) y un endpoint REST en el ESP32. Resultado: control universal vía HTTP que puedes disparar desde Home Assistant o cualquier app web. Perfecto para ese aire acondicionado viejo sin app oficial.
Personalización para Chile
En MechatronicStore (precios mayo 2026):
- ESP32 ESP-WROOM-32 (USB-C) (SKU X2-10V2): $7.990 CLP
- Control remoto IR + módulo receptor (kit) (SKU G-111): $2.600 CLP (viene con HX1838 + mando NEC compatible con los códigos del sketch, la opción más completa)
- LED receptor infrarrojo 3 pin (HX1838 suelto) (SKU GF1-16): $990 CLP (si ya tienes un mando)
- Resistencia 10 kΩ 1/4W (SKU GK2-15): $100 CLP (solo si usas el HX1838 desnudo)
- Cables jumpers macho-hembra (SKU C-415): $1.990 CLP
Total mínimo (kit + ESP32 + cables): ~$12.580 CLP.
Recursos
- Artículo original (español): Cómo conectar un receptor de infrarrojos (IR) al ESP32: del reciclaje a la solución profesional
- Librería IRremoteESP8266: crankyoldgit/IRremoteESP8266
- Documentación protocolo NEC: Vishay NEC IR Protocol PDF
- GPIOs de solo entrada del ESP32 (referencia oficial): Random Nerd Tutorials, ESP32 GPIO Reference
Versión chilena con componentes en stock local en MechatronicStore, basada en el artículo de Soloelectronicos.com.






