-
Seleziona un modulo IR: ad esempio, il modulo Grove IR Receiver.
-
Connessione hardware: Usa l'interfaccia Grove o fili jumper per collegare il modulo IR ai pin GPIO appropriati sul M5StickC Plus2.
-
Supporto software: Scrivi codice in Arduino o MicroPython per leggere i segnali IR. Le librerie Arduino, come IRremote, possono decodificare facilmente i protocolli IR comuni (ad esempio, protocollo NEC).

Caratteristiche principali della funzione a infrarossi
/** * @file ir_nec.ino * @autore SeanKwok (shaoxiang@m5stack.com) * @brief Test IR NEC di M5StickCPlus2 * @version 0.1 * @date 2023-12-09 * * * @Hardwares: M5StickCPlus2 * @Platform Versione: Arduino M5Stack Board Manager v2.0.9 * @Libreria Dipendente: * 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 // Disabilita il riavvio del ricevitore dopo ogni // send. Saves 450 bytes program memory and // 269 bytes RAM if receiving functions are // not used. #define INVIA_PWM_CON_TIMER #define IR_TX_PIN 19 uint8_t sCommand = 0x34; uint8_t sRipetizioni = 0; impostazione nulla() { auto cfg = M5.config(); //To understand the underlying logic of the initialization with begin(), you can refer to the Dependent Library. StickCP2.inizia(cfg); //Display rotation directions StickCP2.Display.setRotation(1); // The color of the text displayed on the screen. StickCP2.Display.setTextColor(GREEN); //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); // Inizia con IR_SEND_PIN come pin di invio IrSender.setSendPin(IR_TX_PIN);//Impostazioni del pin di trasmissione del segnale a infrarossi } ciclo vuoto() { Serial.println();//Stampa una riga vuota per formattare l'output e rendere le informazioni seguenti più chiare. Serial.print(F('Invia ora: indirizzo=0x1111, comando=0x'));//Stampa una stringa. Serial.print(sCommand, HEX);//Visualizza in formato esadecimale. Serial.print(F(', ripetizioni='));//Indica il numero di trasmissioni ripetute. Serial.print(sRepeats);//Il numero di volte che il comando viene inviato. Serial.println();//Stampa un'altra riga vuota per rendere l'output più organizzato. StickCP2.Display.clear();//Aggiorna la visualizzazione dello schermo. //drawString A method used to draw a string at a specified position. StickCP2.Display.drawString('INVIO IR NEC', StickCP2.Display.width() / 2, StickCP2.Display.height() / 2 - 40); StickCP2.Display.drawString('INDIRIZZO:0x1111', StickCP2.Display.width() / 2, StickCP2.Display.height() / 2); StickCP2.Display.drawString('CMD:0x' + String(sCommand, HEX), StickCP2.Display.larghezza() / 2, StickCP2.Display.height() / 2 + 40); Serial.println(F('Invia NEC standard con indirizzo a 16 bit')) StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Disegna un cerchio. IrSender.sendNEC(0x1111, sCommand, sRepeats);//Invia un segnale a infrarossi seguendo il protocollo NEC. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Incrementa i valori di invio */ sCommand += 1;//Incrementa il valore del comando. delay(500);//Ritardo di 500 millisecondi. StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Disegna un cerchio pieno. ritardo(500); }
1. IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.begin(DISABLE_LED_FEEDBACK); // Inizia con IR_SEND_PIN come pin di invio
begin
dell'oggetto IrSender
per inizializzare la funzione di trasmissione a infrarossi.-
DISABLE_LED_FEEDBACK
: Questo è un parametro utilizzato per disabilitare il feedback LED. Se il feedback è abilitato, il LED lampeggerà durante la trasmissione dei segnali a infrarossi.
IrSender
utilizzerà un pin di trasmissione a infrarossi preimpostato (come IR_SEND_PIN
) per inviare segnali a infrarossi. Questa riga di codice attiva il trasmettitore a infrarossi e lo prepara per inviare segnali a infrarossi.2. IrSender.setSendPin(IR_TX_PIN);
IrSender.begin(DISABLE_LED_FEEDBACK); // Inizia con IR_SEND_PIN come pin di invio
Chiama il metodo setSendPin
dell'oggetto IrSender
per impostare il pin di trasmissione del segnale a infrarossi su IR_TX_PIN
.
-
IR_TX_PIN
è un numero di pin definito che specifica il pin esatto utilizzato per trasmettere segnali a infrarossi.
Utilizzando questa riga di codice, puoi personalizzare il pin di trasmissione a infrarossi invece di utilizzare quello predefinito. Questo è particolarmente utile quando ci sono modifiche nelle connessioni hardware o nella mappatura dei pin.
3. Serial.print(F('Invia ora: indirizzo=0x1111, comando=0x'));
Serial.println();//Stampa una riga vuota per formattare l'output e rendere le informazioni seguenti più chiare. Serial.print(F('Invia ora: indirizzo=0x1111, comando=0x'));//Stampa una stringa. Serial.print(sCommand, HEX);//Visualizza in formato esadecimale. Serial.print(F(', ripetizioni='));//Indica il numero di trasmissioni ripetute. Serial.print(sRepeats);//Il numero di volte che il comando viene inviato. Serial.println();//Stampa un'altra riga vuota per rendere l'output più organizzato.
-
Usa
Serial.print()
per stampare la stringa 'Send now: address=0x1111, command=0x'
. La macroF()
è utilizzata qui per memorizzare la stringa nella memoria Flash, aiutando a conservare 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);
Visualizza 'IR NEC SEND' utilizzando il metodo drawString
per rendere la stringa in una posizione specificata sullo schermo.
-
StickCP2.Display.width() / 2
: Questo assicura che la stringa sia centrata orizzontalmente sul display. -
StickCP2.Display.height() / 2 - 40
: Questo posiziona la stringa 40 pixel sopra il centro verticale dello schermo.
drawString
per mostrare le informazioni sull'indirizzo.-
StickCP2.Display.width() / 2
: Centra il testo orizzontalmente sullo schermo. -
StickCP2.Display.height() / 2
: Centra il testo verticalmente, posizionandolo esattamente al centro del display.
Visualizza informazioni sul comando mostrando la stringa 'CMD:0x' insieme alla rappresentazione esadecimale della variabile sCommand
.
-
String(sCommand, HEX)
: Converte la variabilesCommand
in una stringa esadecimale. -
StickCP2.Display.width() / 2
: Centra il testo orizzontalmente sul display. -
StickCP2.Display.height() / 2 + 40
: Posiziona il testo 40 pixel sotto il centro verticale dello schermo.
5. Serial.println(F('Invia NEC standard con indirizzo a 16 bit'))
Serial.println(F('Invia NEC standard con indirizzo a 16 bit')) StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Disegna un cerchio.
Serial.println()
per stampare informazioni sul **monitor seriale**, aggiungendo una nuova riga alla fine per assicurarti che l'output successivo inizi su una nuova linea.-
F('Invia NEC standard con indirizzo a 16 bit')
: La macroF()
memorizza la stringa 'Invia NEC standard con indirizzo a 16 bit' in memoria Flash (memoria di programma) invece che nella **RAM**, aiutando a conservare la memoria. -
L'output 'Invia NEC standard con indirizzo a 16 bit' indica che un segnale a infrarossi con protocollo NEC standard viene trasmesso con un **indirizzo a 16 bit**.
6. IrSender.sendNEC()
IrSender.sendNEC(0x1111, sCommand, sRepeats);//Invia un segnale a infrarossi seguendo il protocollo NEC. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Incrementa i valori di invio */
0x1111
: Questo è il indirizzo del segnale a infrarossi, che rappresenta un valore di indirizzo a 16 bit utilizzato per identificare il dispositivo di destinazione o la destinazione del comando.sCommand
: Questo è il valore del comando da inviare. Può essere un valore 8-bit o 16-bit, che specifica l'operazione esatta che il dispositivo di destinazione deve eseguire.sRepeats
: Indica il numero di volte in cui il segnale viene ripetuto, solitamente per migliorare la affidabilità del segnale o per soddisfare requisiti specifici del dispositivo controllato.IrSender.sendNEC(0x1111, sCommand, sRepeats);//Invia un segnale a infrarossi seguendo il protocollo NEC. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Incrementa i valori di invio */
-
0x1111
: Questo è l'indirizzo del dispositivo del segnale a infrarossi, usato per identificare un dispositivo specifico. -
0x2223
: Questo è il codice comando inviato al dispositivo, che specifica la operazione da eseguire. -
sRepeats
: Rappresenta il numero di volte in cui il segnale viene ripetuto, tipicamente per garantire l'affidabilità del segnale o soddisfare i requisiti del dispositivo di destinazione.
Programmazione facile
Scenari di Applicazione Flessibili
Pin a infrarossi preconfigurato