M5Stack Beginnersgids: PLUS2 infraroodmogelijkheden

De M5StickC Plus2 is een compact, veelzijdig ontwikkelingsmodule die een krachtige infrarood (IR) zender integreert, wat nieuwe mogelijkheden opent voor slimme besturings- en communicatieapplicaties. Deze functie stelt het apparaat in staat om IR-signalen te verzenden.
 
De M5StickC Plus2 heeft geen ingebouwde infrarood (IR) ontvanger, 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 Receiver module, 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 Receiver module.
  2. Hardwareverbinding: Gebruik de Grove-interface of jumperdraden om de IR-module aan te sluiten op de juiste GPIO pinnen op de M5StickC Plus2.
  3. Software-ondersteuning: Schrijf code in Arduino of MicroPython om de IR-signalen te lezen. Arduino-bibliotheken, zoals IRremote, kunnen veelvoorkomende IR-protocollen (bijv. NEC-protocol) eenvoudig decoderen.

Belangrijkste kenmerken van de infraroodfunctie

IR-transmissie en -ontvangst
Met de ingebouwde IR-zender kan de M5StickC Plus2 de functies van traditionele afstandsbedieningen nabootsen en signalen verzenden om tv's, airconditioners en andere IR-compatibele apparaten te bedienen.
De IR-ontvanger stelt de module in staat signalen van andere afstandsbedieningen te leren en te decoderen, waardoor hij aanpasbaar is voor meerdere bedieningsscenario's.

  

