M5Stack-Anfängerhandbuch: PLUS2-Infrarotfunktionen

Der M5StickC Plus2 ist ein kompaktes, vielseitiges Entwicklungsmodul, das einen leistungsstarken Infrarot (IR) Sender integriert und neue Möglichkeiten für intelligente Steuerungs- und Kommunikationsanwendungen eröffnet. Diese Funktion ermöglicht es dem Gerät, IR-Signale zu senden.

Der M5StickC Plus2 hat keinen integrierten Infrarot (IR) Empfänger, kann jedoch IR-Signale empfangen, indem ein externes IR-Modul angeschlossen wird. Das M5Stack Ökosystem bietet mehrere kompatible IR-Module, wie das Grove IR Receiver-Modul, das über die Grove-Schnittstelle mit dem M5StickC Plus2 verbunden werden kann.
Um den IR-Empfang zu ermöglichen, folgen Sie diesen Schritten:
  1. Wählen Sie ein IR-Modul: Zum Beispiel das Grove IR Receiver-Modul.
  2. Hardwareverbindung: Verwenden Sie die Grove-Schnittstelle oder Jumperkabel, um das IR-Modul mit den entsprechenden GPIO-Pins des M5StickC Plus2 zu verbinden.
  3. Softwareunterstützung: Schreiben Sie Code in Arduino oder MicroPython, um die IR-Signale zu lesen. Arduino-Bibliotheken, wie IRremote, können gängigem IR-Protokolle (z. B. das NEC-Protokoll) leicht dekodieren.

Hauptmerkmale der Infrarotfunktion

IR-Übertragung und -Empfang
Mit dem integrierten IR-Sender kann der M5StickC Plus2 die Funktionen traditioneller Fernbedienungen nachahmen und Signale senden, um Fernseher, Klimaanlagen und andere IR-kompatible Geräte zu steuern.
Der IR-Empfänger ermöglicht es dem Modul, Signale von anderen Fernbedienungen zu lernen und zu dekodieren, wodurch es anpassungsfähig für verschiedene Steuerungsszenarien wird.

 

/**  
 * @file ir_nec.ino  
 * @author SeanKwok (shaoxiang@m5stack.com)  
 * @brief M5StickCPlus2 IR NEC Test  
 * @version 0.1  
 * @date 2023-12-09  
 *  
 *  
 * @Hardware: M5StickCPlus2  
 * @Plattformversion: Arduino M5Stack Board Manager v2.0.9  
 * @Abhängige Bibliothek:  
 * 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  // Deaktiviert das Neustarten des Empfängers nach jeder  
                                   // Übertragung. Spart 450 Bytes Programmspeicher und  
                                   // 269 Bytes RAM, wenn Empfangsfunktionen  
                                   // nicht verwendet werden.  
#define SEND_PWM_BY_TIMER  
#define IR_TX_PIN 19  




uint8_t sCommand = 0x34;  
uint8_t sRepeats = 0;  

void setup() {  
    auto cfg = M5.config();  
    
    //Um die zugrunde liegende Logik der Initialisierung mit begin() zu verstehen, können Sie auf die abhängige Bibliothek verweisen.  
    StickCP2.begin(cfg);  

    //Drehungsrichtungen des Displays  
    StickCP2.Display.setRotation(1);  

    //  Die Farbe des auf dem Bildschirm angezeigten Textes.  
    StickCP2.Display.setTextColor(GREEN);  

    //Textausrichtung middle_center bedeutet, dass das Zentrum des Textes an der angegebenen Koordinatenposition ausgerichtet wird.  
    StickCP2.Display.setTextDatum(middle_center);  

    //Schriftarten  
    StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);  

    //Schriftgröße  
    StickCP2.Display.setTextSize(1);  

    IrSender.begin(DISABLE_LED_FEEDBACK);  // Beginnen Sie mit IR_SEND_PIN als Sendepin  
    IrSender.setSendPin(IR_TX_PIN);//Infrarot-Signalübertragungs-Pin-Einstellungen  
}  

void loop() {  
    Serial.println();//Druckt eine leere Zeile, um die Ausgabe zu formatieren und die folgenden Informationen klarer zu machen.  
    Serial.print(F('Send now: address=0x1111, command=0x'));//Druckt einen String.  
    Serial.print(sCommand, HEX);//Anzeige im hexadezimalen Format.  
    Serial.print(F(', repeats='));//Gibt die Anzahl der wiederholten Übertragungen an.  
    Serial.print(sRepeats);//Die Anzahl der gesendeten Befehle.  
    Serial.println();//Druckt eine weitere leere Zeile, um die Ausgabe besser zu organisieren.  

    StickCP2.Display.clear();//Aktualisieren Sie die Bildschirmdarstellung.  

    //drawString Eine Methode zur Darstellung eines Strings an einer bestimmten 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('Send standard NEC with 16 bit address'));  

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Zeichnen Sie einen Kreis.  
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Senden Sie ein Infrarotsignal gemäß dem NEC-Protokoll.  
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Senden Sie ein Infrarotsignal gemäß dem Onkyo-Protokoll.  
    /*  
     * Erhöhen Sie die Sendewerte  
     */  
    sCommand += 1;//Erhöhen Sie den Befehlswert.  
    delay(500);//Warten Sie 500 Millisekunden.  
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Zeichnen Sie einen gefüllten Kreis.  
    delay(500);  
}  
  
