M5Stack-Einsteigerhandbuch: PLUS2-Infrarotfunktionen

 

Der M5StickC Plus2 ist ein kompaktes, vielseitiges Entwicklungsmodul, das einen leistungsstarken Infrarot-Sender (IR) integriert und so neue Möglichkeiten für intelligente Steuerungs- und Kommunikationsanwendungen eröffnet. Mit dieser Funktion kann das Gerät IR-Signale 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 Empfängermodul, das über die Grove-Schnittstelle mit dem M5StickC Plus2 verbunden werden kann.
Um den IR-Empfang zu aktivieren, gehen Sie folgendermaßen vor:
  1. Wählen Sie ein IR Modul: Zum Beispiel das Grove IR Empfänger Modul.
  2. Hardware-Verbindung: Verwenden Sie die Grove-Schnittstelle oder Überbrückungskabel, um das IR-Modul mit den entsprechenden GPIO-Pins am M5StickC Plus2 zu verbinden.
  3. Software-Unterstü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 dekodieren.

Hauptmerkmale der Infrarotfunktion

IR-Übertragung und -Empfang
Mit dem integrierten IR-Sender kann der M5StickC Plus2 die Funktionen herkömmlicher Fernbedienungen nachahmen und Signale zur Steuerung von Fernsehern, Klimaanlagen und anderen IR-kompatiblen Geräten senden.
Der IR-Empfänger ermöglicht es dem Modul, Signale von anderen Fernbedienungen zu lernen und zu dekodieren, wodurch es für mehrere Steuerungsszenarien anpassbar ist.

  

Codekommentare und Funktionsbeschreibungen

/**
 * @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 den Neustart des Empfängers nach jedem
                                   // send. Saves 450 bytes program memory and
                                   // 269 bytes RAM if receiving functions are
                                   // not used.
#define SEND_PWM_BY_TIMER
#IR_TX_PIN 19 definieren




uint8_t sCommand = 0x34;
uint8_t sRepeats = 0;

void setup() {
    auto cfg = M5.config();
    
    //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(GREEN);

    //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);  // Beginnen Sie mit IR_SEND_PIN als Sende-Pin
    IrSender.setSendPin(IR_TX_PIN);//Infrarotsignal-Übertragungs-Pin-Einstellungen
}

void schleife() {
    Serial.println();//Drucken Sie eine Leerzeile, um die Ausgabe zu formatieren und die folgenden Informationen klarer zu machen.
    Serial.print(F('Jetzt senden: Adresse=0x1111, Befehl=0x'));//Eine Zeichenfolge drucken.
    Serial.print(sCommand, HEX);//Anzeige im Hexadezimalformat.
    Serial.print(F(', Repeats='));//Geben Sie die Anzahl der wiederholten Übertragungen an.
    Serial.print(sRepeats);//Die Häufigkeit, mit der der Befehl gesendet wird.
    Serial.println();//Drucken Sie eine weitere Leerzeile, um die Ausgabe übersichtlicher zu gestalten.

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

    //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.breite() / 2,
                                StickCP2.Display.height() / 2 + 40);

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

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Zeichne einen Kreis.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Sende ein Infrarotsignal gemäß dem NEC-Protokoll.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Sendewerte erhöhen
     */
    sCommand += 1;//Erhöhen Sie den Befehlswert.
    Verzögerung(500);//Verzögerung für 500 Millisekunden.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Zeichne einen gefüllten Kreis.
    Verzögerung (500);
}


✔ Kopiert!

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

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

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Beginnen Sie mit IR_SEND_PIN als Sende-Pin
        

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

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

Mithilfe dieser Codezeile können Sie den Infrarot-Übertragungs-Pin anpassen, anstatt den Standard-Pin zu verwenden. Dies ist besonders nützlich, wenn sich Änderungen an Hardwareverbindungen oder Pin-Zuordnung ergeben.

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

                Serial.println();//Drucken Sie eine Leerzeile, um die Ausgabe zu formatieren und die folgenden Informationen klarer zu machen.
                Serial.print(F('Jetzt senden: Adresse=0x1111, Befehl=0x'));//Eine Zeichenfolge drucken.
                Serial.print(sCommand, HEX);//Anzeige im Hexadezimalformat.
                Serial.print(F(', Repeats='));//Geben Sie die Anzahl der wiederholten Übertragungen an.
                Serial.print(sRepeats);//Die Häufigkeit, mit der der Befehl gesendet wird.
                Serial.println();//Drucken Sie eine weitere Leerzeile, um die Ausgabe übersichtlicher zu gestalten.
        
  • Verwenden Sie Serial.print(), um die Zeichenfolge „Jetzt senden: Adresse=0x1111, Befehl=0x“ zu drucken. Das Makro F() wird hier verwendet, um die Zeichenfolge im Flash-Speicher zu speichern und so 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 Methode drawString an, um die Zeichenfolge an einer angegebenen Position auf dem Bildschirm darzustellen.

  • StickCP2.Display.width() / 2: Dadurch wird sichergestellt, dass die Zeichenfolge horizontal auf dem Display zentriert ist.

  • StickCP2.Display.height() / 2 - 40: Dadurch wird die Zeichenfolge 40 Pixel über der vertikalen Mitte des Bildschirms platziert.

