Search Code

Výukový program ESP32 29/55 – Čítanie stlačení kláves IR diaľkového ovládača s ESP32 | SunFounder ESP32 IoT výučbová súprava

Výukový program ESP32 29/55 – Čítanie stlačení kláves IR diaľkového ovládača s ESP32 | SunFounder ESP32 IoT výučbová súprava

V tomto návode sa naučíme, ako detekovať infračervené (IR) signály pomocou modulu ESP32 a kompatibilného IR prijímača. Keď stlačíme tlačidlo na diaľkovom ovládači, ESP32 rozpozná signál a vykoná konkrétne akcie, ako napríklad spustenie bzučiaka pri určitých stlačeniach klávesov. Tento projekt je ideálny pre tých, ktorí chcú integrovať možnosti diaľkového ovládania do svojich aplikácií s ESP32 (vo videu o 02:15).

diaľkový ovládač

ESP32 je výkonný mikrokontrolér, ktorý kombinuje možnosti Wi-Fi a Bluetooth, vďaka čomu je vhodný pre širokú škálu IoT aplikácií. V tomto projekte použijeme IR prijímač na interpretáciu signálov z diaľkového ovládania. Stlačenia klávesov budú spracované v kóde, čo nám umožní vykonávať akcie na základe prijatých príkazov.

Vysvetlenie hardvéru

Hlavné komponenty pre tento projekt zahŕňajú mikrokontrolér ESP32, modul IR prijímača a bzučiak. ESP32 slúži ako mozog operácie, spracúva signály prijaté z IR prijímača. IR prijímač detekuje infračervené signály z diaľkového ovládania a premieňa ich na elektrické signály, ktorým ESP32 rozumie.

ir_receiver_sl838

IR prijímač má zvyčajne tri piny: VCC (napájanie), GND (uzemnenie) a OUT (signál). Pin VCC je pripojený k zdroju napájania (3,3 V alebo 5 V), zatiaľ čo GND sa pripája k uzemneniu. Pin OUT posiela dekódovaný signál do ESP32, ktorý ho potom môže použiť na spustenie rôznych akcií, ako je aktivácia bzučiaka pri stlačení konkrétneho klávesu.

Podrobnosti z datasheetu

Výrobca Sharp
Označenie dielu GP1UXC41
Logické/IO napätie 3,3 - 5,0 V
Napájacie napätie 3,3 V (typ.)
Výstupný prúd (na kanál) 20 mA (max)
Špičkový prúd (na kanál) 50 mA (max)
Odporúčaná PWM frekvencia 38 kHz
Vstupné logické prahy 0,3 Vcc (vysoká), 0,2 Vcc (nízka)
Pokles napätia / RDS(on) / saturácia 0,5 V (max)
Tepelné limity 85 °C (max)
Puzdro TO-92
Poznámky / varianty Dostupné vo viacerých konfiguráciách

 

  • Zabezpečte správne napájanie, aby nedošlo k poškodeniu.
  • Používajte krátke vodiče na minimalizáciu rušenia signálu.
  • Skontrolujte orientáciu IR prijímača pred pripojením.
  • Overte, či batéria diaľkového ovládania funguje.
  • V prípade potreby použite pull-up rezistory pre stabilitu.

Pokyny na zapojenie

ESP32-29-IR-remote-wiring

Na zapojenie IR prijímača k ESP32 začnite identifikáciou troch pinov na IR prijímači: VCC, GND a OUT. Pripojte pin VCC k 3,3 V zdroju napájania na ESP32. Potom pripojte pin GND k jednému z uzemňovacích (GND) pinov na ESP32. Nakoniec pripojte pin OUT k GPIO pinu 14 na ESP32, ktorý je v kóde určený pre IR prijímač.

ESP32-29-IR-remote-schematic

Po vytvorení spojení sa uistite, že je zapojenie bezpečné. Ak používate breadboard, vložte IR prijímač tak, aby plochá strana smerovala k vám a výstupok bol na opačnej strane. Táto orientácia vám pomôže správne identifikovať piny. Pred zapnutím ESP32 skontrolujte spojenia.

Príklady kódu a vysvetlenie

IR_receiver_lib

Nainštalujte knižnicu IRremoteESP8266 od Davida Conrana, Sebastiena.

V kóde definujeme pin IR prijímača pomocou konštanty IR_RECEIVE_PIN, ktorá je nastavená na 14. Vytvoríme tiež inštanciu IRrecv na spracovanie IR signálov.

const uint16_t IR_RECEIVE_PIN = 14;
IRrecv irrecv(IR_RECEIVE_PIN);
decode_results results;

Toto nastavenie nám umožňuje prijímať signály z IR diaľkového ovládania. Vo funkcii setup() inicializujeme sériovú komunikáciu a povolíme IR prijímač.

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();
}

