M5Stack-Einsteigerhandbuch: PLUS2-Infrarotfunktionen
-
Wählen Sie ein IR-Modul aus: Zum Beispiel das Modul Grove IR Receiver.
-
Hardware-Verbindung: Verwenden Sie die Grove-Schnittstelle oder Überbrückungskabel, um das IR-Modul mit den entsprechenden GPIO-Pins am M5StickC Plus2 zu verbinden.
-
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
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); }
1. IrSender.begin(LED_FEEDBACK_AUS);
IrSender.begin(DISABLE_LED_FEEDBACK); // Beginnen Sie mit IR_SEND_PIN als Sende-Pin
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.
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 MakroF()
wird hier verwendet, um die Zeichenfolge im Flash-Speicher zu speichern und so 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 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.
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 VariablesCommand
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.
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 MakroF()
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.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
Flexible Anwendungsszenarien
Vorkonfigurierte Infrarot-Pin