Przewodnik dla początkujących M5Stack: możliwości podczerwieni PLUS2

The M5StickC Plus2 to kompaktowy, wszechstronny moduł deweloperski, który integruje potężny nadajnik podczerwieni (IR), otwierając nowe możliwości dla inteligentnych aplikacji sterowania i komunikacji. Ta funkcja umożliwia urządzeniu wysyłanie sygnałów IR.
 
M5StickC Plus2 nie ma wbudowanego odbiornika podczerwieni (IR), ale może odbierać sygnały IR poprzez podłączenie zewnętrznego modułu IR. Ekosystem M5Stack oferuje kilka kompatybilnych modułów IR, takich jak moduł odbiornika IR Grove, który można podłączyć do M5StickC Plus2 przez interfejs Grove.
Aby włączyć odbiór podczerwieni, wykonaj następujące kroki:
  1. Wybierz moduł IR: Na przykład moduł Grove IR Receiver.
  2. Połączenie sprzętowe: Użyj interfejsu Grove lub przewodów połączeniowych, aby podłączyć moduł IR do odpowiednich pinów GPIO na M5StickC Plus2.
  3. Wsparcie oprogramowania: Pisanie kodu w Arduino lub MicroPython do odczytu sygnałów IR. Biblioteki Arduino, takie jak IRremote, mogą łatwo dekodować popularne protokoły IR (np. protokół NEC).

Kluczowe cechy funkcji podczerwieni

Transmisja i odbiór podczerwieni
Dzięki wbudowanemu nadajnikowi podczerwieni, M5StickC Plus2 może naśladować funkcje tradycyjnych pilotów, wysyłając sygnały do sterowania telewizorami, klimatyzatorami i innymi urządzeniami kompatybilnymi z podczerwienią.
Odbiornik podczerwieni pozwala modułowi na naukę i dekodowanie sygnałów z innych pilotów, co czyni go przystosowanym do różnych scenariuszy sterowania.

  

/**
 * @file ir_nec.ino
 * @autor SeanKwok (shaoxiang@m5stack.com)
 * @brief Test IR NEC M5StickCPlus2
 * @version 0.1
 * @date 2023-12-09
 *
 *
 * @Hardwares: M5StickCPlus2
 * @Platform Wersja: Arduino M5Stack Board Manager v2.0.9
 * @Zależna biblioteka:
 * 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  // Wyłącza ponowne uruchamianie odbiornika po każdym
                                   // send. Saves 450 bytes program memory and
                                   // 269 bytes RAM if receiving functions are
                                   // not used.
#define WYSYŁAJ_PWM_PRZEZ_TIMER
#define IR_TX_PIN 19




uint8_t sCommand = 0x34;
uint8_t sPowtórzenia = 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(ZIELONY);

    //Text alignment middle_center means aligning the center of the text to the specified coordinate position.
    StickCP2.Display.setTextDatum(środek_środek);

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

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

    IrSender.begin(DISABLE_LED_FEEDBACK);  // Rozpocznij z IR_SEND_PIN jako pinem nadawczym
    IrSender.setSendPin(IR_TX_PIN);//Ustawienia pinu nadawania sygnału podczerwieni
}

void loop() {
    Serial.println();//Wydrukuj pustą linię, aby sformatować wyjście i uczynić następujące informacje bardziej czytelnymi.
    Serial.print(F('Wyślij teraz: adres=0x1111, polecenie=0x'));//Wydrukuj ciąg znaków.
    Serial.print(sCommand, HEX);//Wyświetl w formacie szesnastkowym.
    Serial.print(F(', powtórzenia='));//Wskaż liczbę powtórzonych transmisji.
    Serial.print(sRepeats);//Liczba razy, kiedy polecenie jest wysyłane.
    Serial.println();//Wydrukuj kolejną pustą linię, aby uczynić wyjście bardziej uporządkowanym.

    StickCP2.Display.clear();//Aktualizuj wyświetlacz ekranu.

    //drawString A method used to draw a string at a specified position.
    StickCP2.Display.drawString('IR NEC WYŚLIJ', 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.szerokość() / 2,
                                StickCP2.Display.height() / 2 + 40);

    Serial.println(F('Wyślij standard NEC z 16-bitowym adresem'));

    StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Narysuj koło.
    
    IrSender.sendNEC(0x1111, sCommand, sRepeats);//Wyślij sygnał podczerwieni zgodnie z protokołem NEC.
    // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
    /*
     * Zwiększ wartości wysyłania
     */
    sCommand += 1;//Zwiększ wartość polecenia.
    delay(500);//Opóźnienie o 500 milisekund.
    StickCP2.Display.fillCircle(32, 105, 8, YELLOW);//Narysuj wypełnione koło.
    opóźnienie(500);
}
  
