ESP32 Điều Khiển Bằng Remote Hồng Ngoại

Có lẽ bạn đã gặp remote điều khiển hồng ngoại, hay còn gọi là remote IR, khi sử dụng các thiết bị như TV và điều hòa ở nhà... Trong hướng dẫn này, chúng ta sẽ học cách sử dụng remote điều khiển hồng ngoại (IR) và bộ thu hồng ngoại để điều khiển ESP32. Cụ thể, chúng ta sẽ học:

ir controller - ir receiver - ESP32

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Bộ Kit Remote IR và Bộ Thu
1×Pin CR2025
1×breadboard
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Điều Khiển Remote IR

Hệ thống điều khiển IR có hai thành phần: remote điều khiển IR và bộ thu IR.

  • Remote điều khiển IR được sử dụng để gửi lệnh bằng tín hiệu hồng ngoại.
  • Bộ thu IR thu nhận và giải mã những tín hiệu này để điều khiển thiết bị.

Một bộ kit IR thường bao gồm hai thành phần được đề cập ở trên: remote điều khiển IR và bộ thu IR.

Remote điều khiển IR

Remote điều khiển IR là một thiết bị di động phát ra tín hiệu hồng ngoại. Nó được thiết kế với bàn phím có nhiều nút:

  • Mỗi nút trên remote được gán một chức năng hoặc lệnh cụ thể.
  • Khi một nút được nhấn, remote phát ra tín hiệu hồng ngoại chứa mã hoặc mẫu duy nhất liên kết với nút được nhấn.
  • Những tín hiệu hồng ngoại này nằm trong phổ hồng ngoại và không thể nhìn thấy bằng mắt người.
ir controller
image source: diyables.io

Bộ Thu IR

Module bộ thu IR là một cảm biến phát hiện và nhận tín hiệu hồng ngoại được phát ra từ remote điều khiển.

Bộ thu hồng ngoại phát hiện tín hiệu hồng ngoai đến và chuyển đổi chúng thành mã (lệnh) đại diện cho nút được nhấn trên remote điều khiển.

Bộ thu IR có thể là cảm biến hoặc module. Bạn có thể sử dụng các lựa chọn sau:

  • Chỉ module bộ thu IR
  • Chỉ cảm biến bộ thu IR
  • Cảm biến bộ thu IR + Adapter
ir receiver sensor module
image source: diyables.io
ir receiver sensor adapter
image source: diyables.io

Sơ Đồ Chân Bộ Thu IR

Module hoặc cảm biến bộ thu IR có ba chân:

  • Chân VCC: Kết nối chân này với chân 3.3V hoặc 5V của ESP32 hoặc nguồn điện ngoài.
  • Chân GND: Kết nối chân này với chân GND của ESP32 hoặc nguồn điện ngoài.
  • Chân OUT (Output): Đây là chân đầu ra của module bộ thu IR. Kết nối với chân digital input trên ESP32.

Cách Hoạt Động

Khi người dùng nhấn một nút trên remote điều khiển IR

  • Remote điều khiển IR mã hóa lệnh tương ứng với nút thành tín hiệu hồng ngoại thông qua một giao thức cụ thể
  • Remote điều khiển IR phát ra tín hiệu hồng ngoại đã mã hóa
  • Bộ thu IR nhận tín hiệu hồng ngoại đã mã hóa
  • Bộ thu IR giải mã tín hiệu hồng ngoại đã mã hóa thành lệnh
  • ESP32 đọc lệnh từ bộ thu IR
  • ESP32 ánh xạ lệnh với phím được nhấn

Khi một nút được nhấn trên remote điều khiển IR, chuỗi sự kiện sau sẽ xảy ra:

  • Remote điều khiển IR mã hóa lệnh của nút thành tín hiệu hồng ngoại sử dụng giao thức cụ thể.
  • Tín hiệu hồng ngoại đã mã hóa được phát ra bởi remote điều khiển IR.
  • Bộ thu IR bắt và nhận tín hiệu hồng ngoại đã mã hóa.
  • Bộ thu IR giải mã tín hiệu hồng ngoại, chuyển đổi nó trở lại thành lệnh gốc.
  • ESP32 đọc và lấy lệnh từ bộ thu IR.
  • ESP32 sau đó ánh xạ lệnh nhận được với nút tương ứng đã được nhấn trên remote điều khiển IR.

Về cơ bản, những bước này phác thảo cách thao tác nhấn nút của remote điều khiển IR được chuyển đổi thành lệnh có thể nhận dạng mà ESP32 có thể hiểu và xử lý.

Có vẻ phức tạp, nhưng đừng lo lắng. Nhờ thư viện DIYables_IRcontroller dễ sử dụng, việc thực hiện trở nên vô cùng đơn giản.

Sơ Đồ Đấu Nối

Sơ đồ đấu nối giữa ESP32 và Module Bộ Thu IR

ESP32 ir remote control sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

Sơ đồ đấu nối giữa ESP32 và Cảm Biến Bộ Thu IR

ESP32 ir remote control sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Sơ đồ đấu nối giữa ESP32 và Cảm Biến Bộ Thu IR với Adapter

Trước khi kết nối cảm biến bộ thu IR với ESP32, bạn có thể kết nối nó với adapter. Điều này cho phép tích hợp và thiết lập cảm biến bộ thu IR với ESP32 dễ dàng hơn.

ESP32 ir remote control receiver adapter
image source: diyables.io

Cách Lập Trình Cho Remote Điều Khiển IR

  • Include thư viện:
#include <DIYables_IRcontroller.h> // Library for IR Receiver
  • Khai báo đối tượng DIYables_IRcontroller_17 hoặc DIYables_IRcontroller_21 tương ứng với remote điều khiển IR 17 phím hoặc 21 phím:
DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms // OR DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms
  • Khởi tạo IR Controller.
irController.begin();
  • Trong vòng lặp, kiểm tra xem có phím nào được nhấn hay không. Nếu có, lấy phím
Key17 key = irController.getKey(); // if using 17-key IR controller // OR Key21 key = irController.getKey(); // if using 21-key IR controller
  • Sau khi phát hiện phím được nhấn, bạn có thể thực hiện các hành động dựa trên từng phím.

Code ESP32

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 19 // The ESP32 pin GPIO19 connected to IR controller DIYables_IRcontroller_17 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key17 key = irController.getKey(); if (key != Key17::NONE) { switch (key) { case Key17::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key17::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key17::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key17::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key17::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key17::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key17::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key17::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key17::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; case Key17::KEY_STAR: Serial.println("*"); // TODO: YOUR CONTROL break; case Key17::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key17::KEY_SHARP: Serial.println("#"); // TODO: YOUR CONTROL break; case Key17::KEY_UP: Serial.println("UP"); // TODO: YOUR CONTROL break; case Key17::KEY_DOWN: Serial.println("DOWN"); // TODO: YOUR CONTROL break; case Key17::KEY_LEFT: Serial.println("LEFT"); // TODO: YOUR CONTROL break; case Key17::KEY_RIGHT: Serial.println("RIGHT"); // TODO: YOUR CONTROL break; case Key17::KEY_OK : Serial.println("OK"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }
/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-ir-remote-control */ #include <DIYables_IRcontroller.h> // DIYables_IRcontroller library #define IR_RECEIVER_PIN 19 // The ESP32 pin GPIO19 connected to IR controller DIYables_IRcontroller_21 irController(IR_RECEIVER_PIN, 200); // debounce time is 200ms void setup() { Serial.begin(9600); irController.begin(); } void loop() { Key21 key = irController.getKey(); if (key != Key21::NONE) { switch (key) { case Key21::KEY_CH_MINUS: Serial.println("CH-"); // TODO: YOUR CONTROL break; case Key21::KEY_CH: Serial.println("CH"); // TODO: YOUR CONTROL break; case Key21::KEY_CH_PLUS: Serial.println("CH+"); // TODO: YOUR CONTROL break; case Key21::KEY_PREV: Serial.println("<<"); // TODO: YOUR CONTROL break; case Key21::KEY_NEXT: Serial.println(">>"); // TODO: YOUR CONTROL break; case Key21::KEY_PLAY_PAUSE: Serial.println(">||"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_MINUS: Serial.println("–"); // TODO: YOUR CONTROL break; case Key21::KEY_VOL_PLUS: Serial.println("+"); // TODO: YOUR CONTROL break; case Key21::KEY_EQ: Serial.println("EQ"); // TODO: YOUR CONTROL break; case Key21::KEY_100_PLUS: Serial.println("100+"); // TODO: YOUR CONTROL break; case Key21::KEY_200_PLUS: Serial.println("200+"); // TODO: YOUR CONTROL break; case Key21::KEY_0: Serial.println("0"); // TODO: YOUR CONTROL break; case Key21::KEY_1: Serial.println("1"); // TODO: YOUR CONTROL break; case Key21::KEY_2: Serial.println("2"); // TODO: YOUR CONTROL break; case Key21::KEY_3: Serial.println("3"); // TODO: YOUR CONTROL break; case Key21::KEY_4: Serial.println("4"); // TODO: YOUR CONTROL break; case Key21::KEY_5: Serial.println("5"); // TODO: YOUR CONTROL break; case Key21::KEY_6: Serial.println("6"); // TODO: YOUR CONTROL break; case Key21::KEY_7: Serial.println("7"); // TODO: YOUR CONTROL break; case Key21::KEY_8: Serial.println("8"); // TODO: YOUR CONTROL break; case Key21::KEY_9: Serial.println("9"); // TODO: YOUR CONTROL break; default: Serial.println("WARNING: undefined key:"); break; } } }

Các Bước Nhanh

  • Nếu đây là lần đầu bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Click vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • Tìm kiếm "DIYables_IRcontroller", sau đó tìm thư viện DIYables_IRcontroller của DIYables
  • Click nút Install để cài đặt thư viện DIYables_IRcontroller.
ESP32 diyables_ircontroller thư viện
  • Bạn sẽ được yêu cầu cài đặt dependency library như hình dưới:
ESP32 irremote thư viện
  • Click nút Install all để cài đặt dependency
  • Sao chép code trên và mở bằng Arduino IDE
  • Click nút Upload trên Arduino IDE để upload code lên ESP32
  • Nhấn các phím trên remote điều khiển lần lượt từng phím một
  • Xem kết quả trên Serial Monitor.
  • Khi bạn nhấn các phím trên remote điều khiển IR 21 phím lần lượt từng phím một, kết quả như sau:
COM6
Send
9 8 7 6 5 4 3 2 1 0 200+ 100+ EQ + – || >> << CH+ CH CH-
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Bây giờ bạn có khả năng tùy chỉnh code và điều khiển các thiết bị khác nhau như LED, quạt, máy bơm, actuator và nhiều thứ khác sử dụng remote điều khiển IR. Điều này có nghĩa là bạn có thể thay đổi code để làm cho những thiết bị này phản hồi với các lệnh của bạn được gửi thông qua remote điều khiển.

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.