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>
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).

Una pantalla mas grande para el ESP32


En un post anterior vimos como usar una pequeña pantalla OLED con un ESP32. Ciertamente una pantalla pequeña consume menos y ocupa muy poco espacio, pero cuando no tenemos esos problemas, es mas interesante usar una pantalla algo mas grande, pues aunque pueda parecer elegante, en realidad con una pantalla tan pequeña apenas hay sitio para mostrar información (además de que posiblemente cueste lo mismo y además suelen usar los mismo pines de datos).

En este post vamos usar la AZ-Delivery 1.77″ ST7735 con ESP32 (comprado en Amazon en https://amzn.to/4pK0utQ ) y la librería de Adafruit donde solo tenemos que adaptar el constructor y asegurarnos de que el cableado coincide con los pines correctos (en nuestro caso 14,13,12,27,26).

Atención porque aunque el manual de Az-Delivery que nos ofrece este pantalla solo muestren como ejemplo un Arduino mega con un adaptador ( ver figura mas abajo), es posible conectar directamente la pantalla AZDelivery de 1.77 pulgadas ST7735 al ESP32 sin conversor de nivel lógico.

En caso de usar un Arduino Uno como hemos visto arriba, el cableado se complica dado que tenemos adaptar 4 líneas de datos a los niveles de 3.3v. Como vemos para configurar este adaptador, se debe conectar el pin VA del LCC a +3.3V y el pin VB a +5V. El pin OE debe unirse a +3.3V mediante una resistencia de arranque de 1 kΩ, mientras que el pin GND se conecta a tierra. En esta configuración, el lado “A” del LCC trabaja con señales de bajo nivel (3.3V) y el lado “B” con señales de alto nivel (5V), tal como se muestra en el diagrama de conexión.

Es muy importante destacar que como el ESP32 opera a niveles lógicos de 3.3V, compatibles con los requisitos de la pantalla (2.7V-3.3V) NO NECESITA UN SHIFTER , a diferencia del Arduino Uno o un ATMega328P que usan 5V y necesitan un shifter como el TXS0108E.

Aclarado este aspecto del conversor que NO NECESITAMOS usando un ESP32, en la imagen vemos las 8 conexiones dela pantalla , por cierto en el mismo orden que la pantalla pequeña que vimos en un post anterior:

Una vez vistas las conexiones, el cableado con los pines elegidos y funcionales debe mantenerse exactamente el mismo mapeo que usábamos en la pantalla de 0.96″:

  • SCL/SCK → GPIO14 (SCK del bus SPI)
  • SDA/MOSI → GPIO13 (MOSI)
  • RES/RST → GPIO12
  • DC/A0 → GPIO27
  • CS → GPIO26
  • VCC → 3.3V
  • GND → GND
  • LED/BL → 3.3V (o a un GPIO si quieres controlar el brillo)​

En el código también debemos ajustar el constructor de Adafruit. En lugar de:

Adafruit_ST7735 tft = Adafruit_ST7735(10, 8, 9);

Usa tus pines (CS, DC, RST):
#define TFT_CS   26
#define TFT_DC 27
#define TFT_RST 12

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

El resto del SPI (SCK=14, MOSI=13) lo maneja SPI por hardware. No hace falta pasarlos al constructor si usamos el SPI por defecto del ESP32.​

Inicialización correcta para 1.77″ 128×160

En setup() usaremos el inicializador recomendado para 1.77″ (Adafruit lo llama “INITR_BLACKTAB” o “INITR_GREENTAB”; muchas 1.77″ van bien con BLACKTAB):

void setup(void) {
SPI.begin(14, -1, 13, 26); // SCK=14, MISO sin usar (-1), MOSI=13, CS=26
tft.initR(INITR_BLACKTAB); // si ves colores raros, prueba INITR_GREENTAB
tft.fillScreen(ST77XX_BLACK);
delay(500);
show_page();
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setTextSize(2);
tft.setFont(); // vuelve a la fuente por defecto
}

Fíjate que es setTextColor, no setTextcolour (esa grafía daría error de compilación).​

Se pueden utilizar cualquiera de los siguientes colores predefinidos:
ST77XX_BLACK
ST77XX_RED
ST77XX_BLUE
ST77XX_MAGENTA
ST77XX_ORANGE
ST77XX_WHITE
ST77XX_GREEN
ST77XX_CYAN
ST77XX_YELLOW

O también, se pueden utilizar números hexadecimales de 4-bits que representan un color específico (por ejemplo 0x2AFF)

Las fuentes se encuentran en la carpeta de la librería Adafruit_GFX: … > Arduino > libraries > Adafruit_GFX_Library > Fonts Cuando se importa una fuente específica, se debe importar la librería de fuentes después de la librería Adafruit_GFX, como en las siguientes líneas del código de ejemplo

4. Código adaptado para ESP32 y pines deseados

Aquí sin mas dilaciones un ejemplo de sketch funcional ajustado a un ESP32 con librerías Adafruit y usando los pines descritos ( y por supuesto probado en este humilde blog):

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Fonts/FreeSansBold9pt7b.h>
#include <Adafruit_ST7735.h>

#define TFT_CS 26
#define TFT_DC 27
#define TFT_RST 12

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void) {
// SPI en los pines que quieres: SCK=14, MOSI=13
SPI.begin(14, -1, 13, TFT_CS);

tft.initR(INITR_BLACKTAB); // o INITR_GREENTAB si hace falta
tft.fillScreen(ST77XX_BLACK);
delay(500);
show_page();
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);
tft.setTextSize(2);
tft.setFont(); // fuente por defecto (bitmap)
}

