Zpět na články

ESP32 + IR přijímač HX1838 – dálkové ovládání v Arduino IDE

Jak připojit IR přijímač HX1838 k ESP32 a ovládat projekt libovolným dálkovým ovladačem pomocí knihovny IRremote.

ESP32 + IR přijímač HX1838 – dálkové ovládání v Arduino IDE

Co je IR přijímač HX1838?

IR přijímač HX1838 umožňuje detekovat signály z infračervených dálkových ovladačů. Po připojení k ESP32 lze tyto signály převést na konkrétní akce v programu – stisk tlačítka na ovladači spustí cokoliv co si naprogramujete.

Velkou výhodou je univerzálnost – funguje jak s přiloženým ovladačem v sadě, tak s libovolným ovladačem z domácnosti, například od televize nebo DVD přehrávače.

Hlavní vlastnosti

  • Frekvence 38 kHz – standard pro většinu ovladačů
  • Napájení 2,7–5,5V – kompatibilní s ESP32 (3,3V)
  • Dosah až 8 metrů, úhel příjmu 60°
  • Zapojení na 3 vodiče – VCC, GND, IN
  • Kompatibilní s protokolem NEC

Potřebné komponenty

  • ESP32
  • IR přijímač HX1838
  • Dálkový ovladač (přiložený v sadě nebo libovolný z domácnosti)
  • Propojovací vodiče

Zapojení

Pin IN (signál) připojte na GPIO 23 ESP32. Pin GND připojte na GND. Pin VCC připojte na 3,3V.

Pohled zepředu na HX1838 (strana s kupolí): levý pin = IN, prostřední = GND, pravý = VCC.

⚠️ Záměna VCC a GND přijímač zničí – před zapnutím zkontrolujte zapojení.

Instalace knihovny

V Arduino IDE otevřete Library Manager, vyhledejte IRremote od shirriff, z3t0, ArminJo a nainstalujte ji.

Kód 1 – zjištění kódů vašeho ovladače

Pokud používáte jiný ovladač než přiložený v sadě, nejdřív zjistěte jeho kódy. Nahrajte tento kód a otevřete Serial Monitor:

ir.ino
1#include <IRremote.hpp> 2 3#define IR_PIN 23 4 5void setup() { 6 Serial.begin(115200); 7 IrReceiver.begin(IR_PIN); 8 Serial.println("Mačkejte tlačítka na ovladači..."); 9} 10 11void loop() { 12 if (IrReceiver.decode()) { 13 Serial.print("Kód: 0x"); 14 Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); 15 IrReceiver.printIRResultShort(&Serial); 16 IrReceiver.resume(); 17 } 18}


Zapište si kódy všech tlačítek, která chcete použít, a doplňte je do kódu níže.

Kód 2 – kompletní mapování tlačítek ovladače

Tento kód obsahuje přesné kódy pro standardní ovladač přiložený v sadě z drátek.cz (NEC protokol). Při stisku každého tlačítka se v Serial Monitoru zobrazí jeho název:

