-
Wählen Sie ein IR-Modul: Zum Beispiel das Grove IR Receiver-Modul.
-
Hardwareverbindung: Verwenden Sie die Grove-Schnittstelle oder Jumperkabel, um das IR-Modul mit den entsprechenden GPIO-Pins des M5StickC Plus2 zu verbinden.
-
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
/** * @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); }
1. IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.begin(DISABLE_LED_FEEDBACK); // Beginnen Sie mit IR_SEND_PIN als Sendepin
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.
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. DasF()
-Makro wird hier verwendet, um den String im Flash-Speicher zu speichern, was hilft, RAM zu sparen.
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.
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 diesCommand
-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.
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')
: DasF()
-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.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
Flexible Anwendungsszenarien