Guida per principianti M5Stack: funzionalità a infrarossi PLUS2

Il M5StickC Plus2 è un modulo di sviluppo compatto e versatile che integra un potente trasmettitore a infrarossi (IR), aprendo nuove possibilità per applicazioni di controllo intelligente e comunicazione. Questa funzione consente al dispositivo di inviare segnali IR.
 
Il M5StickC Plus2 non dispone di un ricevitore a infrarossi (IR) integrato, ma può ricevere segnali IR collegando un modulo IR esterno. L'ecosistema M5Stack offre diversi moduli IR compatibili, come il modulo ricevitore IR Grove, che può essere collegato al M5StickC Plus2 tramite l'interfaccia Grove.
Per abilitare la ricezione IR, segui questi passaggi:
  1. Seleziona un modulo IR: ad esempio, il modulo Grove IR Receiver.
  2. Connessione hardware: Usa l'interfaccia Grove o fili jumper per collegare il modulo IR ai pin GPIO appropriati sul M5StickC Plus2.
  3. 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

Trasmissione e Ricezione IR
Con il trasmettitore IR integrato, l'M5StickC Plus2 può imitare le funzioni dei telecomandi tradizionali, inviando segnali per controllare TV, condizionatori d'aria e altri dispositivi compatibili con IR.
Il ricevitore IR consente al modulo di apprendere e decodificare i segnali da altri telecomandi, rendendolo adattabile a molteplici scenari di controllo.

  

/**
 * @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);
}
  
✔ Copiato!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Inizia con IR_SEND_PIN come pin di invio
        
Chiama il metodo 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.
Per impostazione predefinita, 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 macro F() è utilizzata qui per memorizzare la stringa nella memoria Flash, aiutando a conservare la RAM.
4. 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.

Visualizza 'ADDR:0x1111' utilizzando il metodo 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 variabile sCommand 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.
        
Usa 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 macro F() 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.
  
7. IrSender.sendOnkyo()
                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

La funzionalità IR può essere facilmente accessibile e programmata utilizzando il framework Arduino o UIFlow, l'ambiente di programmazione visuale di M5Stack. Gli sviluppatori possono chiamare IrSender.begin() per inizializzare la funzione di invio IR e configurare parametri come DISABLE_LED_FEEDBACK, che disabilita l'indicatore LED lampeggiante durante la trasmissione.

 

Scenari di Applicazione Flessibili

Controllo Casa Intelligente: Automatizza gli elettrodomestici inviando comandi IR direttamente dal M5StickC Plus2.
Apprendimento a distanza: registra i segnali dai telecomandi esistenti per creare una soluzione universale per telecomandi.
IoT e Robotica: integra la comunicazione IR per comandi wireless semplici tra dispositivi o robot.

  

Pin a infrarossi preconfigurato

L'M5StickC Plus2 viene fornito con un pin di trasmissione IR preassegnato, solitamente etichettato come IR_SEND_PIN. Questo rende facile implementare funzioni IR senza configurazioni hardware complicate.

    

Con le sue dimensioni compatte e le capacità a infrarossi integrate, il M5StickC Plus2 offre una piattaforma comoda e versatile per gli sviluppatori che lavorano su progetti di telecomando, automazione domestica o comunicazione wireless. Questa caratteristica trasforma il dispositivo da un semplice strumento di sviluppo a uno strumento potente per applicazioni IoT e embedded.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati con *

Iscriviti alla nostra newsletter

Ricevi le ultime informazioni sui nostri prodotti e offerte speciali.