Guida per principianti M5Stack: funzionalità a infrarossi PLUS2
-
Seleziona un modulo IR: ad esempio, il modulo Ricevitore IR Grove.
-
Connessione hardware: utilizzare l'interfaccia Grove o i cavi jumper per collegare il modulo IR ai pin GPIO appropriati su M5StickC Plus2.
-
Supporto software: scrivi il codice in Arduino o MicroPython per leggere i segnali IR. Le librerie Arduino, come IRremote, possono facilmente decodificare i protocolli IR comuni (ad esempio, protocollo NEC).
Caratteristiche principali della funzione a infrarossi
Commenti sul codice e descrizioni delle funzioni
/** * @file ir_nec.ino * @autore SeanKwok (shaoxiang@m5stack.com) * @brief Test IR NEC M5StickCPlus2 * @version 0.1 * @date 2023-12-09 * * * @Hardwares: M5StickCPlus2 * Versione @Platform: 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 ciascuno // send. Saves 450 bytes program memory and // 269 bytes RAM if receiving functions are // not used. #define INVIA_PWM_TRAMITE_TIMER #define IR_TX_PIN 19 uint8_t sCommand = 0x34; uint8_t sRipetizioni = 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.inizia(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); // Inizia con IR_SEND_PIN come pin di invio IrSender.setSendPin(IR_TX_PIN);//Impostazioni pin di trasmissione del segnale a infrarossi } void loop() { Serial.println();//Stampa una riga vuota per formattare l'output e rendere più chiare le seguenti informazioni. Serial.print(F('Invia ora: indirizzo=0x1111, comando=0x'));//Stampa una stringa. Serial.print(sCommand, HEX);//Visualizza in formato esadecimale. Serial.print(F(', Repeats='));//Indica il numero di trasmissioni ripetute. Serial.print(sRepeats);//Il numero di volte in cui 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('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); 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. ritardo(500);//Ritardo per 500 millisecondi. StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Disegna un cerchio pieno. delay(500); }
1. IrSender.inizia(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 a inviare segnali a infrarossi.2. IrSender.setSendPin(IR_TX_PIN);
IrSender.begin(DISABLE_LED_FEEDBACK); // Inizia con IR_SEND_PIN come pin di invio
Richiama 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 pin definito che specifica il pin esatto utilizzato per trasmettere i segnali a infrarossi.
Utilizzando questa riga di codice è possibile personalizzare il pin di trasmissione a infrarossi invece di utilizzare quello predefinito. Ciò è particolarmente utile in caso di modifiche alle connessioni hardware o alla 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 più chiare le seguenti informazioni. Serial.print(F('Invia ora: indirizzo=0x1111, comando=0x'));//Stampa una stringa. Serial.print(sCommand, HEX);//Visualizza in formato esadecimale. Serial.print(F(', Repeats='));//Indica il numero di trasmissioni ripetute. Serial.print(sRepeats);//Il numero di volte in cui il comando viene inviato. Serial.println();//Stampa un'altra riga vuota per rendere l'output più organizzato.
-
Utilizza
Serial.print()
per stampare la stringa 'Invia ora: indirizzo=0x1111, comando=0x'
. La macroF()
viene 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 visualizzare la stringa in una posizione specifica sullo schermo.
-
StickCP2.Display.width() / 2
: garantisce che la stringa sia centrata orizzontalmente sul display. -
StickCP2.Display.height() / 2 - 40
: 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 proprio al centro del display.
Visualizza le informazioni sul comando eseguendo il rendering della stringa 'CMD:0x' insieme alla rappresentazione esadecimale del 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 garantire che l'output successivo inizi su una nuova riga.-
F('Invia NEC standard con indirizzo a 16 bit')
: la macroF()
memorizza la stringa ' Invia NEC standard con indirizzo a 16 bit nella memoria Flash (memorizzazione del programma) anziché nella **RAM**, contribuendo a risparmiare 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 è l'indirizzo del segnale infrarosso, che rappresenta un valore di indirizzo a 16 bit utilizzato per identificare il dispositivo di destinazione o 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.sRipeti
: indica il numero di volte in cui il segnale viene ripetuto, solitamente per migliorare l'affidabilità del segnale o soddisfare requisiti specifici di il dispositivo da controllare.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 infrarosso, utilizzato per identificare un dispositivo specifico. -
0x2223
: questo è il codice di comando inviato al dispositivo, specificando l'operazione da eseguire. -
sRipetizioni
: rappresenta il numero di volte in cui il segnale viene ripetuto, in genere per garantire l'affidabilità del segnale o soddisfare i requisiti del dispositivo di destinazione.
Programmazione Facile
Scenari di applicazione flessibili
Pin Infrarosso Preconfigurato