Vo funkcii loop() kontrolujeme, či bol prijatý IR signál. Ak áno, dekódujeme hodnotu klávesu a vytlačíme ju do sériového monitora.

if (irrecv.decode(&results)) {
    String key = decodeKeyValue(results.value);
    Serial.println(key);
    irrecv.resume(); 
}

Tento úryvok kódu ukazuje, ako dekódujeme prijatý signál a vytlačíme zodpovedajúcu hodnotu klávesu do sériového monitora. Funkcia decodeKeyValue() mapuje prijatý signál na konkrétne hodnoty tlačidiel, ako napríklad "0", "1", "EQ" a ďalšie. Kompletný kód nájdete nižšie v článku.

Demonštrácia / Čo očakávať

Keď je zapojenie dokončené a kód nahraný, stlačenie tlačidla na diaľkovom ovládači by malo zobraziť príslušnú hodnotu klávesu na sériovom monitore. Napríklad stlačenie tlačidla "2" vytlačí "2" na monitor. Ak kláves nie je rozpoznaný, vráti "ERROR". Bzučiak zaznie, keď sa stlačí určený kláves (napr. "EQ"), čo poskytuje okamžitú spätnú väzbu.

Buďte opatrní pri bežných nástrahách, ako je obrátená polarita vo vašich zapojeniach alebo použitie nesprávnych úrovní napätia. Uistite sa, že diaľkové ovládanie funguje správne a má funkčnú batériu pred testovaním vášho zapojenia (vo videu o 15:30).

Časové značky videa

  • 00:00 Začiatok
  • 2:05 Úvod do IR prijímača
  • 4:24 Vysvetlené zapojenie
  • 6:08 Vysvetlený kód Arduina pre IR prijímač
  • 10:06 Výber dosky ESP32 a COM portu v Arduino IDE
  • 11:48 Demonštrácia projektu
  • 13:09 Aktívny bzučiak priamo pripojený k ESP32
  • 14:40 Vykonanie akcie pri stlačení klávesu
  • 15:30 Kód Arduina pre vykonanie akcie
  • 16:54 Ukážka stlačenia klávesu a bzučiaka

Images

IR_receiver_lib
IR_receiver_lib
ir_receiver_sl838
ir_receiver_sl838
remote
remote
ESP32-29-IR-remote-schematic
ESP32-29-IR-remote-schematic
ESP32-29-IR-remote-wiring
ESP32-29-IR-remote-wiring
830-ESP32 Tutorial 29/55- Arduino code for fading Infrared remote
Language: C++
#include <IRremoteESP8266.h>
#include <IRrecv.h>

// Define the IR receiver pin
const uint16_t IR_RECEIVE_PIN = 14;

// Create an IRrecv object
IRrecv irrecv(IR_RECEIVE_PIN);

// Create a decode_results object
decode_results results;

void setup() {
  // Start serial communication
  Serial.begin(115200);

  // Start the IR receiver
  irrecv.enableIRIn();
}

void loop() {
  // If an IR signal is received
  if (irrecv.decode(&results)) {
    String key = decodeKeyValue(results.value);
    if (key != "ERROR") {
      // Print the value of the signal to the serial monitor
      Serial.println(key);
    }
    irrecv.resume(); // Continue to receive the next signal
  }
}

// Function to decode the value of the IR signal
String decodeKeyValue(long result)
{
  switch(result){
    case 0xFF6897:
      return "0";
    case 0xFF30CF:
      return "1"; 
    case 0xFF18E7:
      return "2"; 
    case 0xFF7A85:
      return "3"; 
    case 0xFF10EF:
      return "4"; 
    case 0xFF38C7:
      return "5"; 
    case 0xFF5AA5:
      return "6"; 
    case 0xFF42BD:
      return "7"; 
    case 0xFF4AB5:
      return "8"; 
    case 0xFF52AD:
      return "9"; 
    case 0xFF906F:
      return "+"; 
    case 0xFFA857:
      return "-"; 
    case 0xFFE01F:
      return "EQ"; 
    case 0xFFB04F:
      return "U/SD";
    case 0xFF9867:
      return "CYCLE";         
    case 0xFF22DD:
      return "PLAY/PAUSE";   
    case 0xFF02FD:
      return "BACKWARD";   
    case 0xFFC23D:
      return "FORWARD";   
    case 0xFFA25D:
      return "POWER";   
    case 0xFFE21D:
      return "MUTE";   
    case 0xFF629D:
      return "MODE";       
    case 0xFFFFFFFF:
      return "ERROR";   
    default :
      return "ERROR";
  }
}

Things you might need

Resources & references

Files📁

Datasheet (pdf)