M5Stack Nybörjarguide: PLUS2 Infraröda Funktioner

M5StickC Plus2 är en kompakt, mångsidig utvecklingsmodul som integrerar en kraftfull infraröd (IR) sändare, vilket öppnar nya möjligheter för smart styrning och kommunikationsapplikationer. Denna funktion gör det möjligt för enheten att skicka IR-signaler.
 
M5StickC Plus2 har ingen inbyggd infraröd (IR) mottagare, men kan ta emot IR-signaler genom att ansluta en extern IR-modul. M5Stack ekosystemet erbjuder flera kompatibla IR-moduler, såsom Grove IR Receiver-modulen, som kan anslutas till M5StickC Plus2 via Grove-gränssnittet.
För att aktivera IR-mottagning, följ dessa steg:
  1. Välj en IR-modul: Till exempel Grove IR Receiver-modulen.
  2. Hårdvaruanslutning: Använd Grove-gränssnittet eller hopkopplingskablar för att ansluta IR-modulen till lämpliga GPIO-stift på M5StickC Plus2.
  3. Programvarustöd: Skriv kod i Arduino eller MicroPython för att läsa IR-signalerna. Arduino-bibliotek, såsom IRremote, kan enkelt avkoda vanliga IR-protokoll (t.ex. NEC-protokollet).

Nyckelfunktioner för infraröd funktion

IR-sändning och mottagning
Med den inbyggda IR-sändaren kan M5StickC Plus2 efterlikna funktionerna hos traditionella fjärrkontroller och skicka signaler för att styra TV-apparater, luftkonditioneringar och andra IR-kompatibla enheter.
IR-mottagaren gör det möjligt för modulen att lära sig och avkoda signaler från andra fjärrkontroller, vilket gör den anpassningsbar för flera styrscenarier.

  

/**
 * @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  // Inaktiverar omstart av mottagaren efter varje
                                   // 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 sRepeats = 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(GREEN);

    //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);  // Starta med IR_SEND_PIN som sändningspinne
    IrSender.setSendPin(IR_TX_PIN);//Inställningar för infraröd signal sändningspinne
}

void loop() {
    Serial.println();//Skriv ut en tom rad för att formatera utdata och göra följande information tydligare.
    Serial.print(F('Send now: address=0x1111, command=0x'));//Skriv ut en sträng.
    Serial.print(sCommand, HEX);//Visa i hexadecimalt format.
    Serial.print(F(', repeats='));//Anger antalet upprepade sändningar.
    Serial.print(sRepeats);//Antalet gånger kommandot skickas.
    Serial.println();//Skriv ut en tom rad till för att göra utdata mer organiserad.

    StickCP2.Display.clear();//Uppdatera skärmens visning.

    //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('Send standard NEC with 16 bit address'));

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Rita en cirkel.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Skicka en infraröd signal enligt NEC-protokollet.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Öka sändningsvärden
     */
    sCommand += 1;//Öka kommando värdet med ett.
    delay(500);//Fördröjning i 500 millisekunder.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Rita en fylld cirkel.
    delay(500);
}
  
✔ Kopierat!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Starta med IR_SEND_PIN som sändningspinne
        
Anropa begin-metoden på IrSender-objektet för att initiera den infraröda sändningsfunktionen.
  • DISABLE_LED_FEEDBACK: Detta är en parameter som används för att inaktivera LED-feedback. Om feedback är aktiverat kommer LED-lampan att blinka medan infraröda signaler sänds.
Som standard använder IrSender en förinställd infraröd sändningspinne (såsom IR_SEND_PIN) för att sända infraröda signaler. Denna kodrad aktiverar den infraröda sändaren och förbereder den för att sända infraröda signaler.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Starta med IR_SEND_PIN som sändningspinne
        

Anropa setSendPin-metoden på IrSender-objektet för att ställa in infraröd signal sändningspinne till IR_TX_PIN.

  • IR_TX_PIN är ett definierat pinnummer som specificerar exakt vilken pinne som används för att sända infraröda signaler.

Genom att använda denna kodrad kan du anpassa infraröd sändningspinne istället för att använda standardpinnen. Detta är särskilt användbart när det sker förändringar i hårdvaruanslutningar eller pin-konfiguration.

3. Serial.print(F('Skicka nu: adress=0x1111, kommando=0x'));

                Serial.println();//Skriv ut en tom rad för att formatera utdata och göra följande information tydligare.
                Serial.print(F('Send now: address=0x1111, command=0x'));//Skriv ut en sträng.
                Serial.print(sCommand, HEX);//Visa i hexadecimalt format.
                Serial.print(F(', repeats='));//Anger antalet upprepade sändningar.
                Serial.print(sRepeats);//Antalet gånger kommandot skickas.
                Serial.println();//Skriv ut en tom rad till för att göra utdata mer organiserad.
        
  • Använd Serial.print() för att skriva ut strängen 'Send now: address=0x1111, command=0x'. Makrot F() används här för att lagra strängen i Flash-minnet, vilket hjälper till att spara RAM.
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);
        

