-
Selecciona un módulo IR: Por ejemplo, el módulo receptor IR Grove.
-
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.
-
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
/**
* @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);
}
1. IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.begin(DISABLE_LED_FEEDBACK); // Inicia con IR_SEND_PIN como pin de transmisión
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.
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_PINes 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 macroF()se utiliza aquí para almacenar la cadena en la memoria Flash, lo que ayuda a ahorrar RAM.
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.
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 variablesCommanden 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.
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 macroF()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. 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
Escenarios de aplicación flexibles
Pin infrarrojo preconfigurado