✔ Kopiert!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Beginnen Sie mit IR_SEND_PIN als Sendepin  
        
Rufen Sie die begin-Methode des IrSender-Objekts auf, um die Infrarotübertragungsfunktion zu initialisieren.
  • DISABLE_LED_FEEDBACK: Dies ist ein Parameter, der verwendet wird, um die LED-Rückmeldung zu deaktivieren. Wenn das Feedback aktiviert ist, blinkt die LED während der Übertragung von Infrarotsignalen.
Standardmäßig verwendet IrSender einen vordefinierten Infrarotübertragungs-Pin (wie IR_SEND_PIN), um Infrarotsignale zu senden. Diese Codezeile aktiviert den Infrarotsender und bereitet ihn darauf vor, Infrarotsignale zu senden.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.setSendPin(IR_TX_PIN);  // Infrarot-Signalübertragungs-Pin-Einstellungen  
        

Rufen Sie die setSendPin-Methode des IrSender-Objekts auf, um den Infrarotsignalübertragungs-Pin auf IR_TX_PIN einzustellen.

  • IR_TX_PIN ist eine definierte Pin-Nummer, die den genauen Pin angibt, der zur Übertragung von Infrarotsignalen verwendet wird.

Durch die Verwendung dieser Codezeile können Sie den Infrarotübertragungs-Pin anpassen, anstatt den Standard-Pin zu verwenden. Dies ist besonders nützlich, wenn sich Hardwareverbindungen oder Pin-Zuordnungen ändern.

3. Serial.print(F('Send now: address=0x1111, command=0x'));

                Serial.println();//Druckt eine leere Zeile, um die Ausgabe zu formatieren und die folgenden Informationen klarer zu machen.  
                Serial.print(F('Send now: address=0x1111, command=0x'));//Druckt einen String.  
                Serial.print(sCommand, HEX);//Anzeige im hexadezimalen Format.  
                Serial.print(F(', repeats='));//Gibt die Anzahl der wiederholten Übertragungen an.  
                Serial.print(sRepeats);//Die Anzahl der gesendeten Befehle.  
                Serial.println();//Druckt eine weitere leere Zeile, um die Ausgabe besser zu organisieren.  
        
  • Verwenden Sie Serial.print(), um den String 'Send now: address=0x1111, command=0x' auszudrucken. Das F()-Makro wird hier verwendet, um den String im Flash-Speicher zu speichern, was hilft, RAM zu sparen.
4. StickCP2.Display.drawString(' ', , );
                //drawString Eine Methode zur Darstellung eines Strings an einer bestimmten 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);  
        

Zeigen Sie 'IR NEC SEND' mit der drawString-Methode an, um den String an einer bestimmten Position auf dem Bildschirm darzustellen.

  • StickCP2.Display.width() / 2: Dies stellt sicher, dass der String horizontal auf dem Display zentriert ist.

  • StickCP2.Display.height() / 2 - 40: Dies platziert den String 40 Pixel über dem vertikalen Mittelpunkt des Bildschirms.

Zeigen Sie 'ADDR:0x1111' mit der drawString-Methode an, um die Adressinformationen anzuzeigen.
  • StickCP2.Display.width() / 2: Zentriert den Text horizontal auf dem Bildschirm.
  • StickCP2.Display.height() / 2: Zentriert den Text vertikal, indem er ihn genau in die Mitte des Displays platziert.

Zeigen Sie Befehlinformationen an, indem Sie den String 'CMD:0x' zusammen mit der hexadezimalen Darstellung der sCommand-Variablen darstellen.

  • String(sCommand, HEX): Konvertiert die sCommand-Variable in einen hexadezimalen String.

  • StickCP2.Display.width() / 2: Zentriert den Text horizontal auf dem Display.

  • StickCP2.Display.height() / 2 + 40: Platziert den Text 40 Pixel unter dem vertikalen Mittelpunkt des Bildschirms.