/**
 * @file ir_nec.ino
 * @auteur SeanKwok (shaoxiang@m5stack.com)
 * @brief M5StickCPlus2 IR NEC test
 * @version 0.1
 * @date 2023-12-09
 *
 *
 * @Hardwares: M5StickCPlus2
 * @Platform Versie: 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 opnieuw starten van de ontvanger na elke uit
                                   // send. Saves 450 bytes program memory and
                                   // 269 bytes RAM if receiving functions are
                                   // not used.
#define VERSTUUR_PWM_VIA_TIMER
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sRepeats = 0;

lege 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(middle_center);

    //Font Styles
    StickCP2.Display.setTextFont(&fonts::Orbitron_Light_24);

    //Font size
    StickCP2.Display.setTextSize(1);

    IrSender.begin(DISABLE_LED_FEEDBACK);  // Start met IR_SEND_PIN als zendpin
    IrSender.setSendPin(IR_TX_PIN);//Instellingen voor infrarood signaal zendpin
}

lege lus() {
    Serial.println();//Print een lege regel om de uitvoer te formatteren en de volgende informatie duidelijker te maken.
    Serial.print(F('Verzend nu: adres=0x1111, commando=0x'));//Print een string.
    Serial.print(sCommand, HEX);//Weergeven in hexadecimale notatie.
    Serial.print(F(', herhalingen='));//Geef het aantal herhaalde transmissies aan.
    Serial.print(sRepeats);//Het aantal keren dat het commando wordt verzonden.
    Serial.println();//Print nog een lege regel om de uitvoer overzichtelijker te maken.

    StickCP2.Display.clear();//Schermweergave bijwerken.

    //drawString A method used to draw a string at a specified position.
    StickCP2.Display.drawString('IR NEC VERZENDEN', 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.breedte() / 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 met 1.
    delay(500);//Vertraging van 500 milliseconden.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Teken een gevulde cirkel.
    vertraging(500);
}
  
✔ Gekopieerd!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Start met IR_SEND_PIN als zendpin
        
Roep de begin-methode van het IrSender-object 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.
Standaard zal IrSender een vooraf ingestelde infrarood transmissie pin gebruiken (zoals IR_SEND_PIN) om infrarood signalen te verzenden. Deze regel code activeert de infrarood zender en bereidt deze voor om infrarood signalen te verzenden.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Start met IR_SEND_PIN als zendpin
        

Roep de setSendPin-methode van het IrSender-object aan om de infraroodsignaaltransmissiepin in te stellen op IR_TX_PIN.

  • IR_TX_PIN is een gedefinieerd pinnummer dat de exacte pin specificeert die wordt gebruikt om infraroodsignalen te verzenden.

Door deze regel code te gebruiken, kunt u de infraroodtransmissiepin aanpassen in plaats van de standaard te gebruiken. Dit is vooral handig wanneer er wijzigingen zijn in hardwareverbindingen of pinmapping.

3. Serial.print(F('Nu verzenden: adres=0x1111, commando=0x'));

                Serial.println();//Print een lege regel om de uitvoer te formatteren en de volgende informatie duidelijker te maken.
                Serial.print(F('Verzend nu: adres=0x1111, commando=0x'));//Print een string.
                Serial.print(sCommand, HEX);//Weergeven in hexadecimale notatie.
                Serial.print(F(', herhalingen='));//Geef het aantal herhaalde transmissies aan.
                Serial.print(sRepeats);//Het aantal keren dat het commando wordt verzonden.
                Serial.println();//Print nog een lege regel om de uitvoer overzichtelijker te maken.
        
  • Gebruik Serial.print() om de string 'Send now: address=0x1111, command=0x' af te drukken. De F() macro wordt hier gebruikt om de string op te slaan in Flash-geheugen, wat helpt om RAM te besparen.
4. 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 de drawString-methode om de tekenreeks op een opgegeven positie op het scherm weer te geven.

  • StickCP2.Display.width() / 2: Dit zorgt ervoor dat de tekst horizontaal gecentreerd wordt op het scherm.

  • StickCP2.Display.height() / 2 - 40: Dit plaatst de tekst 40 pixels boven het verticale midden van het scherm.

Geef 'ADDR:0x1111' weer met de drawString methode om de adresinformatie te tonen.
  • StickCP2.Display.width() / 2: Centreert de tekst horizontaal op het scherm.
  • StickCP2.Display.height() / 2: Centreert de tekst verticaal, waardoor deze precies in het midden van het scherm wordt geplaatst.

Toon commando-informatie door de string 'CMD:0x' weer te geven samen met de hexadecimale weergave van de sCommand variabele.

  • String(sCommand, HEX): Zet de variabele sCommand om 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.
        
Gebruik Serial.println() om informatie naar de **seriële monitor** te printen, waarbij aan het einde een nieuwe regel wordt toegevoegd om ervoor te zorgen dat de volgende uitvoer op een nieuwe regel begint.

  • F('Verzend standaard NEC met 16-bits adres'): De F() macro slaat de string 'Verzend standaard NEC met 16-bits adres' op in Flash-geheugen (programmageheugen) in plaats van **RAM**, wat helpt om geheugen te besparen.
  • 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 de bestemmingsopdracht te identificeren.
sCommand: Dit is de commando waarde die verzonden moet worden. Het kan een 8-bit of 16-bit 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 aangestuurd.
  
7. IrSender.sendOnkyo()
                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, gebruikt om een specifiek apparaat te identificeren.
  • 0x2223: Dit is de commando code die naar het apparaat wordt gestuurd, waarin de bewerking wordt gespecificeerd die moet worden uitgevoerd.
  • sRepeats: Vertegenwoordigt het aantal keren dat het signaal wordt herhaald, meestal om de betrouwbaarheid van het signaal te waarborgen of te voldoen aan de vereisten van het doelsysteem.

  

Eenvoudig programmeren

De IR-functionaliteit is eenvoudig toegankelijk en programmeerbaar met behulp van 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 te configureren, waarmee de knipperende LED-indicator tijdens verzending wordt uitgeschakeld.

 

Flexibele Toepassingsscenario's

Smart Home Control: Automatiseer huishoudelijke apparaten door IR-commando's rechtstreeks vanaf de M5StickC Plus2 te verzenden.
Learning Remote: Signalen opnemen van bestaande afstandsbedieningen om een universele afstandsbediening te creëren.
IoT en Robotica: Integreer IR-communicatie voor eenvoudige draadloze commando's tussen apparaten of robots.

  

Vooraf geconfigureerde infrarode pin

De M5StickC Plus2 wordt geleverd met een vooraf toegewezen IR-transmissiepin, meestal aangeduid als IR_SEND_PIN. Dit maakt het eenvoudig om IR-functies te gebruiken zonder ingewikkelde hardwareconfiguraties.

    

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

 

Laat een reactie achter

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

Meld je aan voor onze nieuwsbrief

Ontvang de laatste informatie over onze producten en speciale aanbiedingen.