M5Stack Begyndervejledning: PLUS2 Infrarøde Funktioner

M5StickC Plus2 er et kompakt, alsidigt udviklingsmodul, der integrerer en kraftfuld infrarød (IR) sender, hvilket åbner nye muligheder for smart kontrol og kommunikationsapplikationer. Denne funktion gør det muligt for enheden at afgive IR-signaler.
 
M5StickC Plus2 har ikke en indbygget infrarød (IR) modtager, men den kan modtage IR-signaler ved at tilslutte et eksternt IR-modul. M5Stack økosystemet tilbyder flere kompatible IR-moduler, såsom Grove IR Receiver-modulet, som kan tilsluttes M5StickC Plus2 via Grove-interface.
For at aktivere IR-modtagelse, følg disse trin:
  1. Vælg et IR-modul: For eksempel Grove IR Receiver-modulet.
  2. Hardwareforbindelse: Brug Grove-interface eller jumperledninger til at forbinde IR-modulet til de relevante GPIO-ben på M5StickC Plus2.
  3. Softwareunderstøttelse: Skriv kode i Arduino eller MicroPython for at læse IR-signalerne. Arduino-biblioteker, såsom IRremote, kan nemt afkode almindelige IR-protokoller (f.eks. NEC-protokol).

Nøglefunktioner ved infrarød funktion

IR-transmission og modtagelse
Med den indbyggede IR-sender kan M5StickC Plus2 efterligne funktionerne fra traditionelle fjernbetjeninger og sende signaler til at styre TV, aircondition og andre IR-kompatible enheder.
IR-modtageren gør det muligt for modulet at lære og afkode signaler fra andre fjernbetjeninger, hvilket gør det tilpasningsdygtigt til flere kontrolscenarier.

  

/**
 * @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  // Deaktiverer genstart af modtager efter hver
                                   // 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);  // Start med IR_SEND_PIN som sendepin
    IrSender.setSendPin(IR_TX_PIN);//Indstillinger for infrarød signaludgangspin
}

void loop() {
    Serial.println();//Udskriv en tom linje for at formatere output og gøre følgende information klarere.
    Serial.print(F('Send now: address=0x1111, command=0x'));//Udskriv en streng.
    Serial.print(sCommand, HEX);//Vis i hexadecimalt format.
    Serial.print(F(', repeats='));//Angiv antallet af gentagne transmissioner.
    Serial.print(sRepeats);//Antallet af gange kommandoen sendes.
    Serial.println();//Udskriv en ekstra tom linje for at gøre output mere overskueligt.

    StickCP2.Display.clear();//Opdater skærmvisningen.

    //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 med 16 bit adresse'));

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Tegn en cirkel.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Send et infrarødt signal efter NEC-protokollen.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Forøg sendeværdier
     */
    sCommand += 1;//Forøg kommandoens værdi.
    delay(500);//Vent i 500 millisekunder.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Tegn en udfyldt cirkel.
    delay(500);
}
  
✔ Kopieret!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Start med IR_SEND_PIN som sendepin
        
Kald begin-metoden på IrSender-objektet for at initialisere den infrarøde transmissionsfunktion.
  • DISABLE_LED_FEEDBACK: Dette er en parameter, der bruges til at deaktivere LED-feedback. Hvis feedback er aktiveret, vil LED'en blinke under transmission af infrarøde signaler.
Som standard bruger IrSender en forudindstillet infrarød transmissionspin (såsom IR_SEND_PIN) til at sende infrarøde signaler. Denne kode aktiverer den infrarøde sender og forbereder den til at sende infrarøde signaler.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Start med IR_SEND_PIN som sendepin
        

Kald setSendPin-metoden på IrSender-objektet for at sætte den infrarøde signaltransmissionspin til IR_TX_PIN.

  • IR_TX_PIN er et defineret pinnummer, der angiver den præcise pin, der bruges til at sende infrarøde signaler.

Ved at bruge denne kode kan du tilpasse den infrarøde transmissionspin i stedet for at bruge standarden. Dette er især nyttigt, når der sker ændringer i hardwareforbindelser eller pin-mapping.

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

                Serial.println();//Udskriv en tom linje for at formatere output og gøre følgende information klarere.
                Serial.print(F('Send now: address=0x1111, command=0x'));//Udskriv en streng.
                Serial.print(sCommand, HEX);//Vis i hexadecimalt format.
                Serial.print(F(', repeats='));//Angiv antallet af gentagne transmissioner.
                Serial.print(sRepeats);//Antallet af gange kommandoen sendes.
                Serial.println();//Udskriv en ekstra tom linje for at gøre output mere overskueligt.
        
  • Brug Serial.print() til at udskrive strengen 'Send now: address=0x1111, command=0x'. F()-makroen bruges her til at gemme strengen i Flash-hukommelsen, hvilket hjælper med at spare på 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);
        

