M5Stack-Einsteigerhandbuch: PLUS2-Infrarotfunktionen

Das 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 verfügt nicht über einen eingebauten 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-Empfängermodul, das über die Grove-Schnittstelle mit dem M5StickC Plus2 verbunden werden kann.
Um den IR-Empfang zu aktivieren, befolgen Sie diese Schritte:
  1. Wählen Sie ein IR-Modul: Zum Beispiel das Grove IR-Empfängermodul.
  2. Hardware-Verbindung: Verwenden Sie die Grove-Schnittstelle oder Jumper-Kabel, um das IR-Modul mit den entsprechenden GPIO-Pins am 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ängige IR-Protokolle (z. B. NEC-Protokoll) problemlos decodieren.

Hauptmerkmale der Infrarotfunktion

IR-Übertragung und -Empfang
Mit dem integrierten IR-Sender kann der M5StickC Plus2 die Funktionen herkömmlicher 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 decodieren, wodurch es für mehrere Steuerungsszenarien anpassbar wird.

  

/**
 * @file ir_nec.ino
 * @autor SeanKwok (shaoxiang@m5stack.com)
 * @brief M5StickCPlus2 IR NEC Test
 * @version 0.1
 * @date 2023-12-09
 *
 *
 * @Hardwares: M5StickCPlus2
 * @Platform Version: 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 jedem
                                   // send. Saves 450 bytes program memory and
                                   // 269 bytes RAM if receiving functions are
                                   // not used.
#define SEND_PWM_NACH_TIMER
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sWiederholungen = 0;

void setup() {
    auto cfg = M5.konfigurieren();
    
    //To understand the underlying logic of the initialization with begin(), you can refer to the Dependent Library.
    StickCP2.begin(cfg);

    //Display rotation directions
    StickCP2.Display.setRotation(1);

    //  The color of the text displayed on the screen.
    StickCP2.Display.setTextColor(GRÜN);

    //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);  // Starten mit IR_SEND_PIN als Sendepin
    IrSender.setSendPin(IR_TX_PIN);//Infrarot-Signal-Sende-Pin-Einstellungen
}

void-Schleife() {
    Serial.println();//Drucke eine Leerzeile, um die Ausgabe zu formatieren und die folgenden Informationen klarer zu machen.
    Serial.print(F('Jetzt senden: Adresse=0x1111, Befehl=0x'));//Drucke einen String.
    Serial.print(sCommand, HEX);//Anzeige im hexadezimalen Format.
    Serial.print(F(', Wiederholungen='));//Gibt die Anzahl der wiederholten Übertragungen an.
    Serial.print(sRepeats);//Die Anzahl der Male, die der Befehl gesendet wird.
    Serial.println();//Drucke eine weitere Leerzeile, um die Ausgabe übersichtlicher zu gestalten.

    StickCP2.Display.clear();//Aktualisiere die Bildschirmdarstellung.

    //drawString A method used to draw a string at a specified position.
    StickCP2.Display.drawString('IR NEC SENDEN', StickCP2.Display.width() / 2,
                                StickCP2.Display.höhe() / 2 - 40);

    StickCP2.Display.drawString('ADDR:0x1111', StickCP2.Display.breite() / 2,
                                StickCP2.Display.höhe() / 2);

    StickCP2.Display.drawString('Befehl:0x' + String(sCommand, HEX),
                                StickCP2.Display.breite() / 2,
                                StickCP2.Display.höhe() / 2 + 40);

    Serial.println(F('Sende Standard-NEC mit 16-Bit-Adresse'));

    StickCP2.Display.fillCircle(32, 105, 8, GRÜN);//Zeichne einen Kreis.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Sende ein Infrarotsignal nach dem NEC-Protokoll.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Sende Werte inkrementieren
     */
    sCommand += 1;//Erhöhe den Befehlswert.
    delay(500);//Verzögerung für 500 Millisekunden.
    StickCP2.Display.fillCircle(32, 105, 8, GELB);//Zeichne einen gefüllten Kreis.
    Verzögerung (500);
}
  
✔ Kopiert!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Starten 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 die Rückmeldung aktiviert ist, blinkt die LED während der Übertragung von Infrarotsignalen.
Standardmäßig verwendet IrSender einen voreingestellten Infrarot-Übertragungspin (wie IR_SEND_PIN), um Infrarotsignale zu senden. Diese Codezeile aktiviert den Infrarot-Sender und bereitet ihn darauf vor, Infrarotsignale zu senden.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Starten mit IR_SEND_PIN als Sendepin
        

Rufen Sie die setSendPin-Methode des IrSender-Objekts auf, um den Infrarotsignal-Übertragungspin auf IR_TX_PIN einzustellen.

  • IR_TX_PIN ist eine definierte Pinnummer, die den genauen Pin angibt, der zum Senden von Infrarotsignalen verwendet wird.