void loop() {
for (uint8_t i = 0; i < 100; i++) {
changing_value(i);
// delay(100);
}
}

void show_page() {
tft.setFont(&FreeSansBold9pt7b);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_RED);
tft.setCursor(14, 22);
tft.print("AZ-Delivery");

tft.drawFastHLine(0, 35, 128, ST77XX_GREEN);

tft.drawTriangle(1, 45, 28, 70, 55, 45, ST77XX_WHITE);
tft.fillTriangle(78, 70, 104, 45, 127, 70, 0xA3F6);

tft.drawRect(1, 80, 50, 30, ST77XX_BLUE);
tft.fillRoundRect(78, 80, 50, 30, 5, 0x2D4E);

tft.fillCircle(25, 135, 15, 0x5BA9);
tft.drawCircle(102, 135, 15, ST77XX_GREEN);
tft.drawLine(45, 150, 80, 40, ST77XX_ORANGE);
}

void changing_value(uint8_t value) {
tft.setFont(&FreeSansBold9pt7b);
tft.setTextColor(ST77XX_WHITE, ST77XX_BLACK);

if (value < 10) {
tft.setCursor(15, 88);
tft.print("0");
tft.print(value);
} else {
tft.setCursor(15, 88);
tft.print(value);
}
}

Este código muestra cómo inicializar y manejar una pantalla TFT basada en el controlador ST7735 usando la librería Adafruit_ST7735 junto con Adafruit_GFX. Primero se definen los pines de conexión del display (CS, DC y RST) y luego se configura la comunicación SPI utilizando pines personalizados para SCK (14) y MOSI (13). En la función setup(), se inicializa la pantalla con un estilo determinado (INITR_BLACKTAB), se limpia con color negro y se llama a la función show_page(), que dibuja una página inicial con texto, líneas, triángulos, rectángulos y círculos de distintos colores, mostrando las capacidades gráficas de la librería.

En la función loop(), el programa recorre valores del 0 al 99 y los muestra en pantalla mediante la función changing_value(). Esta función actualiza una cifra en una posición fija de la pantalla usando una fuente más grande (FreeSansBold9pt7b) y color blanco sobre fondo negro. De esta forma, el código demuestra tanto cómo renderizar gráficos estáticos (formas y texto) como cómo actualizar valores dinámicos en la pantalla TFT, lo que resulta útil para interfaces visuales en proyectos con microcontroladores, por ejemplo, medidores o indicadores en sistemas embebidos.

Con esto mantenemos exactamente las mismas líneas SPI (14,13,12,27,26) que ya teníamos en la pantalla mas pequeña y aprovechamos la librería oficial de Adafruit para el ST7735 de la AZ-Delivery.​