Zum Inhalt springen

+49 1626571232

info@openelab.io

🚀 Kostenloser Versand ab 50€ in der EU / 80€ weltweit

M5Stack-Einsteigerhandbuch: PLUS2-Infrarotfunktionen

16 Oct 2024 0 Kommentare
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 verfügt über keinen eingebauten Infrarot-(IR)-Empfänger, kann aber durch den Anschluss eines externen IR-Moduls IR-Signale empfangen. Das M5Stack-Ökosystem bietet mehrere kompatible IR-Module, wie zum Beispiel 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 aus: Zum Beispiel das Modul Grove IR Receiver.
  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
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sWiederholungen = 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(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);  // 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.breite() / 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('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.
    delay(500);
}


✔ Kopiert!

 

1. IrSender.begin(LED_FEEDBACK_AUS);

                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 dar, mit der das Signal wiederholt wird, typischerweise um die Signalzuverlässigkeit sicherzustellen oder die Vorgaben zu erfüllen >Anforderungen des Zielgeräts.

  

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 Anwendungsszenarien

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.

 

Vorheriger Beitrag
Nächster Beitrag

Hinterlasse einen Kommentar

Alle Blog-Kommentare werden vor der Veröffentlichung geprüft

Jemand kaufte vor kurzem ein

Danke fürs Abonnieren!

Diese E-Mail wurde registriert!

Shoppen Sie den Look

Wähle Optionen

Bearbeitungsoption
Benachrichtigung wieder vorrätig
this is just a warning
Anmeldung
Einkaufswagen
0 Artikel