Průvodce pro začátečníky M5Stack: Infračervené schopnosti PLUS2

M5StickC Plus2 je kompaktní, všestranný vývojový modul, který integruje výkonný infračervený (IR) vysílač, což otevírá nové možnosti pro chytré ovládání a komunikační aplikace. Tato funkce umožňuje zařízení odesílat IR signály.
 
M5StickC Plus2 nemá vestavěný infračervený (IR) přijímač, ale může přijímat IR signály připojením externího IR modulu. M5Stack ekosystém nabízí několik kompatibilních IR modulů, jako je Grove IR Receiver module, který lze připojit k M5StickC Plus2 přes rozhraní Grove.
Chcete-li povolit příjem IR, postupujte podle těchto kroků:
  1. Vyberte IR modul: Například modul Grove IR Receiver.
  2. Hardwarové připojení: Použijte rozhraní Grove nebo propojovací vodiče k připojení IR modulu k příslušným GPIO pinům na M5StickC Plus2.
  3. Podpora softwaru: Pište kód v Arduino nebo MicroPython pro čtení IR signálů. Arduino knihovny, jako například IRremote, mohou snadno dekódovat běžné IR protokoly (např. NEC protokol).

Klíčové vlastnosti infračervené funkce

Přenos a příjem IR
S vestavěným IR vysílačem může M5StickC Plus2 napodobovat funkce tradičních dálkových ovladačů a odesílat signály pro ovládání televizorů, klimatizací a dalších zařízení kompatibilních s IR.
IR přijímač umožňuje modulu naučit se a dekódovat signály z jiných dálkových ovladačů, což jej činí přizpůsobitelným pro různé scénáře ovládání.

  

/**
 * @file ir_nec.ino
 * @autor SeanKwok (shaoxiang@m5stack.com)
 * @brief Test IR NEC pro M5StickCPlus2
 * @version 0.1
 * @date 2023-12-09
 *
 *
 * @Hardwares: M5StickCPlus2
 * @Platform Verze: Arduino M5Stack Board Manager v2.0.9
 * @Závislá knihovna:
 * 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  // Zakáže restartování přijímače po každém
                                   // send. Saves 450 bytes program memory and
                                   // 269 bytes RAM if receiving functions are
                                   // not used.
#define SEND_PWM_POMOCÍ_TIMERU
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sOpakování = 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(ZELENÁ);

    //Text alignment middle_center means aligning the center of the text to the specified coordinate position.
    StickCP2.Display.setTextDatum(střed_střed);

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

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

    IrSender.begin(DISABLE_LED_FEEDBACK);  // Začít s IR_SEND_PIN jako vysílacím pinem
    IrSender.setSendPin(IR_TX_PIN);//Nastavení pinu pro vysílání infračerveného signálu
}

void loop() {
    Serial.println();//Vytiskne prázdný řádek pro formátování výstupu a zpřehlednění následujících informací.
    Serial.print(F('Odeslat nyní: adresa=0x1111, příkaz=0x'));//Vytisknout řetězec.
    Serial.print(sCommand, HEX);//Zobrazit v šestnáctkovém formátu.
    Serial.print(F(', repeats='));//Uveďte počet opakovaných přenosů.
    Serial.print(sRepeats);//Počet opakování příkazu.
    Serial.println();//Vytiskněte další prázdný řádek pro lepší uspořádání výstupu.

    StickCP2.Display.clear();//Aktualizovat zobrazení obrazovky.

    //drawString A method used to draw a string at a specified position.
    StickCP2.Display.drawString('IR NEC ODESLAT', 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('Odeslat standardní NEC s 16bitovou adresou'));

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Nakreslit kruh.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Odeslat infračervený signál podle protokolu NEC.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Zvýšit odeslané hodnoty
     */
    sCommand += 1;//Zvýšení hodnoty příkazu.
    delay(500);//Prodleva 500 milisekund.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Nakreslete vyplněný kruh.
    zpoždění(500);
}
  
✔ Zkopírováno!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Začít s IR_SEND_PIN jako vysílacím pinem
        
Zavolejte metodu begin objektu IrSender pro inicializaci funkce infračerveného přenosu.
  • DISABLE_LED_FEEDBACK: Toto je parametr používaný k deaktivaci LED zpětné vazby. Pokud je zpětná vazba povolena, LED bude blikat během vysílání infračervených signálů.
Ve výchozím nastavení IrSender použije přednastavený pin pro infračervený přenos (například IR_SEND_PIN) k odesílání infračervených signálů. Tento řádek kódu aktivuje infračervený vysílač a připraví ho k odesílání infračervených signálů.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Začít s IR_SEND_PIN jako vysílacím pinem
        

Zavolejte metodu setSendPin objektu IrSender, abyste nastavili pin pro přenos infračerveného signálu na IR_TX_PIN.

  • IR_TX_PIN je definované číslo pinu, které určuje přesný pin používaný k vysílání infračervených signálů.

Použitím tohoto řádku kódu můžete přizpůsobit pin pro infračervený přenos místo použití výchozího. To je zvláště užitečné, když dojde ke změnám v hardwarových připojeních nebo mapování pinů.

