ESP07 IR detector/demodulador

El ejemplo realiza la detección de señal de un control remoto infrarojo con el módulo ESP07-ESP8266 y muestra el resultado Hexadecimal en el Monitor Serial.

Cada tecla del control remoto genera un código único que es detectado con el sensor.

Para el ejemplo se usa un HX1838, sin embargo también funciona  un TSOP382.., TSOP384, o alguna versión que incluya el circuito de demodulación.

La versión del sensor infrarojo con detección y demodulación simplifica el circuito a un pin digital configurado como entrada en el módulo a usar, además de Vcc y Gnd.

El esquemático muestra lo sencillo de la conexión del sensor infrarojo para su lectura.

Protoboard

Como referencia de la conexiones en también se adjunta la conexión usando un protoboard.

Lectura de datos

Para un control remoto dado, por ejemplo el básico para arduino, se obtienen los diferentes códigos en Hexadecimal de las teclas presionadas usando el monitor serial.

FF5AA5
FF5AA5

Si usa un ESP07 en versión 8285, puede ser necesario configurar los baudios a 74880 baudios, si los símbolos que llegan no son legibles.

Instrucciones

Se usan las librerias Arduino IRremoteESP8266 como base para un dispositivo de control remoto con Home Assistant.

/* IRremoteESP8266: Demo Receptor Infrarojo
 * Debe usar un sensor detector/demodulador conectado al Receptor_Pin.
 *  Based on Mark Szabo's Version 0.2 June, 2017 and
 *  Ken Shirriff's IrsendDemo Version 0.1 July, 2009
 *  https://github.com/markszabo/IRremoteESP8266
 */

#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

// Sensor IR en GPIO05
const uint16_t Receptor_Pin = 5;

IRrecv irrecv(Receptor_Pin);
decode_results lectura;

void setup() {
    Serial.begin(74880);//74880, 115200
    while (!Serial){delay(50);}
    
    // Inicia receptor
    irrecv.enableIRIn();
    
    Serial.println("\n Demo: Receptor de IR en espera de mensaje");
}

void loop() {
    if (irrecv.decode(&lectura)) {
        // print() & println() no maneja enteros largos(uint64_t)
        serialPrintUint64(lectura.value, HEX);
        Serial.println("");
        
        // Prepara próximo valor
        irrecv.resume();
    }
    delay(100);
}

Con los cógidos obtenidos, el siguiente paso consiste en generar los códigos usando un LED IR para activar el dispositivo o equipo que se controlaba con el control remoto. Observe y seleccione un código del ejercicio realizado con el control remoto que haya seleccionado, el dato sirve para el próximo ejemplo como IR_Emisor.

Referencia:
https://learn.sparkfun.com/tutorials/ir-communication/all#hardware-hookup
https://github.com/markszabo/IRremoteESP8266


Decodificando

Una versión para obtener más detalles de los códigos la presenta en el ejemplo version 2 de Mark Sabo en:

https://github.com/markszabo/IRremoteESP8266/blob/master/examples/IRrecvDumpV2/IRrecvDumpV2.ino

Solo se requiere hacer el ajuste en el pin de sensor al GIPO05, con lo que se obtiene para el ejemplo anterior:

Timestamp : 000446.026
Encoding  : NEC
Code      : FF5AA5 (32 bits)
Library   : v2.6.0

Raw Timing[71]:
   +  9024, -  4556,    +   548, -   594,    +   546, -   568,    +   544, -   594, 
   +   548, -   592,    +   548, -   568,    +   546, -   594,    +   548, -   592, 
   +   548, -   566,    +   546, -  1738,    +   548, -  1710,    +   550, -  1710, 
   +   544, -  1740,    +   548, -  1712,    +   546, -  1712,    +   546, -  1740, 
   +   546, -  1712,    +   548, -   592,    +   548, -  1710,    +   548, -   592, 
   +   548, -  1710,    +   548, -  1712,    +   546, -   594,    +   548, -  1712, 
   +   544, -   596,    +   548, -  1712,    +   546, -   596,    +   548, -  1710, 
   +   546, -   594,    +   548, -   594,    +   548, -  1712,    +   548, -   592, 
   +   548, -  1710,    +   548, - 40334,    +  9024, -  2294,    +   550

uint16_t rawData[71] = {9024, 4556,  548, 594,  546, 568,  544, 594,  548, 592,  548, 568,  546, 594,  548, 592,  548, 566,  546, 1738,  548, 1710,  550, 1710,  544, 1740,  548, 1712,  546, 1712,  546, 1740,  546, 1712,  548, 592,  548, 1710,  548, 592,  548, 1710,  548, 1712,  546, 594,  548, 1712,  544, 596,  548, 1712,  546, 596,  548, 1710,  546, 594,  548, 594,  548, 1712,  548, 592,  548, 1710,  548, 40334,  9024, 2294,  550};  // NEC FF5AA5
uint32_t address = 0x0;
uint32_t command = 0x5A;
uint64_t data = 0xFF5AA5;

La información de Code, «32 bits» Es necesaria si requiere reproducir la instrucción on irsend.sendNEC(codigo,32).

En el caso de usar otro control remoto se debe disponer del número de bits.