Thư viện IRremote: thu phát hồng ngoại với Arduino/ESP32
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
| Protocol | Dùng cho |
|---|---|
| NEC | TV nhiều hãng Trung Quốc, điều khiển generic |
| Sony | TV Sony Bravia |
| RC5 / RC6 | TV Philips cũ |
| Samsung | TV Samsung |
| LG | TV LG |
| Panasonic | TV 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.
- ESP32 nhận command MQTT "AC ON 25C cool".
- IRremoteESP8266 build packet bytes.
- Gửi IR pulse.
- 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.