✔ Skopiowano!

 

 

1. IrSender.begin(DISABLE_LED_FEEDBACK);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Rozpocznij z IR_SEND_PIN jako pinem nadawczym
        
Wywołaj metodę begin obiektu IrSender, aby zainicjować funkcję transmisji podczerwieni.
  • DISABLE_LED_FEEDBACK: To jest parametr używany do wyłączenia informacji zwrotnej LED. Jeśli informacja zwrotna jest włączona, dioda LED będzie migać podczas przesyłania sygnałów podczerwieni.
Domyślnie, IrSender będzie używać wstępnie ustawionego pinu transmisji podczerwieni (takiego jak IR_SEND_PIN) do wysyłania sygnałów podczerwieni. Ta linia kodu aktywuje nadajnik podczerwieni i przygotowuje go do wysyłania sygnałów podczerwieni.

2. IrSender.setSendPin(IR_TX_PIN);

                IrSender.begin(DISABLE_LED_FEEDBACK);  // Rozpocznij z IR_SEND_PIN jako pinem nadawczym
        

Wywołaj metodę setSendPin obiektu IrSender, aby ustawić pin transmisji sygnału podczerwieni na IR_TX_PIN.

  • IR_TX_PIN to zdefiniowany numer pinu, który określa dokładny pin używany do transmisji sygnałów podczerwieni.

Używając tej linii kodu, możesz dostosować pin transmisji podczerwieni zamiast używać domyślnego. Jest to szczególnie przydatne, gdy następują zmiany w połączeniach sprzętowych lub mapowaniu pinów.

3. Serial.print(F('Wyślij teraz: adres=0x1111, polecenie=0x'));

                Serial.println();//Wydrukuj pustą linię, aby sformatować wyjście i uczynić następujące informacje bardziej czytelnymi.
                Serial.print(F('Wyślij teraz: adres=0x1111, polecenie=0x'));//Wydrukuj ciąg znaków.
                Serial.print(sCommand, HEX);//Wyświetl w formacie szesnastkowym.
                Serial.print(F(', powtórzenia='));//Wskaż liczbę powtórzonych transmisji.
                Serial.print(sRepeats);//Liczba razy, kiedy polecenie jest wysyłane.
                Serial.println();//Wydrukuj kolejną pustą linię, aby uczynić wyjście bardziej uporządkowanym.
        
  • Użyj Serial.print(), aby wydrukować ciąg znaków 'Send now: address=0x1111, command=0x'. Makro F() jest tutaj używane do przechowywania ciągu w pamięci Flash, co pomaga oszczędzać 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);
        

Wyświetl 'IR NEC SEND' za pomocą metody drawString, aby wyrenderować ciąg znaków w określonej pozycji na ekranie.

  • StickCP2.Display.width() / 2: To zapewnia, że ciąg jest wyśrodkowany poziomo na wyświetlaczu.

  • StickCP2.Display.height() / 2 - 40: To umieszcza ciąg 40 pikseli powyżej pionowego środka ekranu.

Wyświetl 'ADDR:0x1111' używając metody drawString, aby pokazać informacje o adresie.
  • StickCP2.Display.width() / 2: Wyrównuje tekst poziomo na środku ekranu.
  • StickCP2.Display.height() / 2: Wyrównuje tekst pionowo, umieszczając go dokładnie na środku wyświetlacza.

Wyświetl informacje o poleceniu poprzez renderowanie ciągu 'CMD:0x' wraz z szesnastkową reprezentacją zmiennej sCommand.

  • String(sCommand, HEX): Konwertuje zmienną sCommand na ciąg szesnastkowy.

  • StickCP2.Display.width() / 2: Wyrównuje tekst poziomo na środku wyświetlacza.

  • StickCP2.Display.height() / 2 + 40: Umieszcza tekst 40 pikseli poniżej pionowego środka ekranu.

5. Serial.println(F('Wyślij standard NEC z 16-bitowym adresem'));

                Serial.println(F('Wyślij standard NEC z 16-bitowym adresem'));

                StickCP2.Display.fillCircle(32, 105, 8, GREEN);//Narysuj koło.
        
