M5Stack beginnershandleiding: infraroodmogelijkheden van PLUS2

De M5StickC Plus2 is een compacte, veelzijdige ontwikkelmodule met een krachtige infraroodzender (IR), die nieuwe mogelijkheden biedt voor slimme bedienings- en communicatietoepassingen. Dankzij deze functie kan het apparaat IR-signalen verzenden.
 
De M5StickC Plus2 heeft geen ingebouwde infraroodontvanger (IR), maar kan IR-signalen ontvangen door een externe IR-module aan te sluiten. Het M5Stack ecosysteem biedt verschillende compatibele IR-modules, zoals de Grove IR-ontvangermodule, die via de Grove-interface op de M5StickC Plus2 kan worden aangesloten.
Volg deze stappen om IR-ontvangst in te schakelen:
  1. Selecteer een IR-module: bijvoorbeeld de Grove IR-ontvangermodule.
  2. Hardwareverbinding: Gebruik de Grove-interface of jumperdraden om de IR-module aan te sluiten op de juiste GPIO-pinnen van de M5StickC Plus2.
  3. 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

IR-verzending en -ontvangst
Met de ingebouwde IR-zender kan de M5StickC Plus2 de functies van traditionele afstandsbedieningen nabootsen en signalen verzenden om televisies, airconditioners en andere IR-compatibele apparaten te bedienen.
Met de IR-ontvanger kan de module signalen van andere afstandsbedieningen leren en decoderen, waardoor deze geschikt is voor verschillende bedieningsscenario's.

  

/**
 * @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);
}
  
✔ Gekopieerd!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Start met IR_SEND_PIN als verzendpin
        
Roep de methode 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.
Standaard gebruikt 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_PIN is 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 macro F() wordt hier gebruikt om de tekenreeks in het Flash-geheugen op te slaan, zodat RAM wordt bespaard.
4. 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.

Toon 'ADDR:0x1111' met de methode 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 variabele sCommand 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('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.
        
Gebruik 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 macro F() 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.
  
7. IrSender.sendOnkyo()
                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

De IR-functionaliteit kan eenvoudig worden gebruikt en geprogrammeerd met het Arduino-framework of UIFlow, de visuele programmeeromgeving van M5Stack. Ontwikkelaars kunnen IrSender.begin() aanroepen om de IR-verzendfunctie te initialiseren en parameters zoals DISABLE_LED_FEEDBACK configureren, waarmee de knipperende led-indicator tijdens het verzenden wordt uitgeschakeld.

 

Flexibele toepassingsscenario's

Bediening van het slimme huis: automatiseer huishoudelijke apparaten door IR-opdrachten rechtstreeks vanaf de M5StickC Plus2 te verzenden.
Lerende afstandsbediening: leg signalen van bestaande afstandsbedieningen vast om een universele afstandsbediening te maken.
IoT en robotica: integreer IR-communicatie voor eenvoudige draadloze opdrachten tussen apparaten of robots.

  

Vooraf geconfigureerde infraroodpin

De M5StickC Plus2 wordt geleverd met een vooraf toegewezen IR-verzendpin, meestal aangeduid als IR_SEND_PIN. Hierdoor kunnen IR-functies eenvoudig worden geïmplementeerd zonder ingewikkelde hardwareconfiguraties.

    

Met zijn compacte formaat en geïntegreerde infraroodmogelijkheden biedt de M5StickC Plus2 een handig en veelzijdig platform voor ontwikkelaars die werken aan projecten voor afstandsbediening, domotica of draadloze communicatie. Deze functie verandert het apparaat van een eenvoudig ontwikkelhulpmiddel in een krachtig hulpmiddel voor IoT- en embedded toepassingen.

 

Plaats een opmerking

Je e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

Register for our newsletter

Get the latest information about our products and special offers.

Website Feedback

Help us improve OpenELAB

Found a website issue or have an idea? Tell us what would make your experience better.