Progetto per principianti con M5Stack: implementare una funzione di controllo remoto

M5StickC Plus2 è una piccola scheda di sviluppo basata su un chip ESP32 con molte funzioni avanzate, tra cui Bluetooth, Wi-Fi, display OLED, touchscreen e così via. Grazie a essa, possiamo realizzare facilmente la funzione di telecomando per controllare altri dispositivi o elettrodomestici. Questo articolo mostrerà come realizzare un semplice telecomando utilizzando M5StickC Plus2 e presenterà la struttura e l'implementazione del codice del progetto.
 

Spiegazione delle funzioni del LED

L'M5StickC Plus2 è dotato di un LED di alimentazione programmabile che può essere codificato per un semplice controllo di accensione e spegnimento o per effetti lampeggianti. Il LED può essere utilizzato per indicare lo stato di alimentazione e, insieme ad altri moduli sensore, per indicare lo stato del dispositivo. La programmabilità di questo LED offre un'ampia gamma di scenari applicativi per promemoria intelligenti o semplici sistemi di allarme.

Analisi dell'esempio

StickCP2.Power.setLed(1) viene utilizzato per accendere il LED di alimentazione dell'M5StickC Plus2.
Di conseguenza, StickCP2.Power.setLed(0) viene utilizzato per spegnere il LED. Questa funzione viene spesso usata per indicare lo stato, ad esempio se l'alimentazione è attiva o disattivata, se il dispositivo funziona correttamente oppure per fornire una semplice indicazione tramite segnale.
        void setup() {
            // Recupera la configurazione del dispositivo.
            auto cfg = M5.config();
            // Inizializza l'M5StickC Plus2.
            StickCP2.begin(cfg);
            // Ruota il display
            StickCP2.Display.setRotation(1);
            // imposta il colore del testo su verde
            StickCP2.Display.setTextColor(GREEN);
            // centra il testo
            StickCP2.Display.setTextDatum(middle_center);
            // utilizza il carattere "Orbitron_Light_24"
            StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);
            StickCP2.Display.setTextSize(1);
            // Visualizza il messaggio "Power LED" al centro dello schermo.
            StickCP2.Display.drawString("Power LED", StickCP2.Display.width() / 2,
                                        StickCP2.Display.height() / 2);
        }
        
        void loop() {
            // all'interno del controllo del LED rosso di alimentazione
            //Accende il LED di alimentazione.
            StickCP2.Power.setLed(1);
            // Attende 1 secondo.
            delay(1000);
            // Spegne il LED.
            StickCP2.Power.setLed(0);
            //Attende 1 secondo.
            delay(1000);
        }
  
✔ Copiato!

Per una spiegazione della funzione a infrarossi, vedere: Guida per principianti M5Stack: funzionalità a infrarossi di PLUS2

Realizzazione della funzione di telecomando

Passaggio 1:Riconoscimento del segnale a infrarossi del telecomando

In questo metodo, l'M5Stack Plus2 funge da telecomando, inviando segnali a infrarossi ad altri dispositivi (ad esempio TV, condizionatori e così via) tramite un modulo emettitore a infrarossi (LED IR).
  1. Hardware necessario:
  1. Collegamenti hardware:
Arduino UNO ---> Ricevitore IR
5V ---> VCC
GPIO 11 ---> IN
GND ---> GND

 

  1. Installa la libreria
  • Puoi procedere con l'installazione della libreria IRremote nell'Arduino IDE. Questa libreria ti aiuterà a generare segnali IR conformi agli standard.
  • Apri Arduino IDE, seleziona Strumenti -> Gestore librerie, cerca IRremote e installalo.
  • Scrivi il codice di ricezione a infrarossi
       

        // Definisce i pin a cui è collegato il sensore del ricevitore IR
        const int RECV_PIN = 11; 
        //Creazione degli oggetti di ricezione IR
        IRrecv irrecv(RECV_PIN); 
        // Crea l'oggetto del risultato della decodifica
        decode_results results; 
        
        void setup() {
          // Inizializza le comunicazioni seriali
          Serial.begin(115200); 
          // Avvia la ricezione IR
          irrecv.enableIRIn(); 
          Serial.println("Ricevitore IR pronto");
        }
        
        void loop() {
          if (irrecv.decode(&results)) { 
            // Segnale IR rilevato
            Serial.print("Codice IR ricevuto: ");
            // Stampa il segnale IR ricevuto
            Serial.println(results.value, HEX); 
            // Ricevi il segnale successivo
            irrecv.resume(); 
          }
          delay(100);
        }
  