Vis 'IR NEC SEND' ved hjælp af drawString-metoden for at gengive strengen på en bestemt position på skærmen.

  • StickCP2.Display.width() / 2: Dette sikrer, at strengen er centreret horisontalt på displayet.

  • StickCP2.Display.height() / 2 - 40: Dette placerer strengen 40 pixels over den vertikale midte af skærmen.

Vis 'ADDR:0x1111' ved hjælp af drawString-metoden for at vise adresseinformationen.
  • StickCP2.Display.width() / 2: Centrerer teksten horisontalt på skærmen.
  • StickCP2.Display.height() / 2: Centrerer teksten vertikalt, så den placeres lige midt på skærmen.

Vis kommandoinformation ved at gengive strengen 'CMD:0x' sammen med den hexadecimale repræsentation af sCommand-variablen.

  • String(sCommand, HEX): Konverterer sCommand-variablen til en hexadecimal streng.

  • StickCP2.Display.width() / 2: Centrerer teksten vandret på displayet.

  • StickCP2.Display.height() / 2 + 40: Placerer teksten 40 pixels under den lodrette midte af skærmen.

5. Serial.println(F('Send standard NEC med 16 bit adresse'));

                Serial.println(F('Send standard NEC med 16 bit adresse'));

                StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Tegn en cirkel.
        
Brug Serial.println() til at udskrive information til **serial monitor**, og tilføj et linjeskift til sidst for at sikre, at næste output starter på en ny linje.

  • F('Send standard NEC med 16 bit adresse'): F()-makroen gemmer strengen 'Send standard NEC med 16 bit adresse' i Flash-hukommelsen (programlager) i stedet for **RAM**, hvilket hjælper med at spare hukommelse.
  • Outputtet 'Send standard NEC med 16 bit adresse' angiver, at et standard NEC-protokol infrarødt signal sendes med en **16-bit adresse**.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Send et infrarødt signal efter NEC-protokollen.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Forøg sendeværdier
                 */
        
0x1111: Dette er adressen for infrarødsignalet, som repræsenterer en 16-bit adresseværdi brugt til at identificere mål-enheden eller kommandomodtageren.
sCommand: Dette er kommandoens værdi, der skal sendes. Det kan være en 8-bit eller 16-bit værdi, som specificerer den nøjagtige handling, mål-enheden skal udføre.
sRepeats: Angiver antallet af gange signalet gentages, normalt for at forbedre signalets pålidelighed eller opfylde specifikke krav fra den enhed, der styres.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Send et infrarødt signal efter NEC-protokollen.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Forøg sendeværdier
                 */
        
  • 0x1111: Dette er enhedsadressen for det infrarøde signal, brugt til at identificere en specifik enhed.
  • 0x2223: Dette er kommando-koden sendt til enheden, som specificerer den handling, der skal udføres.
  • sRepeats: Repræsenterer antallet af gange signalet gentages, typisk for at sikre signalpålidelighed eller opfylde kravene fra den målrettede enhed.

  

Nem programmering

IR-funktionaliteten kan nemt tilgås og programmeres ved hjælp af Arduino-rammeværket eller UIFlow, M5Stacks visuelle programmeringsmiljø. Udviklere kan kalde IrSender.begin() for at initialisere IR-sende-funktionen og konfigurere parametre som DISABLE_LED_FEEDBACK, der deaktiverer den blinkende LED-indikator under transmission.

 

Fleksible anvendelsesscenarier

Smart Home Control: Automatiser husholdningsapparater ved at sende IR-kommandoer direkte fra M5StickC Plus2.
Læringsfjernbetjening: Optag signaler fra eksisterende fjernbetjeninger for at skabe en universel fjernbetjeningsløsning.
IoT og robotteknologi: Integrer IR-kommunikation for simple trådløse kommandoer mellem enheder eller robotter.

  

Forudkonfigureret infrarød pin

M5StickC Plus2 leveres med en foruddefineret IR-transmissionspin, typisk mærket som IR_SEND_PIN. Dette gør det nemt at implementere IR-funktioner uden komplicerede hardwareopsætninger.

    

Med sin kompakte størrelse og integrerede infrarøde funktioner tilbyder M5StickC Plus2 en praktisk og alsidig platform for udviklere, der arbejder med fjernbetjening, hjemmeautomatisering eller trådløs kommunikation. Denne funktion forvandler enheden fra et simpelt udviklingsværktøj til et kraftfuldt værktøj til IoT og indlejrede applikationer.

 

Efterlad en kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

Sidebjælke

Seneste indlæg

Denne sektion indeholder i øjeblikket ikke noget indhold. Tilføj indhold til denne sektion ved hjælp af sidepanelet.

Tilmeld dig vores nyhedsbrev

Få de seneste oplysninger om vores produkter og særlige tilbud.