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

El M5StickC Plus2 es un módulo de desarrollo compacto y versátil que integra un potente transmisor infrarrojo (IR), lo que abre nuevas posibilidades para aplicaciones de control y comunicación inteligentes. Esta función permite al dispositivo enviar señales IR.
 
El M5StickC Plus2 no tiene un receptor infrarrojo (IR) integrado, 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 puede conectarse al M5StickC Plus2 mediante la interfaz Grove.
Para activar la recepción IR, sigue estos pasos:
  1. Selecciona un módulo IR: Por ejemplo, el módulo receptor IR Grove.
  2. Conexión del hardware: Usa la interfaz Grove o cables puente para conectar el módulo IR a los pines GPIO correspondientes del M5StickC Plus2.
  3. Compatibilidad de software: Escribe código en Arduino o MicroPython para leer las señales IR. Las bibliotecas de Arduino, como IRremote, pueden descodificar fácilmente protocolos IR comunes (por ejemplo, el protocolo NEC).

Características principales de la función infrarroja

Transmisión y recepción de IR
Con el transmisor IR integrado, el M5StickC Plus2 puede imitar las funciones de los mandos a distancia tradicionales y enviar señales para controlar televisores, aires acondicionados y otros dispositivos compatibles con IR.
El receptor IR permite que el módulo aprenda y descodifique señales de otros mandos a distancia, lo que lo hace adaptable a múltiples escenarios de control.

  

/**
 * @file ir_nec.ino
 * @author SeanKwok (shaoxiang@m5stack.com)
 * @brief Prueba IR NEC del M5StickCPlus2
 * @version 0.1
 * @date 2023-12-09
 *
 *
 * @Hardwares: M5StickCPlus2
 * @Platform Version: Arduino M5Stack Board Manager v2.0.9
 * @Dependent Library:
 * 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
                                   // envían. Ahorra 450 bytes de memoria de programa y
                                   // 269 bytes de RAM si las funciones de recepción se
                                   // no se utiliza.
#define SEND_PWM_BY_TIMER
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sRepeats = 0;

void setup() {
    auto cfg = M5.config();
    
    //Para comprender la lógica subyacente de la inicialización con begin(), consulta la biblioteca dependiente.
    StickCP2.begin(cfg);

    //Direcciones de rotación de la pantalla
    StickCP2.Display.setRotation(1);

    //  El color del texto que se muestra en la pantalla.
    StickCP2.Display.setTextColor(GREEN);

    //La alineación de texto middle_center significa alinear el centro del texto con la posición de coordenadas especificada.
    StickCP2.Display.setTextDatum(middle_center);

    //Estilos de fuente
    StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);

    //Tamaño de fuente
    StickCP2.Display.setTextSize(1);

    IrSender.begin(DISABLE_LED_FEEDBACK);  // Inicia con IR_SEND_PIN como pin de transmisión
    IrSender.setSendPin(IR_TX_PIN);//Configuración del pin de transmisión de señales infrarrojas
}

void loop() {
    Serial.println();//Imprime una línea en blanco para dar formato a la salida y hacer más clara la información siguiente.
    Serial.print(F('Send now: address=0x1111, command=0x'));//Imprime una cadena.
    Serial.print(sCommand, HEX);//Muestra el valor en formato hexadecimal.
    Serial.print(F(', repeats='));//Indica 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 organizar mejor la salida.

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

    //drawString Un método utilizado para dibujar una cadena en una posición especificada.
    StickCP2.Display.drawString('ENVIAR IR NEC', 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);

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

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Dibuja un círculo.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envía una señal infrarroja siguiendo el protocolo NEC.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Envía una señal infrarroja siguiendo el protocolo Onkyo.
    /*
     * Incrementar los valores de envío
     */
    sCommand += 1;//Incrementa el valor del comando.
    delay(500);//Espera 500 milisegundos.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Dibuja un círculo relleno.
    delay(500);
}
  
✔ ¡Copiado!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Inicia con IR_SEND_PIN como pin de transmisión
        