3. Serial.print(F('Odeslat nyní: adresa=0x1111, příkaz=0x'));

                Serial.println();//Vytiskne prázdný řádek pro formátování výstupu a zpřehlednění následujících informací.
                Serial.print(F('Odeslat nyní: adresa=0x1111, příkaz=0x'));//Vytisknout řetězec.
                Serial.print(sCommand, HEX);//Zobrazit v šestnáctkovém formátu.
                Serial.print(F(', repeats='));//Uveďte počet opakovaných přenosů.
                Serial.print(sRepeats);//Počet opakování příkazu.
                Serial.println();//Vytiskněte další prázdný řádek pro lepší uspořádání výstupu.
        
  • Použijte Serial.print() k vytištění řetězce 'Send now: address=0x1111, command=0x'. Makro F() je zde použito k uložení řetězce do Flash paměti, což pomáhá šetřit 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);
        

Zobrazte 'IR NEC SEND' pomocí metody drawString pro vykreslení řetězce na určené pozici na obrazovce.

  • StickCP2.Display.width() / 2: Tím se zajistí, že řetězec je horizontálně vycentrován na displeji.

  • StickCP2.Display.height() / 2 - 40: Toto umístí řetězec 40 pixelů nad vertikální střed obrazovky.

Zobrazte 'ADDR:0x1111' pomocí metody drawString pro zobrazení informací o adrese.
  • StickCP2.Display.width() / 2: Zarovná text vodorovně na střed obrazovky.
  • StickCP2.Display.height() / 2: Vertikálně zarovná text do středu, umístí jej přímo doprostřed displeje.

Zobrazte informace o příkazu vykreslením řetězce 'CMD:0x' spolu s hexadecimální reprezentací proměnné sCommand.

  • String(sCommand, HEX): Převádí proměnnou sCommand na hexadecimální řetězec.

  • StickCP2.Display.width() / 2: Zarovná text horizontálně na displeji na střed.

  • StickCP2.Display.height() / 2 + 40: Umístí text 40 pixelů pod vertikální střed obrazovky.

5. Serial.println(F('Odeslat standardní NEC s 16bitovou adresou'));

                Serial.println(F('Odeslat standardní NEC s 16bitovou adresou'));

                StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Nakreslit kruh.
        
Použijte Serial.println() k tisku informací do **sériového monitoru**, přičemž na konec přidáte nový řádek, aby další výstup začínal na novém řádku.

  • F('Odeslat standardní NEC s 16bitovou adresou'): Makro F() ukládá řetězec 'Odeslat standardní NEC s 16bitovou adresou' do Flash paměti (programové paměti) místo do **RAM**, což pomáhá šetřit paměť.
  • Výstup 'Odeslat standardní NEC s 16bitovou adresou' znamená, že je vysílán infračervený signál se standardním protokolem NEC s **16bitovou adresou**.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Odeslat infračervený signál podle protokolu NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Zvýšit odeslané hodnoty
                 */
        
0x1111: Toto je adresa infračerveného signálu, představující 16bitovou hodnotu adresy používanou k identifikaci cílového zařízení nebo cíle příkazu.
sCommand: Toto je hodnota příkazu, která má být odeslána. Může to být 8bitová nebo 16bitová hodnota, která určuje přesnou operaci, kterou by měl cílový přístroj provést.
sRepeats: Udává počet opakování signálu, obvykle za účelem zvýšení spolehlivosti signálu nebo splnění specifických požadavků ovládaného zařízení.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Odeslat infračervený signál podle protokolu NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Zvýšit odeslané hodnoty
                 */
        
  • 0x1111: Toto je adresa zařízení infračerveného signálu, používaná k identifikaci konkrétního zařízení.
  • 0x2223: Toto je kód příkazu odeslaný zařízení, který určuje operaci, která má být provedena.
  • sRepeats: Představuje počet opakování signálu, obvykle za účelem zajištění spolehlivosti signálu nebo splnění požadavků cílového zařízení.

  

Snadné programování

Funkce IR lze snadno přistupovat a programovat pomocí frameworku Arduino nebo UIFlow, vizuálního programovacího prostředí M5Stack. Vývojáři mohou zavolat IrSender.begin() pro inicializaci funkce odesílání IR a nakonfigurovat parametry, jako je DISABLE_LED_FEEDBACK, který zakáže blikání LED indikátoru během přenosu.

 

Flexibilní aplikační scénáře

Ovládání chytré domácnosti: Automatizujte domácí spotřebiče odesíláním IR příkazů přímo z M5StickC Plus2.
Učení dálkového ovládání: Nahrávejte signály z existujících dálkových ovladačů pro vytvoření univerzálního dálkového ovládání.
IoT a robotika: Integrujte IR komunikaci pro jednoduché bezdrátové příkazy mezi zařízeními nebo roboty.

  

Přednastavený infračervený pin

M5StickC Plus2 je vybaven přednastaveným IR vysílacím pinem, obvykle označovaným jako IR_SEND_PIN. To usnadňuje nasazení IR funkcí bez složitých hardwarových nastavení.

    

Díky svým kompaktním rozměrům a integrovaným infračerveným schopnostem poskytuje M5StickC Plus2 pohodlnou a všestrannou platformu pro vývojáře pracující na projektech dálkového ovládání, domácí automatizace nebo bezdrátové komunikace. Tato funkce proměňuje zařízení z jednoduchého vývojového nástroje na výkonný nástroj pro IoT a vestavěné aplikace.

 

Zanechte komentář

Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena *

Přihlaste se k odběru našeho newsletteru

Získejte nejnovější informace o našich produktech a speciálních nabídkách.