ir.ino
1#include <IRremote.hpp> 2 3#define IR_PIN 23 4 5void detekceKlaves(uint32_t kod); 6 7void setup() { 8 Serial.begin(115200); 9 IrReceiver.begin(IR_PIN); 10 Serial.println("IR přijímač připraven – čekám na ovladač..."); 11} 12 13void loop() { 14 if (IrReceiver.decode()) { 15 // odkomentujte pro zobrazení surového kódu při testování nového ovladače: 16 // Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); 17 18 // přeskočení NEC repeat kódu (přidržení tlačítka) 19 if (!(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)) { 20 detekceKlaves(IrReceiver.decodedIRData.decodedRawData); 21 } 22 23 IrReceiver.resume(); 24 } 25} 26 27void detekceKlaves(uint32_t kod) { 28 switch (kod) { 29 case 0xFFA25D: Serial.println("Stisknuto: CH-"); break; 30 case 0xFF629D: Serial.println("Stisknuto: CH"); break; 31 case 0xFFE21D: Serial.println("Stisknuto: CH+"); break; 32 case 0xFF22DD: Serial.println("Stisknuto: PREV"); break; 33 case 0xFF02FD: Serial.println("Stisknuto: NEXT"); break; 34 case 0xFFC23D: Serial.println("Stisknuto: PLAY/PAUSE"); break; 35 case 0xFFE01F: Serial.println("Stisknuto: VOL-"); break; 36 case 0xFFA857: Serial.println("Stisknuto: VOL+"); break; 37 case 0xFF906F: Serial.println("Stisknuto: EQ"); break; 38 case 0xFF6897: Serial.println("Stisknuto: 0"); break; 39 case 0xFF9867: Serial.println("Stisknuto: 100+"); break; 40 case 0xFFB04F: Serial.println("Stisknuto: 200+"); break; 41 case 0xFF30CF: Serial.println("Stisknuto: 1"); break; 42 case 0xFF18E7: Serial.println("Stisknuto: 2"); break; 43 case 0xFF7A85: Serial.println("Stisknuto: 3"); break; 44 case 0xFF10EF: Serial.println("Stisknuto: 4"); break; 45 case 0xFF38C7: Serial.println("Stisknuto: 5"); break; 46 case 0xFF5AA5: Serial.println("Stisknuto: 6"); break; 47 case 0xFF42BD: Serial.println("Stisknuto: 7"); break; 48 case 0xFF4AB5: Serial.println("Stisknuto: 8"); break; 49 case 0xFF52AD: Serial.println("Stisknuto: 9"); break; 50 default: Serial.println("Stisknuto: neznámé tlačítko"); break; 51 } 52 53 delay(200); 54}


Po nahrání a otevření Serial Monitoru bude výstup vypadat například takto:

terminal
1IR přijímač připraven – čekám na ovladač... 2Stisknuto: PREV 3Stisknuto: 0 4Stisknuto: 2 5Stisknuto: VOL+ 6Stisknuto: PLAY/PAUSE


Jak to funguje

Každé stisknuté tlačítko pošle sérii IR pulsů na frekvenci 38 kHz. HX1838 je zachytí, demoduluje a pošle digitální signál na GPIO pin ESP32. Knihovna IRremote změří přesné časování pulsů a dekóduje je na hex kód – ten pak porovnáváme ve funkci detekceKlaves() pomocí switch/case.

Klíčový je řádek s IRDATA_FLAGS_IS_REPEAT – ten přeskočí opakovaný kód, který ovladač posílá při přidržení tlačítka. Bez toho by se jedna akce spouštěla opakovaně.

IrReceiver.resume() musíte volat po každém přijatém signálu, jinak přijímač nečeká na další kód.

Časté problémy

V Serial Monitoru se nic nezobrazuje → Zkontrolujte zapojení – IN pin je vlevo při pohledu na kupoli přijímače → Ověřte že GND a VCC nejsou prohozeny → Zkuste jiný GPIO pin

Kódy neodpovídají mapě výše → Máte jiný ovladač – použijte Kód 1 pro zjištění kódů vašeho ovladače a doplňte je do switch/case

Stejné tlačítko opakuje akci při přidržení → Přidejte kontrolu IRDATA_FLAGS_IS_REPEAT jako v Kódu 2 výše

Možná rozšíření

  • Ovládejte LED nebo relé tlačítky ovladače – zapínání a vypínání spotřebičů
  • Přidejte servo motor a ovládejte jeho polohu šipkami VOL+/VOL-
  • Kombinujte s OLED displejem – zobrazujte název stisknutého tlačítka
  • Použijte ovladač jako vstup pro RC auto s motorovým driverem L298N
  • Kombinujte s Deep Sleep – ESP32 se probudí při příjmu IR signálu

Nakupte svoje ESP32 ještě dnes!

Doprava Zásilkovnou za 89 Kč
Platba dobírkou
Vrácení do 30 dnů
Omezené zásoby - skladem

ESP32-S3 DevKit USB-C

Kompletní vývojová deska s USB-C

240MHz dvoujádrový
WiFi 802.11 b/g/n
Bluetooth 4.2 + BLE
4MB Flash paměť
520KB SRAM
38 GPIO pinů
209za kus

Množstevní slevy:

1
Celkem
209
Objednat

Bezpečná platba při převzetí zásilky nebo online platba přes Comgate, a.s.