✔ Copiato!
  • Fai clic su Strumenti -> Porta per eseguire la programmazione.

  • Fai clic su Strumenti -> Monitor seriale per monitorare il segnale IR.

Passaggio 2: Spiegazione del progetto di controllo del LED

Dopo aver compreso il funzionamento del codice e seguito il tutorial sui pulsanti, possiamo ora combinare le operazioni dei pulsanti con il controllo del LED. La logica è semplice:
  1. Premi il pulsante A (StickCP2.BtnA.wasPressed()): accendi il LED usando StickCP2.Power.setLed(1);.
  2. Premi il pulsante B (StickCP2.BtnB.wasPressed()): spegni il LED usando StickCP2.Power.setLed(0);.
Lo implementiamo usando condizioni if per rilevare quando viene premuto il pulsante A o B. Questo offre un modo reattivo per attivare o disattivare il LED tramite semplici interazioni con i pulsanti, rendendo il progetto facile per iniziare.

M5Stack Plus2 implementa le funzioni di telecomando

Il codice di esempio emette un segnale a infrarossi tramite il LED IR quando viene premuto il pulsante di M5Stack Plus2, simulando il funzionamento di un telecomando. È possibile modificare il numero del segnale in IrSender.sendNEC() per controllare diversi dispositivi secondo necessità.
 
        #define DISABLE_CODE_FOR_RECEIVER 
        #define SEND_PWM_BY_TIMER
        #define IR_TX_PIN 19
        #include "M5StickCPlus2.h"
        #include  
        
        void setup() {
        
            auto cfg = M5.config();
            
            //Per comprendere la logica alla base dell'inizializzazione con begin(), è possibile consultare la libreria dipendente.
            StickCP2.begin(cfg);
        
              //Direzioni di rotazione del display
            StickCP2.Display.setRotation(1);
        
            //  Il colore del testo visualizzato sullo schermo.
            StickCP2.Display.setTextColor(GREEN);
        
            //L'allineamento del testo middle_center indica l'allineamento del centro del testo alla posizione coordinata specificata.
            StickCP2.Display.setTextDatum(middle_center);
        
            //Stili del carattere
            StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);
        
            //Dimensione del carattere
            StickCP2.Display.setTextSize(1);
        
            IrSender.begin(DISABLE_LED_FEEDBACK);  // Avvia con IR_SEND_PIN come pin di trasmissione
            IrSender.setSendPin(IR_TX_PIN);//Impostazioni del pin di trasmissione del segnale a infrarossi
        }
        
        void loop() {
        
          if (StickCP2.BtnA.wasPressed()) {
            // Invia il codice IR per il pulsante di accensione
             IrSender.sendNEC(0x25AE7EE3, 32);  // Codice NEC di esempio per la TV (da sostituire con il codice effettivo)
             StickCP2.Display.clear();
             StickCP2.Display.drawString("Segnale di accensione inviato", StickCP2.Display.width() / 2,
                                        StickCP2.Display.height() / 2 - 40);
             delay(5000);  // Inviato ogni 5 secondi
          }
          
          if (StickCP2.BtnB.wasPressed()) {
            // Invia il codice IR per il pulsante di aumento del volume
            //IrSender.sendNEC(25AE7EE3, 32);  // Invia il segnale per alzare il volume
            StickCP2.Display.clear();
            StickCP2.Display.drawString("Volume su inviato", StickCP2.Display.width() / 2,
                                        StickCP2.Display.height() / 2 - 40);
            delay(5000);  // Inviato ogni 5 secondi
          }
        
          StickCP2.update();  // Aggiorna lo stato del pulsante
          
        }
  
✔ Copiato!

 

 

Lascia un commento

Il tuo indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati da *

Register for our newsletter

Get the latest information about our products and special offers.

Website Feedback

Help us improve OpenELAB

Found a website issue or have an idea? Tell us what would make your experience better.