-
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_PINist 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 VariablesCommandin 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
