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).
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 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

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č.
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
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
#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";
}
}
Common Course Links
Common Course Files
Things you might need
-
Amazon
-
eBay
Resources & references
-
DocumentationESP32 Tutorial 23/55- SunFounder doc page for IR receiverdocs.sunfounder.com
Files📁
Datasheet (pdf)
-
IR-remote_TL1838-Infrared-Receiver-datasheet
robojax-IR-remote_TL1838-Infrared-Receiver-datasheet.pdf0.46 MB