Użyj Serial.println(), aby wydrukować informacje na **monitorze szeregowym**, dodając nową linię na końcu, aby zapewnić, że następne wyjście zacznie się od nowej linii.

  • F('Wyślij standard NEC z 16-bitowym adresem'): Makro F() przechowuje ciąg znaków 'Wyślij standard NEC z 16-bitowym adresem' w pamięci Flash (pamięć programu) zamiast w **RAM**, co pomaga oszczędzać pamięć.
  • Wyjście 'Wyślij standardowy NEC z 16-bitowym adresem' wskazuje, że standardowy sygnał podczerwieni protokołu NEC jest przesyłany z **16-bitowym adresem**.

6. IrSender.sendNEC()

                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Wyślij sygnał podczerwieni zgodnie z protokołem NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Zwiększ wartości wysyłania
                 */
        
0x1111: To jest adres sygnału podczerwieni, reprezentujący 16-bitową wartość adresu używaną do identyfikacji docelowego urządzenia lub miejsca przeznaczenia polecenia.
sCommand: To jest wartość polecenia, która ma zostać wysłana. Może to być 8-bitowa lub 16-bitowa wartość, określająca dokładną operację, którą powinno wykonać docelowe urządzenie.
sRepeats: Wskazuje liczbę powtórzeń sygnału, zwykle w celu zwiększenia niezawodności sygnału lub spełnienia określonych wymagań urządzenia sterowanego.
  
7. IrSender.sendOnkyo()
                IrSender.sendNEC(0x1111, sCommand, sRepeats);//Wyślij sygnał podczerwieni zgodnie z protokołem NEC.
                // IrSender.sendOnkyo(0x1111, 0x2223, sRepeats);//Send an infrared signal following the Onkyo protocol.
                /*
                 * Zwiększ wartości wysyłania
                 */
        
  • 0x1111: To jest adres urządzenia sygnału podczerwieni, używany do identyfikacji konkretnego urządzenia.
  • 0x2223: To jest kod polecenia wysyłany do urządzenia, określający operację do wykonania.
  • sRepeats: Reprezentuje liczbę powtórzeń sygnału, zazwyczaj w celu zapewnienia niezawodności sygnału lub spełnienia wymagań docelowego urządzenia.

  

Łatwe programowanie

Funkcjonalność IR może być łatwo dostępna i programowana za pomocą frameworka Arduino lub UIFlow, wizualnego środowiska programistycznego M5Stack. Programiści mogą wywołać IrSender.begin(), aby zainicjalizować funkcję wysyłania IR i skonfigurować parametry takie jak DISABLE_LED_FEEDBACK, który wyłącza migającą diodę LED podczas transmisji.

 

Elastyczne scenariusze zastosowań

Sterowanie inteligentnym domem: Automatyzuj urządzenia domowe, wysyłając polecenia IR bezpośrednio z M5StickC Plus2.
Nauka pilota: Nagrywaj sygnały z istniejących pilotów, aby stworzyć uniwersalne rozwiązanie pilota.
IoT i robotyka: Zintegruj komunikację IR dla prostych bezprzewodowych poleceń między urządzeniami lub robotami.

  

Wstępnie skonfigurowany pin podczerwieni

M5StickC Plus2 jest wyposażony w przypisany wcześniej pin do transmisji IR, zazwyczaj oznaczony jako IR_SEND_PIN. Ułatwia to korzystanie z funkcji IR bez skomplikowanych konfiguracji sprzętowych.

    

Dzięki kompaktowym rozmiarom i zintegrowanym możliwościom podczerwieni, M5StickC Plus2 oferuje wygodną i wszechstronną platformę dla deweloperów pracujących nad projektami zdalnego sterowania, automatyki domowej lub komunikacji bezprzewodowej. Ta funkcja przekształca urządzenie z prostego narzędzia deweloperskiego w potężne narzędzie do zastosowań IoT i wbudowanych.

 

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola wymagane są oznaczone *

Pasek boczny

Najnowszy post

Ta sekcja nie zawiera obecnie żadnych treści. Dodaj treść do tej sekcji, korzystając z paska bocznego.

Zarejestruj się do naszego newslettera

Uzyskaj najnowsze informacje o naszych produktach i specjalnych ofertach.