Llama 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 del LED. Si la retroalimentación está activada, el LED parpadeará mientras se transmiten señales infrarrojas.
De forma predeterminada, 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);  // Inicia con IR_SEND_PIN como pin de transmisión
        

Llama al método setSendPin del objeto IrSender para establecer el pin de transmisión de señales infrarrojas en 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 utilizar esta línea de código, puedes personalizar el pin de transmisión infrarroja en lugar de usar el predeterminado. Esto resulta especialmente útil cuando hay cambios en las conexiones del hardware o en la asignación de pines.

3. Serial.print(F('Send now: address=0x1111, command=0x'));

                Serial.println();//Imprime una línea en blanco para dar formato a la salida y hacer más clara la información siguiente.
                Serial.print(F('Send now: address=0x1111, command=0x'));//Imprime una cadena.
                Serial.print(sCommand, HEX);//Muestra el valor en formato hexadecimal.
                Serial.print(F(', repeats='));//Indica 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 organizar mejor la salida.
        
  • 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, lo que ayuda a ahorrar RAM.
4. StickCP2.Display.drawString(' ', , );
  
                //drawString Un método utilizado para dibujar una cadena en una posición especificada.
                StickCP2.Display.drawString('ENVIAR IR NEC', 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);
        

Muestra 'ENVIAR IR NEC' usando el método drawString para representar la cadena en una posición especificada de la pantalla.

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

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

Muestra '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 centro de la pantalla.

Muestra 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);//Dibuja un círculo.
        
Usa Serial.println() para imprimir información en el **monitor serie**, añadiendo un salto de línea al final para garantizar que la siguiente salida comience en una línea nueva.

  • 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 la **RAM**, lo que ayuda a conservar memoria.
  • La salida 'Enviar NEC estándar con dirección de 16 bits' indica que se está transmitiendo una señal infrarroja del protocolo NEC estándar con una **dirección de 16 bits**.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envía una señal infrarroja siguiendo el protocolo NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Envía una señal infrarroja siguiendo el protocolo Onkyo.
                /*
                 * Incrementar los 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 de destino o el destino del comando.
sCommand: Este es el valor del comando que se enviará. Puede ser un valor de 8 o 16 bits que especifica la operación exacta que debe realizar el dispositivo de destino.
sRepeats: Indica el número de veces que se repite la señal, normalmente para mejorar la fiabilidad de la señal o cumplir requisitos específicos del dispositivo que se controla.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envía una señal infrarroja siguiendo el protocolo NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Envía una señal infrarroja siguiendo el protocolo Onkyo.
                /*
                 * Incrementar los 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, que especifica la operación que se debe realizar.
  • sRepeats: Representa el número de veces que se repite la señal, normalmente para garantizar la fiabilidad de la señal o cumplir los requisitos del dispositivo de destino.

  

Programación sencilla

Se puede acceder fácilmente a la funcionalidad IR y programarla mediante 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 del hogar inteligente: Automatiza los electrodomésticos enviando comandos IR directamente desde el M5StickC Plus2.
Mando de aprendizaje: Graba señales de mandos existentes para crear una solución de mando universal.
IoT y robótica: Integra la comunicación IR para enviar comandos inalámbricos sencillos entre dispositivos o robots.

  

Pin infrarrojo preconfigurado

El M5StickC Plus2 viene con un pin de transmisión IR preasignado, normalmente denominado IR_SEND_PIN. Esto facilita la implementación de funciones IR sin configuraciones de hardware complicadas.

    

Con su tamaño compacto y sus capacidades infrarrojas integradas, el M5StickC Plus2 ofrece una plataforma práctica y versátil para desarrolladores que trabajan en proyectos de control remoto, automatización del hogar o comunicación inalámbrica. Esta función transforma el dispositivo de una simple herramienta de desarrollo en una potente herramienta para aplicaciones de IoT y sistemas embebidos.

 

Deja un comentario

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

Regístrate en nuestro boletín de noticias

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

Website Feedback

Help us improve OpenELAB

Found a website issue or have an idea? Tell us what would make your experience better.