Guía para principiantes de M5Stack: capacidades de infrarrojos PLUS2
-
Seleccione un módulo IR: por ejemplo, el módulo receptor de infrarrojos Grove.
-
Conexión de hardware: utilice la interfaz Grove o cables de puente para conectar el módulo de infrarrojos a los pines GPIO apropiados en el M5StickC Plus2.
-
Soporte de software: escriba código en Arduino o MicroPython para leer las señales IR. Las bibliotecas Arduino, como IRremote, pueden decodificar fácilmente protocolos IR comunes (por ejemplo, el protocolo NEC).
Características clave de la función infrarroja
Comentarios de código y descripciones de funciones
/** * @file ir_nec.ino * @autor SeanKwok (shaoxiang@m5stack.com) * @brief Prueba IR NEC de M5StickCPlus2 * @version 0.1 * @date 2023-12-09 * * * @Hardwares: M5StickCPlus2 * Versión @Platform: Arduino M5Stack Board Manager v2.0.9 * @Biblioteca Dependiente: * M5GFX: https://github.com/m5stack/M5GFX * M5Unificado: https://github.com/m5stack/M5Unified * M5StickCPlus2: https://github.com/m5stack/M5StickCPlus2 * IRremoto: 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_TEMPORIZADOR #define IR_TX_PIN 19 uint8_t sCommand = 0x34; uint8_t sRepeats = 0; void setup() { auto cfg = M5.config(); //To understand the underlying logic of the initialization with begin(), you can refer to the Dependent Library. StickCP2.iniciar(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); // Comience 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 } void loop() { Serial.println();//Imprime una línea en blanco para formatear la salida y aclarar la siguiente información. Serial.print(F('Enviar ahora: dirección=0x1111, comando=0x'));//Imprimir una cadena. Serial.print(sCommand, HEX);//Mostrar en formato hexadecimal. Serial.print(F(', repetidos='));//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 que la salida esté más organizada. StickCP2.Display.clear();//Actualiza la visualización de la pantalla. //drawString A method used to draw a string at a specified position. StickCP2.Display.drawString('ENVÍO 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);//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);//Dibuja un círculo relleno. delay(500); }
1. IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.begin(DISABLE_LED_FEEDBACK); // Comience con IR_SEND_PIN como pin de envío
begin
del objeto IrSender
para inicializar la función de transmisión de infrarrojos.-
DISABLE_LED_FEEDBACK
: este es un parámetro utilizado para desactivar la retroalimentación LED. Si la retroalimentación está habilitada, el LED parpadeará mientras transmite señales infrarrojas.
IrSender
utilizará un pin de transmisión de infrarrojos preestablecido (como IR_SEND_PIN
) para enviar señales de infrarrojos. Esta línea de código activa el transmisor de infrarrojos y lo prepara para enviar señales de infrarrojos.2. IrSender.setSendPin(IR_TX_PIN);
IrSender.begin(DISABLE_LED_FEEDBACK); // Comience con IR_SEND_PIN como pin de envío
Llame al método setSendPin
del objeto IrSender
para configurar el pin de transmisión de señal infrarroja 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, puede personalizar el pin de transmisión de infrarrojos en lugar de utilizar el predeterminado. Esto es especialmente útil cuando hay cambios en las conexiones de hardware o asignación 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 aclarar la siguiente información. Serial.print(F('Enviar ahora: dirección=0x1111, comando=0x'));//Imprimir una cadena. Serial.print(sCommand, HEX);//Mostrar en formato hexadecimal. Serial.print(F(', repetidos='));//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 que la salida esté más organizada.
-
Utilice
Serial.print()
para imprimir la cadena 'Enviar ahora: dirección=0x1111, comando=0x'
. La macroF()
se utiliza aquí para almacenar la cadena en la memoria flash, lo que ayuda a conservar la RAM.
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);
Muestre 'IR NEC SEND' usando el método drawString
para representar la cadena en una posición específica en la pantalla.
-
StickCP2.Display.width() / 2
: esto garantiza 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.
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.
Muestra información del comando representando la cadena 'CMD:0x' junto con la representación hexadecimal del Variable sCommand
.
-
String(sCommand, HEX)
: convierte la variablesCommand
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 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**, agregando una nueva línea al final para garantizar que la siguiente salida comience en una nueva línea.-
F('Enviar NEC estándar con dirección de 16 bits')
: la macroF()
almacena la cadena ' Envía NEC estándar con dirección de 16 bits en memoria flash (almacenamiento de programas) en lugar de **RAM**, lo que ayuda a conservar la 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);//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 de destino o destino de comando.sCommand
: este es el valor del comando que se enviará. Puede ser un valor de 8 bits 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 de el dispositivo que se está controlando.IrSender.sendNEC(0x1111, sCommand, sRepeats);//Envía 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, generalmente para garantizar la confiabilidad de la señal o cumplir con el >requisitos del dispositivo de destino.
Programación Fácil
Escenarios de Aplicación Flexibles
Pin Infrarrojo Preconfigurado