The SKUs and quantities listed below are currently out of stock. They must be sourced from our China warehouse and will ship from China once ready. Choose whether to ship the available items first or wait and ship the entire order together.
Progetto per principianti con M5Stack: implementare una funzione di controllo remoto
daOpenELAB
acceso
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);
}
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).
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:
Premi il pulsante A (StickCP2.BtnA.wasPressed()): accendi il LED usando StickCP2.Power.setLed(1);.
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
}