M5Stack Beginnersgids: PLUS2 infraroodmogelijkheden
-
Selecteer een IR module: bijvoorbeeld de Grove IR Receiver module.
-
Hardwareverbinding: Gebruik de Grove-interface of jumperdraden om de IR-module aan te sluiten op de juiste GPIO pinnen op de M5StickC Plus2.
-
Softwareondersteuning: schrijf code in Arduino of MicroPython om de IR-signalen te lezen. Arduino-bibliotheken, zoals IRremote, kunnen eenvoudig algemene IR-protocollen decoderen (bijvoorbeeld het NEC-protocol).
Belangrijkste Kenmerken van de Infraroodfunctie
Codecommentaar en functiebeschrijvingen
/** * @file ir_nec.ino * @auteur SeanKwok (shaoxiang@m5stack.com) * @brief M5StickCPlus2 IR NEC test * @version 0.1 * @date 2023-12-09 * * * @Hardwares: M5StickCPlus2 * @Platformversie: Arduino M5Stack Board Manager v2.0.9 * @Afhankelijke Bibliotheek: * 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 // Schakelt het herstarten van de ontvanger na elke keer uit // 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 sHerhalingen = 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(GROEN); //Text alignment middle_center means aligning the center of the text to the specified coordinate position. StickCP2.Display.setTextDatum(midden_midden); //Font Styles StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24); //Font size StickCP2.Display.setTextSize(1); IrSender.begin(DISABLE_LED_FEEDBACK); // Begin met IR_SEND_PIN als verzendpincode IrSender.setSendPin(IR_TX_PIN);//Infrarood signaal verzenden pin-instellingen } lege lus() { Serial.println();//Druk een lege regel af om de uitvoer op te maken en de volgende informatie duidelijker te maken. Serial.print(F('Nu verzenden: adres=0x1111, opdracht=0x'));//Een tekenreeks afdrukken. Serial.print(sCommand, HEX);//Weergave in hexadecimaal formaat. Serial.print(F(', repeats='));//Geef het aantal herhaalde verzendingen aan. Serial.print(sRepeats);//Het aantal keren dat de opdracht wordt verzonden. Serial.println();//Druk nog een lege regel af om de uitvoer overzichtelijker te maken. StickCP2.Display.clear();//Update de schermweergave. //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); Serial.println(F('Stuur standaard NEC met 16-bits adres')); StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Teken een cirkel. IrSender.sendNEC(0x1111, sCommand, sRepeats);//Verzend een infraroodsignaal volgens het NEC-protocol. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Verhoog verzendwaarden */ sCommand += 1;//Verhoog de opdrachtwaarde. vertraging(500);//Vertraging van 500 milliseconden. StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Teken een gevulde cirkel. delay(500); }
1. IrSender.begin(DISABLE_LED_FEEDBACK);
IrSender.begin(DISABLE_LED_FEEDBACK); // Begin met IR_SEND_PIN als verzendpincode
begin
van het object IrSender
aan om de infraroodtransmissiefunctie te initialiseren.-
DISABLE_LED_FEEDBACK
: dit is een parameter die wordt gebruikt om LED-feedback uit te schakelen. Als feedback is ingeschakeld, knippert de LED tijdens het verzenden van infraroodsignalen.
IrSender
een vooraf ingestelde infraroodtransmissiepin (zoals IR_SEND_PIN
) om infraroodsignalen te verzenden. Deze coderegel activeert de infraroodzender en bereidt deze voor op het verzenden van infraroodsignalen.2. IrSender.setSendPin(IR_TX_PIN);
IrSender.begin(DISABLE_LED_FEEDBACK); // Begin met IR_SEND_PIN als verzendpincode
Roep de methode setSendPin
van het object IrSender
aan om de pin voor infraroodsignaaloverdracht in te stellen op IR_TX_PIN
.
-
IR_TX_PIN
is een gedefinieerd pincode die de exacte pincode specificeert die wordt gebruikt om infraroodsignalen te verzenden.
Door deze coderegel te gebruiken, kunt u de infraroodtransmissiepin aanpassen in plaats van de standaardpin te gebruiken. Dit is vooral handig als er wijzigingen zijn in hardwareverbindingen of pinmapping.
3. Serial.print(F('Nu verzenden: adres=0x1111, opdracht=0x'));
Serial.println();//Druk een lege regel af om de uitvoer op te maken en de volgende informatie duidelijker te maken. Serial.print(F('Nu verzenden: adres=0x1111, opdracht=0x'));//Een tekenreeks afdrukken. Serial.print(sCommand, HEX);//Weergave in hexadecimaal formaat. Serial.print(F(', repeats='));//Geef het aantal herhaalde verzendingen aan. Serial.print(sRepeats);//Het aantal keren dat de opdracht wordt verzonden. Serial.println();//Druk nog een lege regel af om de uitvoer overzichtelijker te maken.
-
Gebruik
Serial.print()
om de tekenreeks 'Nu verzenden: adres=0x1111, opdracht=0x'
af te drukken. De macroF()
wordt hier gebruikt om de tekenreeks op te slaan in Flash-geheugen, waardoor RAM wordt bespaard.
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);
Geef 'IR NEC SEND' weer met behulp van de drawString
methode om de string op een gespecificeerde positie op het scherm weer te geven.
-
StickCP2.Display.width() / 2
: Dit zorgt ervoor dat de tekenreeks horizontaal op het scherm wordt gecentreerd. -
StickCP2.Display.height() / 2 - 40
: hierdoor wordt de tekenreeks 40 pixels boven het verticale midden van het scherm geplaatst.
drawString
om de adresgegevens weer te geven.-
StickCP2.Display.width() / 2
: Centreert de tekst horizontaal op het scherm. -
StickCP2.Display.height() / 2
: Centreert de tekst verticaal en plaatst deze precies in het midden van het scherm.
Geef opdrachtinformatie weer door de tekenreeks 'CMD:0x' weer te geven, samen met de hexadecimale weergave van de sCommand
variabele.
-
String(sCommand, HEX)
: Converteert desCommand
variabele naar een hexadecimale tekenreeks. -
StickCP2.Display.width() / 2
: Centreert de tekst horizontaal op het scherm. -
StickCP2.Display.height() / 2 + 40
: Plaatst de tekst 40 pixels onder het verticale midden van het scherm.
5. Serial.println(F('Stuur standaard NEC met 16-bits adres'));
Serial.println(F('Stuur standaard NEC met 16-bits adres')); StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Teken een cirkel.
Serial.println()
om informatie af te drukken naar de **seriële monitor**, waarbij u aan het einde een nieuwe regel toevoegt om ervoor te zorgen dat de volgende uitvoer op een nieuwe regel begint.-
F('Stuur standaard NEC met 16-bits adres')
: de macroF()
slaat de tekenreeks ' op Stuur standaard NEC met 16-bits adres' naar Flash-geheugen (programma-opslag) in plaats van **RAM**, waardoor geheugen wordt bespaard. -
De uitvoer 'Stuur standaard NEC met 16-bits adres' geeft aan dat een standaard NEC-protocol infraroodsignaal wordt verzonden met een **16-bits adres**.
6. IrSender.sendNEC()
IrSender.sendNEC(0x1111, sCommand, sRepeats);//Verzend een infraroodsignaal volgens het NEC-protocol. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Verhoog verzendwaarden */
0x1111
: dit is het adres van het infraroodsignaal, dat een 16-bits adreswaarde vertegenwoordigt die wordt gebruikt om het doelapparaat of opdrachtbestemming.sCommand
: dit is de opdrachtwaarde die moet worden verzonden. Het kan een 8-bits of 16-bits waarde zijn, die de exacte bewerking specificeert die het doelapparaat moet uitvoeren.sRepeats
: geeft het aantal keren aan dat het signaal wordt herhaald, meestal om de signaalbetrouwbaarheid te verbeteren of te voldoen aan specifieke eisen van het apparaat dat wordt bestuurd.IrSender.sendNEC(0x1111, sCommand, sRepeats);//Verzend een infraroodsignaal volgens het NEC-protocol. // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol. /* * Verhoog verzendwaarden */
-
0x1111
: dit is het apparaatadres van het infraroodsignaal, dat wordt gebruikt om een specifiek apparaat te identificeren. -
0x2223
: dit is de opdrachtcode die naar het apparaat wordt verzonden en waarin de uit te voeren bewerking wordt gespecificeerd. -
sRepeats
: vertegenwoordigt het aantal keren dat het signaal wordt herhaald, meestal om de signaalbetrouwbaarheid te garanderen of te voldoen aan de >vereisten van het doelapparaat.
Eenvoudig Programmeren
Flexibele Toepassingsscenario's
Voorgeconfigureerde Infrarood Pin