Guía para principiantes de M5Stack: capacidades de infrarrojos PLUS2

El M5StickC Plus2 es un módulo de desarrollo compacto y versátil que integra un potente transmisor de infrarrojos (IR), abriendo nuevas posibilidades para aplicaciones de control inteligente y comunicación. Esta característica permite que el dispositivo envíe señales IR.
 
El M5StickC Plus2 no tiene un receptor de infrarrojos (IR) incorporado, pero puede recibir señales IR conectando un módulo IR externo. El ecosistema M5Stack ofrece varios módulos IR compatibles, como el módulo receptor IR Grove, que se puede conectar al M5StickC Plus2 a través de la interfaz Grove.
Para habilitar la recepción IR, siga estos pasos:
  1. Seleccione un módulo IR: Por ejemplo, el módulo Grove IR Receiver.
  2. Conexión de hardware: Use la interfaz Grove o cables puente para conectar el módulo IR a los pines GPIO apropiados en el M5StickC Plus2.
  3. Soporte de software: Escribe código en Arduino o MicroPython para leer las señales IR. Las bibliotecas de Arduino, como IRremote, pueden decodificar fácilmente los protocolos IR comunes (por ejemplo, protocolo NEC).

Características clave de la función infrarroja

Transmisión y Recepción IR
Con el transmisor IR incorporado, el M5StickC Plus2 puede imitar las funciones de los controles remotos tradicionales, enviando señales para controlar televisores, aires acondicionados y otros dispositivos compatibles con IR.
El receptor IR permite que el módulo aprenda y decodifique señales de otros controles remotos, haciéndolo adaptable para múltiples escenarios de control.

  

/**
 * @file ir_nec.ino
 * @autor SeanKwok (shaoxiang@m5stack.com)
 * @brief Prueba IR NEC de M5StickCPlus2
 * @version 0.1
 * @date 2023-12-09
 *
 *
 * @Hardwares: M5StickCPlus2
 * @Platform Versión: Arduino M5Stack Board Manager v2.0.9
 * Biblioteca @Dependent:
 * M5GFX: https://github.com/m5stack/M5GFX
 * M5Unified: https://github.com/m5stack/M5Unified
 * M5StickCPlus2: https://github.com/m5stack/M5StickCPlus2
 * IRremote: https://github.com/Arduino-IRremote/Arduino-IRremote
 */

#define DISABLE_CODE_FOR_RECEIVER  // Desactiva el reinicio del receptor después de cada
                                   // send. Saves 450 bytes program memory and
                                   // 269 bytes RAM if receiving functions are
                                   // not used.
#define ENVIAR_PWM_POR_TIMER
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sRepeticiones = 0;

configuración vacía() {
    auto cfg = M5.config();
    
    //To understand the underlying logic of the initialization with begin(), you can refer to the Dependent Library.
    StickCP2.begin(cfg);

    //Display rotation directions
    StickCP2.Display.setRotation(1);

    //  The color of the text displayed on the screen.
    StickCP2.Display.setTextColor(VERDE);

    //Text alignment middle_center means aligning the center of the text to the specified coordinate position.
    StickCP2.Display.setTextDatum(middle_center);

    //Font Styles
    StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);

    //Font size
    StickCP2.Display.setTextSize(1);

    IrSender.begin(DISABLE_LED_FEEDBACK);  // Comenzar con IR_SEND_PIN como pin de envío
    IrSender.setSendPin(IR_TX_PIN);//Configuración del pin de transmisión de señal infrarroja
}

