Salta al contenuto

+49 1626571232

info@openelab.io

🚀 Spedizione gratuita a partire da 50€ in UE / 80€ in tutto il mondo

Guida per principianti M5Stack: funzionalità a infrarossi PLUS2

16 Oct 2024 0 Commenti
M5StickC Plus2 è un modulo di sviluppo compatto e versatile che integra un potente trasmettitore a infrarossi (IR), aprendo nuove possibilità per applicazioni di controllo e comunicazione intelligenti. Questa caratteristica consente al dispositivo di inviare segnali IR.
 
L'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 a M5StickC Plus2 tramite l'interfaccia Grove .
Per abilitare la ricezione IR, attenersi alla seguente procedura:
  1. Seleziona un modulo IR: ad esempio, il modulo Ricevitore IR Grove.
  2. Connessione hardware: utilizzare l'interfaccia Grove o i cavi jumper per collegare il modulo IR ai pin GPIO appropriati su M5StickC Plus2.
  3. 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

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

  

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);
}


✔ Copiato!

 

1. IrSender.inizia(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Inizia con IR_SEND_PIN come pin di invio
        
Richiamare 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 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 macro F() viene 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 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.

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 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 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.
        
Utilizza 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 macro F() 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.
  
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 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

È possibile accedere e programmare facilmente la funzionalità IR utilizzando il framework Arduino o UIFlow, l'ambiente di programmazione visiva 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 Smart Home: automatizza gli elettrodomestici inviando comandi IR direttamente da M5StickC Plus2.
Learning Remote: registra i segnali dai telecomandi esistenti per creare una soluzione remota universale.
IoT e robotica: integra la comunicazione IR per semplici comandi wireless tra dispositivi o robot.

  

Pin Infrarosso Preconfigurato

M5StickC Plus2 viene fornito con un pin di trasmissione IR preassegnato, generalmente etichettato come IR_SEND_PIN. Ciò semplifica l'implementazione delle funzioni IR senza complicate configurazioni hardware.
    
Con le sue dimensioni compatte e le funzionalità a infrarossi integrate, M5StickC Plus2 offre una piattaforma comoda e versatile per gli sviluppatori che lavorano su progetti di controllo remoto, automazione domestica o comunicazione wireless. Questa funzionalità trasforma il dispositivo da un semplice strumento di sviluppo in un potente strumento per IoT e applicazioni embedded.

 

Articolo precedente
Articolo successivo

lascia un commento

Tutti i commenti del blog vengono controllati prima della pubblicazione

Qualcuno ha recentemente acquistato un

Grazie per esserti iscritto!

Questa email è stata registrata!

Acquista il look

Scegli Opzioni

Modifica opzione
Notifica di disponibilità
this is just a warning
Login
Carrello della spesa
0 elementi
RuffRuff App RuffRuff App by Tsun