ESP32 - Control remoto IR

Probablemente te hayas encontrado con el control remoto infrarrojo, también llamado el control remoto IR, al usar dispositivos como televisores y aires acondicionados en casa... En esta guía, aprenderemos a usar el control remoto infrarrojo (IR) y un receptor infrarrojo para controlar el ESP32. En detalle, aprenderemos:

Controlador IR - Receptor IR - ESP32

Hardware Requerido

1×Módulo de Desarrollo ESP32 ESP-WROOM-32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×IR Remote Controller and Receiver Kit
1×Batería CR2025 (para control remoto IR)
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del control remoto IR

Un sistema de control por infrarrojos tiene dos componentes: un mando a distancia por infrarrojos y un receptor infrarrojo.

  • El control remoto IR se utiliza para enviar comandos mediante señales infrarrojas.
  • El receptor infrarrojo captura e interpreta estas señales para controlar el dispositivo.

Un kit de infrarrojos suele consistir en los dos componentes mencionados anteriormente: un control remoto IR y un receptor IR.

Control remoto IR

El control remoto de infrarrojos es un dispositivo portátil que emite señales infrarrojas. Está diseñado con un teclado que cuenta con múltiples botones:

  • Cada botón del control remoto está asignado a una función o comando específica.
  • Cuando se pulsa un botón, el control remoto emite una señal infrarroja que contiene un código o patrón único vinculado al botón pulsado.
  • Estas señales infrarrojas se encuentran dentro del espectro infrarrojo y no son visibles para el ojo humano.
controlador infrarrojo
image source: diyables.io

Receptor de infrarrojos

El módulo receptor IR es un sensor que detecta y recibe las señales infrarrojas emitidas por el control remoto.

El receptor infrarrojo detecta las señales infrarrojas entrantes y las convierte en el código (comando) que representa el botón presionado en el control remoto.

El receptor IR puede ser un sensor o un módulo. Puedes usar las siguientes opciones:

  • Solo módulo receptor IR
  • Solo sensor receptor IR
  • Sensor receptor IR + adaptador
módulo receptor de infrarrojos
image source: diyables.io
Adaptador de sensor receptor IR
image source: diyables.io

Pinout del receptor IR

El módulo o sensor receptor IR tiene tres pines:

  • Pin VCC: Conecta este pin al pin de 3.3V o 5V del ESP32 o a una fuente de alimentación externa.
  • Pin GND: Conecta este pin al pin GND del ESP32 o a una fuente de alimentación externa.
  • Pin OUT (Salida): Este pin es la salida del módulo receptor IR. Conéctalo a un pin de entrada digital en el ESP32.

Cómo funciona

Cuando el usuario pulsa un botón en el control remoto IR.

  • El mando a distancia IR codifica la señal infrarroja con el comando correspondiente al botón mediante un protocolo específico
  • El mando a distancia IR emite la señal infrarroja codificada
  • El receptor IR recibe la señal infrarroja codificada
  • El receptor IR decodificó la señal infrarroja codificada en el comando
  • El ESP32 lee el comando del receptor IR
  • El ESP32 mapea el comando a la tecla pulsada

Cuando se pulsa un botón en el control remoto por infrarrojos, ocurre la siguiente secuencia de eventos:

  • El control remoto IR codifica el comando del botón en una señal infrarroja utilizando un protocolo específico.
  • La señal infrarroja codificada es emitida por el control remoto IR.
  • El receptor IR captura y recibe la señal infrarroja codificada.
  • El receptor IR decodifica la señal infrarroja, convirtiéndola de nuevo en el comando original.
  • El ESP32 lee y recupera el comando desde el receptor IR.
  • El ESP32 mapea el comando recibido al botón correspondiente que fue presionado en el control remoto IR.

En esencia, estos pasos describen cómo la pulsación de un botón del control remoto IR se transforma en un comando reconocible que puede ser entendido y procesado por el ESP32.

Regenerar respuesta

Puede parecer complicado, pero no te preocupes. Gracias a la librería DIYables_IRcontroller, que es fácil de usar, resulta increíblemente fácil de lograr.

Diagrama de Cableado

Diagrama de cableado entre ESP32 y el módulo receptor IR

Diagrama de cableado del control remoto IR para ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Diagrama de cableado entre ESP32 y el sensor receptor de infrarrojos

Diagrama de cableado del control remoto IR para ESP32

This image is created using Fritzing. Click to enlarge image

Diagrama de cableado entre ESP32 y el sensor receptor IR y el adaptador