Durch die Verwendung dieser Codezeile können Sie den Infrarot-Übertragungspin anpassen, anstatt den Standardpin zu verwenden. Dies ist besonders nützlich, wenn es Änderungen bei den Hardwareverbindungen oder der Pinbelegung gibt.

3. Serial.print(F('Jetzt senden: Adresse=0x1111, Befehl=0x'));

                Serial.println();//Drucke eine Leerzeile, um die Ausgabe zu formatieren und die folgenden Informationen klarer zu machen.
                Serial.print(F('Jetzt senden: Adresse=0x1111, Befehl=0x'));//Drucke einen String.
                Serial.print(sCommand, HEX);//Anzeige im hexadezimalen Format.
                Serial.print(F(', Wiederholungen='));//Gibt die Anzahl der wiederholten Übertragungen an.
                Serial.print(sRepeats);//Die Anzahl der Male, die der Befehl gesendet wird.
                Serial.println();//Drucke eine weitere Leerzeile, um die Ausgabe übersichtlicher zu gestalten.
        
  • Verwenden Sie Serial.print(), um die Zeichenkette 'Send now: address=0x1111, command=0x' auszugeben. Das F()-Makro wird hier verwendet, um die Zeichenkette im Flash-Speicher zu speichern, was hilft, RAM zu sparen.
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);
        

Zeigen Sie 'IR NEC SEND' mit der drawString-Methode an, um die Zeichenkette 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 Text 40 Pixel über der vertikalen Mitte des Bildschirms.

Zeigt '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 und platziert ihn genau in der Mitte des Displays.

Zeige Befehlsinformationen an, indem der String 'CMD:0x' zusammen mit der hexadezimalen Darstellung der sCommand-Variable gerendert wird.

  • String(sCommand, HEX): Wandelt die Variable sCommand in eine hexadezimale Zeichenkette um.

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

  • StickCP2.Display.height() / 2 + 40: Platziert den Text 40 Pixel unterhalb der vertikalen Bildschirmmitte.

5. Serial.println(F('Sende Standard-NEC mit 16-Bit-Adresse'));

                Serial.println(F('Sende Standard-NEC mit 16-Bit-Adresse'));

                StickCP2.Display.fillCircle(32, 105, 8, GRÜN);//Zeichne einen Kreis.
        
Verwenden Sie Serial.println(), um Informationen im **seriellen Monitor** auszugeben, wobei am Ende ein Zeilenumbruch hinzugefügt wird, damit die nächste Ausgabe in einer neuen Zeile beginnt.

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

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Sende ein Infrarotsignal nach dem NEC-Protokoll.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Sende Werte inkrementieren
                 */
        
0x1111: Dies ist die Adresse des Infrarotsignals, die einen 16-Bit-Adresswert darstellt, der verwendet wird, um das Zielgerät oder das Befehlsziel 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 angibt, die das Zielgerät ausführen soll.
sRepeats: Gibt die Anzahl der Wiederholungen des Signals an, üblicherweise um die Signalzuverlässigkeit zu erhöhen oder spezifische Anforderungen des gesteuerten Geräts zu erfüllen.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Sende ein Infrarotsignal nach dem NEC-Protokoll.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Sende Werte inkrementieren
                 */
        
  • 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: Stellt die Anzahl der Wiederholungen des Signals dar, typischerweise um die Signalzuverlässigkeit sicherzustellen oder die Anforderungen des Zielgeräts zu erfüllen.

  

Einfache Programmierung

Die IR-Funktionalität kann einfach über das Arduino-Framework oder UIFlow, die visuelle Programmierumgebung von M5Stack, 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, das 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.
Lernen per Fernbedienung: Signale von vorhandenen Fernbedienungen aufzeichnen, um eine universelle Fernbedienungslösung zu erstellen.
IoT und Robotik: Integrieren Sie IR-Kommunikation für einfache drahtlose Befehle zwischen Geräten oder Robotern.

  

Vorkonfigurierte Infrarot-Pin

Der M5StickC Plus2 verfügt über einen vorzugewiesenen IR-Übertragungspin, der typischerweise als IR_SEND_PIN bezeichnet wird. Dies erleichtert die Implementierung von IR-Funktionen ohne komplizierte Hardwarekonfigurationen.

    

Mit seiner kompakten Größe und integrierten Infrarotfunktionen bietet der M5StickC Plus2 eine praktische und vielseitige Plattform für Entwickler, die an Fernbedienungs-, Heimautomatisierungs- oder drahtlosen Kommunikationsprojekten arbeiten. Diese Funktion verwandelt das Gerät von einem einfachen Entwicklungstool in ein leistungsstarkes Werkzeug für IoT- und Embedded-Anwendungen.

 

Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit einem * markiert.

Seitenleiste

Letzter Beitrag

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

Für unseren Newsletter anmelden

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