-
Wählen Sie ein IR-Modul: Zum Beispiel das Grove IR-Empfängermodul.
-
Hardware-Verbindung: Verwenden Sie die Grove-Schnittstelle oder Jumper-Kabel, um das IR-Modul mit den entsprechenden GPIO-Pins am 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ängige IR-Protokolle (z. B. NEC-Protokoll) problemlos decodieren.

Hauptmerkmale der Infrarotfunktion
/** * @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); }
1. IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.begin(DISABLE_LED_FEEDBACK); // Starten 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 die Rückmeldung aktiviert ist, blinkt die LED während der Übertragung von Infrarotsignalen.
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. DasF()
-Makro wird hier verwendet, um die Zeichenkette im Flash-Speicher zu speichern, was hilft, RAM zu sparen.
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.
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 VariablesCommand
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.
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')
: DasF()
-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.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
Flexible Anwendungsszenarien
Vorkonfigurierte Infrarot-Pin