5. Serial.println(F('Send standard NEC with 16 bit address'));

                Serial.println(F('Send standard NEC with 16 bit address'));  

                StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Zeichnen Sie einen Kreis.  
                
Verwenden Sie Serial.println(), um Informationen an den **seriellen Monitor** zu drucken, wobei am Ende eine neue Zeile hinzugefügt wird, um sicherzustellen, dass die nächste Ausgabe in einer neuen Zeile beginnt.

  • F('Send standard NEC with 16 bit address'): Das F()-Makro speichert den String 'Send standard NEC with 16 bit address' im Flash-Speicher (Programmspeicher) anstelle von **RAM**, was hilft, den Speicher zu sparen.
  • Die Ausgabe 'Send standard NEC with 16 bit address' zeigt an, dass ein Standard-NEC-Protokoll-Infrarotsignal mit einer **16-Bit-Adresse** gesendet wird.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Senden Sie ein Infrarotsignal gemäß dem NEC-Protokoll.  
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Senden Sie ein Infrarotsignal gemäß dem Onkyo-Protokoll.  
                /*  
                 * Erhöhen Sie die Sendewerte  
                 */  
                        
0x1111: Dies ist die Adresse des Infrarotsignals, die einen 16-Bit-Adresswert repräsentiert, der verwendet wird, um das Zielgerät oder Zielkommando zu identifizieren.
sCommand: Dies ist der Befehlswert, der gesendet werden soll. Es kann ein 8-Bit- oder 16-Bit-Wert sein, der die genaue Operation spezifiziert, die das Zielgerät ausführen soll.
sRepeats: Gibt die Häufigkeit an, mit der das Signal wiederholt wird, normalerweise um die Signalzuverlässigkeit zu erhöhen oder spezifische Anforderungen des zu steuernden Geräts zu erfüllen.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Senden Sie ein Infrarotsignal gemäß dem NEC-Protokoll.  
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Senden Sie ein Infrarotsignal gemäß dem Onkyo-Protokoll.  
                /*  
                 * Erhöhen Sie die Sendewerte  
                 */  
                        
  • 0x1111: Dies ist die Geräteadresse des Infrarotsignals, die verwendet wird, um ein bestimmtes Gerät zu identifizieren.
  • 0x2223: Dies ist der Befehlscode, der an das Gerät gesendet wird und die auszuführende Operation angibt.
  • sRepeats: Gibt die Anzahl an, wie oft das Signal wiederholt wird, typischerweise um die Signalzuverlässigkeit zu gewährleisten oder die Anforderungen des Zielgeräts zu erfüllen.

 

Einfache Programmierung

Die IR-Funktionalität kann einfach über das Arduino-Framework oder UIFlow, M5Stacks visuelle Programmierumgebung, aufgerufen und programmiert werden. Entwickler können IrSender.begin() aufrufen, um die IR-Sende-Funktion zu initialisieren und Parameter wie DISABLE_LED_FEEDBACK zu konfigurieren, was die blinkende LED-Anzeige während der Übertragung deaktiviert.

 

Flexible Anwendungsszenarien

Smart Home Steuerung: Automatisieren Sie Haushaltsgeräte, indem Sie IR-Befehle direkt vom M5StickC Plus2 senden.
Lernfernbedienung: Erfassen Sie Signale von vorhandenen Fernbedienungen, um eine universelle Fernbedienungslösung zu erstellen.
IoT und Robotik: Integrieren Sie IR-Kommunikation für einfache drahtlose Befehle zwischen Geräten oder Robotern.

 

Vorkonfigurierter Infrarot-Pin

Der M5StickC Plus2 wird mit einem voreingestellten IR-Übertragungs-Pin geliefert, der normalerweise als IR_SEND_PIN bezeichnet wird. Dies erleichtert die Bereitstellung der IR-Funktionen ohne komplizierte Hardware-Setups.

    

Mit seiner kompakten Größe und den integrierten Infrarotfähigkeiten bietet der M5StickC Plus2 eine bequeme und vielseitige Plattform für Entwickler, die an Projekten zur Fernsteuerung, Hausautomation oder drahtlosen Kommunikation arbeiten. Diese Funktion verwandelt das Gerät von einem einfachen Entwicklungswerkzeug in ein leistungsstarkes Werkzeug für IoT- und Embedded-Anwendungen.

Seitenleiste

Blog-Kategorien
Neuester Beitrag

Dieser Abschnitt enthält derzeit keinen Inhalt. Fügen Sie über die Seitenleiste Inhalte hinzu.

Registrieren Sie sich für unseren Newsletter

Erhalten Sie die neuesten Informationen über unsere Produkte und Sonderangebote.