-
Selecteer een IR-module: bijvoorbeeld de Grove IR-ontvangermodule.
-
Hardwareverbinding: Gebruik de Grove-interface of jumperdraden om de IR-module aan te sluiten op de juiste GPIO-pinnen van de M5StickC Plus2.
-
Softwareondersteuning: Schrijf code in Arduino of MicroPython om IR-signalen te lezen. Arduino-bibliotheken, zoals IRremote, kunnen veelgebruikte IR-protocollen eenvoudig decoderen, zoals het NEC-protocol.

Belangrijkste kenmerken van de infraroodfunctie
/**
* @file ir_nec.ino
* @author 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
* @Dependent Library:
* 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 // Voorkomt dat de ontvanger na elke
// verzonden. Bespaart 450 bytes programmageheugen en
// 269 bytes RAM als ontvang functies worden
// niet gebruikt.
#define SEND_PWM_BY_TIMER
#define IR_TX_PIN 19
uint8_t sCommand = 0x34;
uint8_t sRepeats = 0;
void setup() {
auto cfg = M5.config();
//Raadpleeg de Afhankelijke bibliotheek voor meer informatie over de onderliggende logica van de initialisatie met begin().
StickCP2.begin(cfg);
//Richtingen voor schermrotatie
StickCP2.Display.setRotation(1);
// De kleur van de tekst die op het scherm wordt weergegeven.
StickCP2.Display.setTextColor(GREEN);
//Tekstuitlijning: middle_center betekent dat het midden van de tekst wordt uitgelijnd met de opgegeven coördinaatpositie.
StickCP2.Display.setTextDatum(middle_center);
//Lettertypestijlen
StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);
//Tekengrootte
StickCP2.Display.setTextSize(1);
IrSender.begin(DISABLE_LED_FEEDBACK); // Start met IR_SEND_PIN als verzendpin
IrSender.setSendPin(IR_TX_PIN);//Instellingen voor de pin voor het verzenden van infraroodsignalen
}
void loop() {
Serial.println();//Druk een lege regel af om de uitvoer op te maken en de volgende informatie duidelijker te maken.
Serial.print(F('Send now: address=0x1111, command=0x'));//Druk een tekenreeks af.
Serial.print(sCommand, HEX);//Geef de waarde weer 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();//Werk de schermweergave bij.
//drawString Een methode die wordt gebruikt om een tekenreeks op een opgegeven positie te tekenen.
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);//Teken een cirkel.
IrSender.sendNEC(0x1111, sCommand, sRepeats);//Een infraroodsignaal verzenden volgens het NEC-protocol.
// IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Een infraroodsignaal verzenden volgens het Onkyo-protocol.
/*
* Waarden voor verzenden verhogen
*/
sCommand += 1;//Verhoog de opdrachtwaarde.
delay(500);//Wacht 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); // Start met IR_SEND_PIN als verzendpin
begin van het object IrSender aan om de functie voor het verzenden van infraroodsignalen te initialiseren.-
DISABLE_LED_FEEDBACK: Dit is een parameter om de ledfeedback uit te schakelen. Als feedback is ingeschakeld, knippert de led tijdens het verzenden van infraroodsignalen.
IrSender een vooraf ingestelde infraroodverzendpin (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); // Start met IR_SEND_PIN als verzendpin
Roep de methode setSendPin van het object IrSender aan om de pin voor het verzenden van infraroodsignalen in te stellen op IR_TX_PIN.
-
IR_TX_PINis een gedefinieerd pinnummer dat de exacte pin aangeeft die wordt gebruikt om infraroodsignalen te verzenden.
Met deze coderegel kunt u de infraroodverzendpin aanpassen in plaats van de standaardpin te gebruiken. Dit is vooral nuttig wanneer er wijzigingen zijn in de hardwareverbindingen of pinindeling.
3. Serial.print(F('Send now: address=0x1111, command=0x'));
Serial.println();//Druk een lege regel af om de uitvoer op te maken en de volgende informatie duidelijker te maken.
Serial.print(F('Send now: address=0x1111, command=0x'));//Druk een tekenreeks af.
Serial.print(sCommand, HEX);//Geef de waarde weer 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 'Send now: address=0x1111, command=0x'af te drukken. De macroF()wordt hier gebruikt om de tekenreeks in het Flash-geheugen op te slaan, zodat RAM wordt bespaard.
StickCP2.Display.drawString(' ', , );
//drawString Een methode die wordt gebruikt om een tekenreeks op een opgegeven positie te tekenen.
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);
Toon 'IR NEC SEND' met de methode drawString om de tekenreeks op een opgegeven 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: Dit plaatst de tekenreeks 40 pixels boven het verticale midden van het scherm.
drawString om de adresinformatie weer te geven.-
StickCP2.Display.width() / 2: Centreert de tekst horizontaal op het scherm. -
StickCP2.Display.height() / 2: Centreert de tekst verticaal, precies in het midden van het scherm.
Toon opdrachtinformatie door de tekenreeks 'CMD:0x' samen met de hexadecimale weergave van de variabele sCommand weer te geven.
-
String(sCommand, HEX): Converteert de variabelesCommandnaar 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('Send standard NEC with 16 bit address'));
Serial.println(F('Send standard NEC with 16 bit address'));
StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Teken een cirkel.
Serial.println() om informatie naar de **seriële monitor** te schrijven. Er wordt een nieuwe regel toegevoegd, zodat de volgende uitvoer op een nieuwe regel begint.-
F('Send standard NEC with 16 bit address'): De macroF()slaat de tekenreeks 'Send standard NEC with 16 bit address' op in het flashgeheugen (programmageheugen) in plaats van in **RAM**, waardoor geheugen wordt bespaard. -
De uitvoer 'Send standard NEC with 16 bit address' geeft aan dat er een standaard infraroodsignaal volgens het NEC-protocol wordt verzonden met een **16-bits adres**.
6. IrSender.sendNEC()
IrSender.sendNEC(0x1111, sCommand, sRepeats);//Een infraroodsignaal verzenden volgens het NEC-protocol.
// IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Een infraroodsignaal verzenden volgens het Onkyo-protocol.
/*
* Waarden voor verzenden verhogen
*/
0x1111: dit is het adres van het infraroodsignaal, een 16-bits adreswaarde die wordt gebruikt om het doelapparaat of de bestemming van de opdracht te identificeren.sCommand: dit is de opdrachtwaarde die moet worden verzonden. Dit kan een waarde van 8 of 16 bits zijn die de exacte bewerking specificeert die het doelapparaat moet uitvoeren.sRepeats: geeft het aantal keer aan dat het signaal wordt herhaald, meestal om de betrouwbaarheid van het signaal te verbeteren of aan specifieke vereisten van het te bedienen apparaat te voldoen. IrSender.sendNEC(0x1111, sCommand, sRepeats);//Een infraroodsignaal verzenden volgens het NEC-protocol.
// IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Een infraroodsignaal verzenden volgens het Onkyo-protocol.
/*
* Waarden voor verzenden verhogen
*/
-
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 die de uit te voeren bewerking specificeert. -
sRepeats: geeft het aantal keer aan dat het signaal wordt herhaald, meestal om de betrouwbaarheid van het signaal te garanderen of aan de vereisten van het doelapparaat te voldoen.
Eenvoudig programmeren
Flexibele toepassingsscenario's
Vooraf geconfigureerde infraroodpin
