Sau RFID (nhận dạng) và MicroSD (ghi log), chúng ta đến một nhóm rất quen thuộc: điều khiển từ xa bằng hồng ngoại (IR Remote).
Với IR Receiver (VS1838B / TSOP), ESP32 có thể:
- Nhận tín hiệu từ remote TV, điều hoà, quạt…
- Chuyển tín hiệu đó thành event IoT
- Gửi realtime lên IoTLabs Cloud MQTT
- Làm nền tảng cho Smart Home / Control Panel
1. IR Receiver trong hệ IoT dùng để làm gì?
IR Receiver sinh ra event, không phải sensor liên tục.
Ứng dụng phổ biến:
- Điều khiển bật/tắt thiết bị
- Gửi lệnh từ remote → cloud
- Mô phỏng nút bấm vật lý
- Làm gateway: IR → MQTT → hệ thống khác
👉 IR rất phù hợp cho Human Interaction IoT.
2. Giới thiệu IR Receiver (VS1838B / TSOP)
Các module IR phổ biến:
- VS1838B
- TSOP1738 / TSOP1838
Đặc điểm:
- Nhận tín hiệu IR tần số 38 kHz
- Giao tiếp: Digital (1 pin DATA)
- Hoạt động tốt với hầu hết remote phổ thông
📌 IR Receiver chỉ nhận, không phát (phát sẽ dùng IR LED – bài sau).
3. Chuẩn bị phần cứng & nối dây
Thiết bị
- ESP32-C3 SuperMini
- IR Receiver (VS1838B hoặc TSOP)
Kết nối
| IR Receiver | ESP32-C3 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| DATA | GPIO5 |
📌 Có thể đổi GPIO khác nếu cần.
4. Thư viện sử dụng
Sử dụng thư viện rất phổ biến:
- IRremote (Arduino-IRremote)
📌 Thư viện này hỗ trợ:
- NEC
- Sony
- Samsung
- LG
- Và nhiều protocol khác
5. Ví dụ 1: Nhận tín hiệu remote (local)
#include <IRremote.h>
#define IR_PIN 5
void setup() {
Serial.begin(115200);
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
Serial.println("IR Receiver ready");
}
void loop() {
if (IrReceiver.decode()) {
uint32_t code = IrReceiver.decodedIRData.decodedRawData;
uint8_t protocol = IrReceiver.decodedIRData.protocol;
Serial.print("Protocol: ");
Serial.print(protocol);
Serial.print(" | Code: 0x");
Serial.println(code, HEX);
IrReceiver.resume();
}
}
📌 Nhấn nút remote → bạn sẽ thấy IR code trên Serial.
6. Phân biệt IR “code” và “event”
Một tín hiệu IR hợp lý nên được hiểu là event:
{
"ts": 1760000000,
"event": {
"type": "ir_remote",
"protocol": "NEC",
"code": "0xFFA25D"
}
}
👉 Khác với sensor:
- Không gửi liên tục
- Chỉ gửi khi có hành động người dùng
7. Ví dụ 2: Gửi IR event realtime lên IoTLabs Cloud MQTT
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <PubSubClient.h>
#include <IRremote.h>
#define IR_PIN 5
// ===== WIFI / MQTT =====
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_PASS";
const char* MQTT_HOST = "mqtt.iotlabs.vn";
const int MQTT_PORT = 8883;
const char* MQTT_USER = "YOUR_MQTT_USER";
const char* MQTT_PASS = "YOUR_MQTT_PASS";
const char* MQTT_TOPIC =
"iotlabs/<orgId>/devices/<deviceId>/events";
WiFiClientSecure net;
PubSubClient mqtt(net);
void connectWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
}
void connectMQTT() {
net.setInsecure();
mqtt.setServer(MQTT_HOST, MQTT_PORT);
while (!mqtt.connected()) {
mqtt.connect("esp32c3-ir", MQTT_USER, MQTT_PASS);
delay(1000);
}
}
void setup() {
Serial.begin(115200);
IrReceiver.begin(IR_PIN, ENABLE_LED_FEEDBACK);
connectWiFi();
connectMQTT();
}
void loop() {
if (!mqtt.connected()) connectMQTT();
mqtt.loop();
if (IrReceiver.decode()) {
uint32_t code = IrReceiver.decodedIRData.decodedRawData;
uint8_t protocol = IrReceiver.decodedIRData.protocol;
long ts = millis() / 1000;
String payload = "{";
payload += "\"ts\":" + String(ts) + ",";
payload += "\"event\":{";
payload += "\"type\":\"ir_remote\",";
payload += "\"protocol\":" + String(protocol) + ",";
payload += "\"code\":\"0x" + String(code, HEX) + "\"";
payload += "}}";
mqtt.publish(MQTT_TOPIC, payload.c_str());
Serial.println(payload);
IrReceiver.resume();
}
}
8. Kinh nghiệm thực tế khi dùng IR Receiver
- Tránh ánh sáng mặt trời chiếu trực tiếp
- Nên debounce (delay nhẹ) để tránh double event
- Mapping:
- IR code → hành động (ON / OFF / MODE)
- Có thể kết hợp:
- IR + Relay
- IR + MQTT Rule
- IR + Cloud Dashboard
9. Ứng dụng thực tế từ Bài 23
Sau bài này, bạn có thể:
- Làm Smart Remote Hub
- Điều khiển thiết bị từ remote → cloud
- Log lịch sử thao tác người dùng
- Kết hợp IR + RFID + RTC để tạo hệ điều khiển thông minh
👉 Đây là bước rất gần Smart Home thật sự.
10. Tổng kết Bài 23
Bạn đã:
- Đọc tín hiệu IR remote bằng ESP32
- Hiểu event-driven IoT
- Gửi sự kiện realtime lên IoTLabs Cloud
- Mở rộng hệ IoT sang tương tác con người


