ArduinoVN
Đăng nhập Tham gia
Thư viện Code /u/linucat /03/05/2026

Thư viện IRremote: thu phát hồng ngoại với Arduino/ESP32

Thảo luận

IRremote (Ken Shirriff fork bởi Armin Joachimsmeyer) là thư viện chuẩn vàng cho hồng ngoại trên Arduino. Đọc remote TV, điều khiển điều hoà, learning remote — bài này hướng dẫn từ phần cứng đến code cho cả Arduino Uno và ESP32.

1. Hồng ngoại IR — căn bản

Remote TV/máy lạnh phát LED hồng ngoại (940nm) modulated tần số 38kHz. Receiver (như TSOP1738) lọc tần số 38kHz, output digital pulse tương ứng data.

Mỗi nút bấm = chuỗi pulse-pause có timing đặc biệt theo protocol (NEC, Sony, RC5, Samsung...). IRremote tự decode được hầu hết protocol phổ biến.

2. Linh kiện

  • Receiver: TSOP1738 hoặc module IR receiver (~10k VN). 3 chân: VCC, GND, OUT.
  • Transmitter: LED IR 940nm + điện trở 100Ω. Hoặc module IR transmitter có sẵn.
  • Remote TV bất kỳ (Universal cũng được) để test.

3. Cài đặt

Library Manager → "IRremote" by Armin Joachimsmeyer. Phiên bản 4.x mới, API khác phiên bản cũ (3.x). Bài này dùng 4.x.

4. Đấu nối receiver

TSOP1738 chân (nhìn từ mặt cảm biến, từ trái sang):

  • OUT → D2 (Arduino) hoặc GPIO 15 (ESP32).
  • GND → GND.
  • VCC → 5V (hoặc 3.3V cho ESP32).

5. Đọc remote — code đơn giản

#include 

#define PIN_IR_RX 2

void setup() {
  Serial.begin(115200);
  IrReceiver.begin(PIN_IR_RX, ENABLE_LED_FEEDBACK);
  Serial.println("Bam remote...");
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.printf("Protocol=%s addr=0x%04X cmd=0x%02X raw=0x%08X\n",
      IrReceiver.getProtocolString(),
      IrReceiver.decodedIRData.address,
      IrReceiver.decodedIRData.command,
      IrReceiver.decodedIRData.decodedRawData);
    IrReceiver.resume();
  }
}

Chạy, bấm remote TV hướng vào TSOP — Serial in protocol + command code. Ghi lại các code bạn cần (vd "NEC addr=0x00 cmd=0x12" = nút Power).

6. Phát IR — điều khiển thiết bị

LED IR nối D3 (chân mặc định, có thể đổi qua define). Điện trở 100Ω hạn dòng.

#define IR_SEND_PIN 3
#include 

void setup() {
  Serial.begin(115200);
  IrSender.begin(IR_SEND_PIN);
}

void loop() {
  IrSender.sendNEC(0x0000, 0x12, 0);   // addr 0x00, cmd 0x12, 0 repeat
  delay(2000);
}

Mặc định ESP32 dùng GPIO 4, có thể đổi:

IrSender.begin(15);   // GPIO 15

7. Protocol phổ biến

ProtocolDùng cho
NECTV nhiều hãng Trung Quốc, điều khiển generic
SonyTV Sony Bravia
RC5 / RC6TV Philips cũ
SamsungTV Samsung
LGTV LG
PanasonicTV Panasonic, một số AC

IRremote 4.x decode auto — không cần biết protocol trước.

8. Điều hoà — case đặc biệt

Remote AC khác TV: gửi chuỗi dài 50–200 byte chứa toàn bộ trạng thái (nhiệt độ, mode, fan speed, swing). IRremote 4.x hỗ trợ nhưng cần thư viện riêng cho từng hãng:

  • IRremoteESP8266 (David Conran): chỉ ESP8266/ESP32, hỗ trợ 100+ hãng AC (Daikin, LG, Mitsubishi, Panasonic, Samsung, Toshiba...).

Code AC mẫu:

#include 
IRDaikinESP ac(IR_SEND_PIN);

void setup() {
  ac.begin();
  ac.on();
  ac.setTemp(25);
  ac.setFan(kDaikinFanAuto);
  ac.setMode(kDaikinCool);
  ac.send();
}

9. Smart home AC controller

Project phổ biến: ESP32 + IR transmitter → MQTT → Home Assistant điều khiển máy lạnh không có WiFi tích hợp.

  1. ESP32 nhận command MQTT "AC ON 25C cool".
  2. IRremoteESP8266 build packet bytes.
  3. Gửi IR pulse.
  4. Máy lạnh phản ứng.

Lưu ý: AC không feedback — nếu mất gói, ESP32 không biết. Khuyến nghị resend 2 lần với khoảng cách 500ms.

10. Learning remote — record + replay

IRremote 4.x lưu được raw timing để replay protocol unknown:

// Record (đọc)
if (IrReceiver.decode()) {
  uint8_t buffer[100];
  // ... copy IrReceiver.decodedIRData.decodedRawData hoặc rawDataPtr
  IrReceiver.resume();
}

// Replay (phát)
IrSender.sendRaw(rawData, length, 38);   // 38kHz

Hữu ích cho remote vintage không có decoder.

11. ESP32 dùng RMT peripheral

Trên ESP32, IRremote tự dùng RMT (Remote Control peripheral) — chính xác timing hardware, không tốn CPU. Cho phép TX và RX đồng thời, multi-channel.

12. Lỗi thường gặp

  • Không decode: Receiver thiếu nguồn, chân sai, hoặc remote phát quá nhanh (cách receiver 30cm là ổn).
  • Decode lung tung: nhiễu từ đèn LED hoặc CFL — chuyển sang phòng tối thử lại.
  • Phát IR không ăn: LED IR yếu, hướng không đúng, không có điện trở (cháy LED), hoặc Pin chân SEND sai.
  • Sai protocol: bấm thử nhiều remote — có thể remote bạn dùng không phải NEC.

Liên quan

Áp dụng dự án: "ESP32 IR blaster smart home" — điều khiển 5–10 thiết bị qua IR từ Home Assistant. Đọc thêm ESP32 OTA để update remote codes mà không cần dây.

Thảo luận (0)

Đăng nhập để tham gia thảo luận.
Chưa có bình luận nào. Hãy là người đầu tiên!