ESP8266 - Control remoto infrarrojo

Probablemente te hayas topado con el control remoto por infrarrojos, también llamado control remoto IR, al usar dispositivos como televisores y aires acondicionados en casa... Este tutorial te enseña cómo usar el control remoto por infrarrojos (IR) y un receptor infrarrojo para controlar el ESP8266. En detalle, aprenderemos:

Controlador de infrarrojos - Receptor de infrarrojos - ESP8266 NodeMCU

Hardware Requerido

1×ESP8266 NodeMCU
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×Cables Puente
1×(Opcional) 5V Power Adapter
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

Or you can buy the following kits:

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 de infrarrojos

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

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

Un kit de infrarrojos típicamente consta de los dos componentes mencionados arriba: un mando a distancia por infrarrojos y un receptor de infrarrojos.

Control remoto de infrarrojos

El control remoto por infrarrojos es un dispositivo portátil que transmite señales infrarrojas. Está equipado con un panel de botones que cuenta con varias teclas:

  • Cada botón del control remoto cumple una función o comando distinto.
  • Cuando se presiona un botón, el control remoto emite una señal infrarroja invisible. Esta señal contiene un código o patrón especial vinculado al botón presionado.
  • Como estas señales infrarrojas pertenecen al espectro infrarrojo, no pueden ser vistas por el ojo humano.
controlador de infrarrojos
image source: diyables.io

Receptor IR

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 que llegan 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 sensor receptor IR
image source: diyables.io
Adaptador de sensor para receptor infrarrojo
image source: diyables.io

Diagrama de pines del receptor infrarrojo

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

  • Pin VCC: Conecte este pin al pin de 3.3V o 5V del ESP8266 o a una fuente de alimentación externa.
  • Pin GND: Conecte este pin al pin GND del ESP8266 o a una fuente de alimentación externa.
  • Pin OUT (Salida): Este pin es la salida del módulo receptor IR. Está conectado a un pin de entrada digital en el ESP8266.

Cómo funciona

Cuando un usuario presiona un botón en el control remoto por infrarrojos, se llevan a cabo las siguientes acciones:

  • El control remoto de infrarrojos convierte el comando del botón en una señal infrarroja utilizando un protocolo específico.
  • El control remoto de infrarrojos emite la señal infrarroja codificada.
  • El receptor de infrarrojos capta la señal infrarroja emitida.
  • El receptor de infrarrojos decodifica la señal infrarroja, traduciéndola de vuelta al comando original.
  • El ESP8266 lee y recibe el comando del receptor de infrarrojos.
  • El ESP8266 asigna el comando recibido al botón correspondiente presionado en el control remoto de infrarrojos.

En resumen, estos pasos ilustran cómo la pulsación de un botón del control remoto IR se transforma en un comando comprensible que puede ser utilizado por el ESP8266.

No te preocupes si parece complicado. Con la ayuda de la DIYables_IRcontroller library, se vuelve increíblemente fácil.

Diagrama de Cableado

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

Diagrama de cableado del control remoto IR ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

Diagrama de cableado entre ESP8266 y sensor receptor IR

Diagrama de cableado del control remoto IR para ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

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

Antes de conectar el sensor receptor infrarrojo al ESP8266, tiene la opción de conectarlo al adaptador. Esto facilita la configuración y garantiza una conexión adecuada entre el sensor receptor infrarrojo y el ESP8266.

Adaptador receptor IR para ESP8266 NodeMCU
image source: diyables.io

Cómo programar para el control remoto IR

  • Incluir la biblioteca:
#include <DIYables_IRcontroller.h> // Library for IR Receiver
  • Declara un objeto DIYables_IRcontroller_17 o DIYables_IRcontroller_21 que corresponda a un control remoto 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 pulsa 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
  • Después de detectar la pulsación de una tecla, puedes realizar acciones específicas según cada tecla.

Código ESP8266

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN D5 // The ESP8266 pin D5 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 ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN D5 // The ESP8266 pin D5 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

Para empezar a trabajar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el tutorial cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usas ESP8266.
  • Conecta los componentes como se muestra en el diagrama.
  • Conecta la placa ESP8266 a tu computadora usando un cable USB.
  • Abre Arduino IDE en tu computadora.
  • Elige la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Módulo)), y su puerto COM respectivo.
  • Haz clic en el icono Bibliotecas en la barra izquierda del Arduino IDE.
  • 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 ESP8266 NodeMCU DIYables_IRcontroller
  • Se le pedirá que instale la dependencia de la biblioteca como se muestra en la imagen a continuación
Biblioteca IRremote para ESP8266 NodeMCU
  • 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 ESP8266
  • Pulsa las teclas del control remoto una por una
  • Consulta el resultado en el Monitor Serial.
  • Cuando pulses las teclas en un mando IR de 17 teclas una por una, lo siguiente es el resultado:
COM6
Send
UP DOWN LEFT RIGHT OK # 0 * 9 8 7 6 5 4 3 2 1
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 utilizando mandos a distancia IR. Esto significa que puedes hacer 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!