Salta al contenuto

+49 1626571232

info@openelab.io

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

Principiante 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.
 
Il M5StickC Plus2 non ha 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, 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

#include "M5StickCPlus2.h"
#include   // includi la libreria

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.
    ritarda(500);//Delay for 500 milliseconds.
    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 adesso: 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 specificata 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'uscita "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