Antes de conectar el sensor receptor de infrarrojos al ESP32, tienes la opción de conectarlo al adaptador. Esto facilita la integración y la configuración del sensor receptor de infrarrojos con el ESP32.

Adaptador receptor de control remoto por infrarrojos para ESP32
image source: diyables.io

Cómo programar para un control remoto infrarrojo

  • Incluir la biblioteca:
#include <DIYables_IRcontroller.h> // Library for IR Receiver
  • Declara un objeto DIYables_IRcontroller_17 o DIYables_IRcontroller_21 que corresponda a los mandos a distancia IR de 17 teclas o 21 teclas:
DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms // OR DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms
  • Inicializar el controlador IR.
irController.begin();
  • En el bucle, verifica si se presiona una tecla o no. Si es así, obtén la tecla
Key17 key = irController.getKey(); // if using 17-key IR controller // OR Key21 key = irController.getKey(); // if using 21-key IR controller
  • Al detectar una pulsación de tecla, puedes realizar acciones en función de cada tecla.

Código ESP32

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 19 // The ESP32 pin GPIO19 connected to IR controller DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key17 key = irController.getKey(); if (key != Key17::NONE) { switch (key) { case Key17::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key17::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key17::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key17::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key17::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key17::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key17::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key17::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key17::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; case Key17::KEY_STAR: Serial.println("*"); // TODO: YOUR CONTROL break; case Key17::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key17::KEY_SHARP: Serial.println("#"); // TODO: YOUR CONTROL break; case Key17::KEY_UP: Serial.println("UP"); // TODO: YOUR CONTROL break; case Key17::KEY_DOWN: Serial.println("DOWN"); // TODO: YOUR CONTROL break; case Key17::KEY_LEFT: Serial.println("LEFT"); // TODO: YOUR CONTROL break; case Key17::KEY_RIGHT: Serial.println("RIGHT"); // TODO: YOUR CONTROL break; case Key17::KEY_OK : Serial.println("OK"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }
/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 19 // The ESP32 pin GPIO19 connected to IR controller DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key21 key = irController.getKey(); if (key != Key21::NONE) { switch (key) { case Key21::KEY_CH_MINUS: Serial.println("CH-"); // TODO: YOUR CONTROL break; case Key21::KEY_CH: Serial.println("CH"); // TODO: YOUR CONTROL break; case Key21::KEY_CH_PLUS: Serial.println("CH+"); // TODO: YOUR CONTROL break; case Key21::KEY_PREV: Serial.println("<<"); // TODO: YOUR CONTROL break; case Key21::KEY_NEXT: Serial.println(">>"); // TODO: YOUR CONTROL break; case Key21::KEY_PLAY_PAUSE: Serial.println(">||"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_MINUS: Serial.println("–"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_PLUS: Serial.println("+"); // TODO: YOUR CONTROL break; case Key21::KEY_EQ: Serial.println("EQ"); // TODO: YOUR CONTROL break; case Key21::KEY_100_PLUS: Serial.println("100+"); // TODO: YOUR CONTROL break; case Key21::KEY_200_PLUS: Serial.println("200+"); // TODO: YOUR CONTROL break; case Key21::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key21::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key21::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key21::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key21::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key21::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key21::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key21::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key21::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key21::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }

Pasos R\u00e1pidos

  • Si esta es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en el IDE de Arduino.
  • Haz clic en el icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca "DIYables_IRcontroller", luego encuentra la biblioteca DIYables_IRcontroller de DIYables
  • Haz clic en el botón Instalar para instalar la biblioteca DIYables_IRcontroller.
Biblioteca ESP32 DIYables_IRcontroller
  • Se le pedirá instalar la dependencia de la biblioteca como se muestra en la imagen a continuación:
Biblioteca IRremote para ESP32
  • Haz clic en el botón Instalar todo para instalar la dependencia
  • Copia el código anterior y ábrelo con Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código al ESP32
  • Presiona las teclas del control remoto una por una
  • Observa el resultado en el Monitor Serial.
  • Cuando presiones las teclas de un control remoto IR de 21 teclas una por una, se muestra el siguiente resultado:
COM6
Send
9 8 7 6 5 4 3 2 1 0 200+ 100+ EQ + – || >> << CH+ CH CH-
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Ahora tienes la capacidad de personalizar el código y controlar diferentes dispositivos como LEDs, ventiladores, bombas, actuadores y más mediante mandos a distancia por infrarrojos. Esto significa que puedes realizar cambios en el código para hacer que estos dispositivos respondan a tus comandos enviados a través del control remoto.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!