bucle vacío() {
    Serial.println();//Imprime una línea en blanco para formatear la salida y hacer que la información siguiente sea más clara.
    Serial.print(F('Enviar ahora: dirección=0x1111, comando=0x'));//Imprimir una cadena.
    Serial.print(sCommand, HEX);//Mostrar en formato hexadecimal.
    Serial.print(F(', repeticiones='));//Indicar el número de transmisiones repetidas.
    Serial.print(sRepeats);//El número de veces que se envía el comando.
    Serial.println();//Imprime otra línea en blanco para hacer que la salida sea más organizada.

    StickCP2.Display.clear();//Actualizar la pantalla.

    //drawString A method used to draw a string at a specified position.
    StickCP2.Display.drawString('IR NEC ENVIAR', StickCP2.Display.width() / 2,
                                StickCP2.Display.height() / 2 - 40);

    StickCP2.Display.drawString('DIR:0x1111', StickCP2.Display.width() / 2,
                                StickCP2.Display.height() / 2);

    StickCP2.Display.drawString('CMD:0x' + String(sCommand, HEX),
                                StickCP2.Display.width() / 2,
                                StickCP2.Display.height() / 2 + 40);

    Serial.println(F('Enviar NEC estándar con dirección de 16 bits'))

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Dibujar un círculo.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Enviar una señal infrarroja siguiendo el protocolo NEC.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Incrementar valores de envío
     */
    sCommand += 1;//Incrementa el valor del comando.
    delay(500);//Retraso de 500 milisegundos.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Dibujar un círculo relleno.
    retraso(500);
}
  
✔ ¡Copiado!

 

 

1. IrSender.begin(DESACTIVAR_RETROALIMENTACIÓN_LED);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Comenzar con IR_SEND_PIN como pin de envío
        
Llame al método begin del objeto IrSender para inicializar la función de transmisión infrarroja.
  • DISABLE_LED_FEEDBACK: Este es un parámetro utilizado para desactivar la retroalimentación LED. Si la retroalimentación está activada, el LED parpadeará mientras se transmiten señales infrarrojas.
Por defecto, IrSender utilizará un pin de transmisión infrarroja preestablecido (como IR_SEND_PIN) para enviar señales infrarrojas. Esta línea de código activa el transmisor infrarrojo y lo prepara para enviar señales infrarrojas.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Comenzar con IR_SEND_PIN como pin de envío
        

Llama al método setSendPin del objeto IrSender para configurar el pin de transmisión de la señal infrarroja a IR_TX_PIN.

  • IR_TX_PIN es un número de pin definido que especifica el pin exacto utilizado para transmitir señales infrarrojas.

Al usar esta línea de código, puedes personalizar el pin de transmisión infrarroja en lugar de usar el predeterminado. Esto es especialmente útil cuando hay cambios en las conexiones de hardware o el mapeo de pines.

3. Serial.print(F('Enviar ahora: dirección=0x1111, comando=0x'));

                Serial.println();//Imprime una línea en blanco para formatear la salida y hacer que la información siguiente sea más clara.
                Serial.print(F('Enviar ahora: dirección=0x1111, comando=0x'));//Imprimir una cadena.
                Serial.print(sCommand, HEX);//Mostrar en formato hexadecimal.
                Serial.print(F(', repeticiones='));//Indicar el número de transmisiones repetidas.
                Serial.print(sRepeats);//El número de veces que se envía el comando.
                Serial.println();//Imprime otra línea en blanco para hacer que la salida sea más organizada.
        
  • Usa Serial.print() para imprimir la cadena 'Send now: address=0x1111, command=0x'. La macro F() se utiliza aquí para almacenar la cadena en la memoria Flash, ayudando a conservar la RAM.
4. StickCP2.Display.drawString(' ', , );
  
                //drawString A method used to draw a string at a specified position.
                StickCP2.Display.drawString('IR NEC SEND', StickCP2.Display.width() / 2,
                                            StickCP2.Display.height() / 2 - 40);
            
                StickCP2.Display.drawString('ADDR:0x1111', StickCP2.Display.width() / 2,
                                            StickCP2.Display.height() / 2);
            
                StickCP2.Display.drawString('CMD:0x' + String(sCommand, HEX),
                                            StickCP2.Display.width() / 2,
                                            StickCP2.Display.height() / 2 + 40);
        

Mostrar 'IR NEC SEND' usando el método drawString para renderizar la cadena en una posición especificada en la pantalla.

  • StickCP2.Display.width() / 2: Esto asegura que la cadena esté centrada horizontalmente en la pantalla.

  • StickCP2.Display.height() / 2 - 40: Esto coloca la cadena 40 píxeles por encima del centro vertical de la pantalla.

