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.

 

Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit * gekennzeichnet.

Seitenleiste

Neuester Beitrag

Dieser Abschnitt enthält derzeit keine Inhalte. Fügen Sie Inhalte zu diesem Abschnitt über die Seitenleiste hinzu.

Melden Sie sich für unseren Newsletter an

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