Visa 'IR NEC SEND' med drawString-metoden för att rendera strängen på en angiven position på skärmen.

  • StickCP2.Display.width() / 2: Detta säkerställer att strängen är centrerad horisontellt på displayen.

  • StickCP2.Display.height() / 2 - 40: Detta placerar strängen 40 pixlar ovanför den vertikala mitten av skärmen.

Visa 'ADDR:0x1111' med drawString-metoden för att visa adressinformationen.
  • StickCP2.Display.width() / 2: Centrerar texten horisontellt på skärmen.
  • StickCP2.Display.height() / 2: Centrerar texten vertikalt och placerar den mitt på skärmen.

Visa kommandoinformation genom att rendera strängen 'CMD:0x' tillsammans med den hexadecimala representationen av variabeln sCommand.

  • String(sCommand, HEX): Konverterar variabeln sCommand till en hexadecimals sträng.

  • StickCP2.Display.width() / 2: Centrerar texten horisontellt på displayen.

  • StickCP2.Display.height() / 2 + 40: Placerar texten 40 pixlar under den vertikala mitten av skärmen.

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);//Rita en cirkel.
        
Använd Serial.println() för att skriva ut information till **seriell monitor**, och lägger till en radbrytning i slutet för att säkerställa att nästa utskrift börjar på en ny rad.

  • F('Send standard NEC with 16 bit address'): Makrot F() lagrar strängen 'Send standard NEC with 16 bit address' i Flash-minnet (programlagring) istället för **RAM**, vilket hjälper till att spara minne.
  • Utdata 'Skicka standard NEC med 16-bitars adress' indikerar att en standard NEC-protokoll infraröd signal sänds med en **16-bitars adress**.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Skicka en infraröd signal enligt NEC-protokollet.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Öka sändningsvärden
                 */
        
0x1111: Detta är adressen för infraröd signal, som representerar ett 16-bitars adressvärde som används för att identifiera mål-enheten eller kommandomottagaren.
sCommand: Detta är kommandovärdet som ska skickas. Det kan vara ett 8-bitars eller 16-bitars värde som specificerar den exakta åtgärd som mål-enheten ska utföra.
sRepeats: Anger antalet gånger signalen upprepas, vanligtvis för att förbättra signalens tillförlitlighet eller uppfylla specifika krav från den enhet som styrs.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Skicka en infraröd signal enligt NEC-protokollet.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Öka sändningsvärden
                 */
        
  • 0x1111: Detta är enhetens adress för den infraröda signalen, som används för att identifiera en specifik enhet.
  • 0x2223: Detta är kommando-koden som skickas till enheten och specificerar åtgärden som ska utföras.
  • sRepeats: Representerar antalet gånger signalen upprepas, vanligtvis för att säkra signalens tillförlitlighet eller uppfylla kraven från mål-enheten.

  

Enkel programmering

IR-funktionaliteten kan enkelt nås och programmeras med Arduino-ramverket eller UIFlow, M5Stacks visuella programmeringsmiljö. Utvecklare kan anropa IrSender.begin() för att initiera IR-sändningsfunktionen och konfigurera parametrar som DISABLE_LED_FEEDBACK, vilket inaktiverar den blinkande LED-indikatorn under sändning.

 

Flexibla användningsscenarier

Smart hemstyrning: Automatisera hushållsapparater genom att skicka IR-kommandon direkt från M5StickC Plus2.
Lärande fjärrkontroll: Spela in signaler från befintliga fjärrkontroller för att skapa en universell fjärrkontrollslösning.
IoT och robotik: Integrera IR-kommunikation för enkla trådlösa kommandon mellan enheter eller robotar.

  

Förkonfigurerad infraröd pinne

M5StickC Plus2 levereras med en förinställd IR-sändningspinne, vanligtvis märkt som IR_SEND_PIN. Detta gör det enkelt att använda IR-funktioner utan komplicerade hårdvaruinställningar.

    

Med sin kompakta storlek och integrerade infraröda funktioner erbjuder M5StickC Plus2 en bekväm och mångsidig plattform för utvecklare som arbetar med fjärrkontroll, hemautomation eller trådlösa kommunikationsprojekt. Denna funktion förvandlar enheten från ett enkelt utvecklingsverktyg till ett kraftfullt verktyg för IoT och inbäddade applikationer.

 

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *

Sidopanel

Senaste inlägg

Denna sektion innehåller för närvarande inget innehåll. Lägg till innehåll i denna sektion med hjälp av sidofältet.

Registrera dig för vårt nyhetsbrev

Få den senaste informationen om våra produkter och specialerbjudanden.