Zeigen Sie „ADDR:0x1111“ mit der Methode drawString 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.

Zeigen Sie Befehlsinformationen an, indem Sie die Zeichenfolge 'CMD:0x' zusammen mit der hexadezimalen Darstellung von rendern sCommand-Variable.

  • String(sCommand, HEX): Konvertiert die Variable sCommand in eine hexadezimale Zeichenfolge.

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

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

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

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

                StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Zeichne einen Kreis.
        
Verwenden Sie Serial.println(), um Informationen auf dem **seriellen Monitor** zu drucken, und fügen Sie am Ende eine neue Zeile hinzu, um sicherzustellen, dass die nächste Ausgabe in einer neuen Zeile beginnt.

  • F('Standard-NEC mit 16-Bit-Adresse senden'): Das Makro F() speichert die Zeichenfolge ' Senden Sie Standard-NEC mit 16-Bit-Adresse im Flash-Speicher (Programmspeicher) anstelle von **RAM**, um Speicherplatz zu sparen.
  • Die Ausgabe „Standard-NEC mit 16-Bit-Adresse senden“ gibt an, dass ein Standard-NEC-Protokoll-Infrarotsignal mit einer **16-Bit-Adresse** übertragen wird.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Sende ein Infrarotsignal gemäß dem NEC-Protokoll.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Sendewerte erhöhen
                 */
        
0x1111: Dies ist die Adresse des Infrarotsignals, die einen 16-Bit-Adresswert darstellt, der zur Identifizierung des verwendet wird Zielgerät oder Befehlsziel.
sCommand: Dies ist der zu sendende Befehlswert. Es kann ein 8-Bit- oder 16-Bit-Wert sein, der den genauen Vorgang angibt, den das Zielgerät ausführen soll.
sRepeats: Gibt an, wie oft das Signal wiederholt wird, normalerweise um die Signalzuverlässigkeit zu verbessern oder bestimmte Anforderungen zu erfüllen das Gerät, das gesteuert wird.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Sende ein Infrarotsignal gemäß dem NEC-Protokoll.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Sendewerte erhöhen
                 */
        
  • 0x1111: Dies ist die Geräteadresse des Infrarotsignals, die zur Identifizierung eines bestimmten Geräts verwendet wird.
  • 0x2223: Dies ist der an das Gerät gesendete Befehlscode, der den auszuführenden Vorgang angibt.
  • sRepeats: Stellt die Anzahl der Wiederholungen des Signals dar, typischerweise um die Signalzuverlässigkeit zu gewährleisten oder die Anforderungen des Zielgeräts zu erfüllen.

  

Einfache Programmierung

Auf die IR-Funktionalität kann problemlos mit dem Arduino-Framework oder UIFlow, der visuellen Programmierumgebung von M5Stack, zugegriffen und diese programmiert werden. Entwickler können IrSender.begin() aufrufen, um die IR-Sendefunktion zu initialisieren und Parameter wie DISABLE_LED_FEEDBACK zu konfigurieren, das die blinkende LED-Anzeige während der Übertragung deaktiviert.

 

Flexible Anwendungszenarien

Smart Home Control: Automatisieren Sie Haushaltsgeräte, indem Sie IR-Befehle direkt vom M5StickC Plus2 senden.
Fernbedienung lernen: Zeichnen Sie Signale von vorhandenen Fernbedienungen auf, 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 vorbelegten IR-Übertragungspin, der normalerweise als IR_SEND_PIN gekennzeichnet ist. Dies erleichtert die Bereitstellung von IR-Funktionen ohne komplizierte Hardware-Setups.

    

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

 

Kommentar hinterlassen

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

Register for our newsletter

Get the latest information about our products and special offers.