-
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 variabilesCommandin 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