Mostrar 'ADDR:0x1111' usando el método drawString para mostrar la información de la dirección.
  • StickCP2.Display.width() / 2: Centra el texto horizontalmente en la pantalla.
  • StickCP2.Display.height() / 2: Centra el texto verticalmente, colocándolo justo en el medio de la pantalla.

Mostrar información del comando representando la cadena 'CMD:0x' junto con la representación hexadecimal de la variable sCommand.

  • String(sCommand, HEX): Convierte la variable sCommand en una cadena hexadecimal.

  • StickCP2.Display.width() / 2: Centra el texto horizontalmente en la pantalla.

  • StickCP2.Display.height() / 2 + 40: Coloca el texto 40 píxeles por debajo del centro vertical de la pantalla.

5. Serial.println(F('Enviar NEC estándar con dirección de 16 bits'))

                Serial.println(F('Enviar NEC estándar con dirección de 16 bits'))

                StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Dibujar un círculo.
        
Usa Serial.println() para imprimir información en el **monitor serial**, añadiendo un salto de línea al final para asegurar que la siguiente salida comience en una nueva línea.

  • F('Enviar NEC estándar con dirección de 16 bits'): La macro F() almacena la cadena 'Enviar NEC estándar con dirección de 16 bits' en la memoria Flash (almacenamiento del programa) en lugar de en la **RAM**, ayudando a conservar memoria.
  • La salida 'Enviar NEC estándar con dirección de 16 bits' indica que se está transmitiendo una señal infrarroja con protocolo NEC estándar con una **dirección de 16 bits**.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Enviar una señal infrarroja siguiendo el protocolo NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Incrementar valores de envío
                 */
        
0x1111: Esta es la dirección de la señal infrarroja, que representa un valor de dirección de 16 bits utilizado para identificar el dispositivo objetivo o el destino del comando.
sCommand: Este es el valor del comando que se enviará. Puede ser un valor de 8 bits o 16 bits, especificando la operación exacta que el dispositivo objetivo debe realizar.
sRepeats: Indica el número de veces que se repite la señal, generalmente para mejorar la fiabilidad de la señal o cumplir con requisitos específicos del dispositivo que se controla.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Enviar una señal infrarroja siguiendo el protocolo NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Incrementar valores de envío
                 */
        
  • 0x1111: Esta es la dirección del dispositivo de la señal infrarroja, utilizada para identificar un dispositivo específico.
  • 0x2223: Este es el código de comando enviado al dispositivo, especificando la operación a realizar.
  • sRepeats: Representa el número de veces que se repite la señal, típicamente para asegurar la fiabilidad de la señal o cumplir con los requisitos del dispositivo objetivo.

  

Programación fácil

La funcionalidad IR se puede acceder y programar fácilmente utilizando el framework Arduino o UIFlow, el entorno de programación visual de M5Stack. Los desarrolladores pueden llamar a IrSender.begin() para inicializar la función de envío IR y configurar parámetros como DISABLE_LED_FEEDBACK, que desactiva el indicador LED parpadeante durante la transmisión.

 

Escenarios de Aplicación Flexibles

Control de Hogar Inteligente: Automatiza los electrodomésticos enviando comandos IR directamente desde el M5StickC Plus2.
Aprendizaje remoto: Grabe señales de controles remotos existentes para crear una solución de control remoto universal.
IoT y Robótica: Integra comunicación IR para comandos inalámbricos simples entre dispositivos o robots.

  

Pin infrarrojo preconfigurado

El M5StickC Plus2 viene con un pin de transmisión IR preasignado, típicamente etiquetado como IR_SEND_PIN. Esto facilita el despliegue de funciones IR sin configuraciones de hardware complicadas.

    

Con su tamaño compacto y capacidades integradas de infrarrojos, el M5StickC Plus2 ofrece una plataforma conveniente y versátil para desarrolladores que trabajan en proyectos de control remoto, automatización del hogar o comunicación inalámbrica. Esta característica transforma el dispositivo de una simple herramienta de desarrollo a una herramienta poderosa para aplicaciones IoT y embebidas.

 

Dejar un comentario

Tu dirección de correo electrónico no se publicará. Los campos requeridos están marcados con *

Regístrate para nuestro boletín

Obtén la información más reciente sobre nuestros productos y ofertas especiales.