0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Cổng OpenMQTT cho tín hiệu hồng ngoại

Đăng vào 5 ngày trước

• 7 phút đọc

Giới thiệu

Trong hai bài viết trước, chúng ta đã tạo ra một cảm biến tần số vô tuyến trong dải tần 433MHz và một cổng BLE. Bài viết này tiếp tục với việc thu thập và truyền tín hiệu hồng ngoại, mở ra nhiều tùy chọn để tích hợp các sản phẩm tiêu dùng khác nhau vào hệ thống tự động hóa gia đình của bạn.

Bối cảnh kỹ thuật của bài viết này là OpenMQTT Gateway v1.7.0, và phần cứng bạn cần là một board ESP8266 cùng với các linh kiện để tạo ra một bộ thu/phát IR. Các ví dụ sẽ hoạt động với các phiên bản OpenMQTT mới hơn cũng như vậy.

Phần cứng yêu cầu

Để tạo ra một cổng tín hiệu hồng ngoại, bạn cần các linh kiện phần cứng sau:

  • Một vi điều khiển loại ESP32, ESP8266 hoặc Arduino Uno
  • Một bộ thu hồng ngoại
  • Một diode hồng ngoại
  • Một transistor N2222

Đối với thiết lập của tôi, một ESP8266 là đủ. Board này được kết nối với các cảm biến hồng ngoại như sau:

  • GND bộ thu IR => GND ESP8266
  • VCC bộ thu IR => 5V ESP8266
  • Tín hiệu bộ thu IR => D4 ESP8266
  • GND bộ phát IR => GND ESP8266
  • VCC bộ phát IR => 5V ESP8266
  • Tín hiệu bộ phát IR => D0 ESP8266

Lưu ý rằng bạn cần sử dụng các chân tín hiệu được chỉ định vì chúng đã được lập trình cứng vào các nhị phân của cổng IR.

Khi bắt đầu dự án, tôi nghĩ rằng không cần sử dụng transistor N2222 cho diode hồng ngoại, nhưng không có nó, tôi không thể gửi tín hiệu nào cả. Việc kết nối rất khó khăn, vì cần thêm điện trở. Cái tôi đã thử nghiệm cho thiết lập của mình là một mạch IR ESP8266: Một điện trở 100 ohm giữa 5V VCC và đầu vào diode, và một điện trở 1k ohm giữa transistor PN2222 và chân D0.

Thiết lập phần cứng hoàn chỉnh của tôi như sau:

Cập nhật firmware cho cổng IR

Để cổng này, phương pháp cài đặt dựa trên trình duyệt Chrome là đủ. Kết nối board ESP8266 qua USB với máy tính của bạn, sau đó truy cập trang cài đặt web và chọn mô hình nodemcu2-rf. Một hộp thoại sẽ mở ra, và quá trình cập nhật bắt đầu:

Sau khi hoàn thành, ngắt kết nối thiết bị, chọn nguồn điện ổn định và bật lại.

Cấu hình cổng IR

Cấu hình ban đầu theo phương pháp giống như với các cổng OpenMQTT khác. Thiết bị phát ra một hotspot Wi-Fi với tên OMG-ESP8266-IR. Kết nối tới nó, nhập mật khẩu mặc định, và giao diện cấu hình sẽ xuất hiện.

WebUI có bố cục rất rõ ràng. Để cấu hình ban đầu, bạn cần nhấp vào Cấu hình Wifi. Sau đó, một màn hình mới sẽ mở ra cho bạn nhập thông tin xác thực Wi-Fi và cách truy cập vào broker MQTT của bạn, bao gồm các tùy chọn bảo mật qua kết hợp tên người dùng - mật khẩu hoặc thậm chí tải lên chứng chỉ khách hàng. Khi hoàn tất, nhấp vào "Lưu". Khi bạn không sử dụng WebUI nữa, thiết bị sẽ tự động khởi động lại. Ngoài ra, bạn có thể đặt lại thiết bị bằng tay.

Nhận tin nhắn MQTT từ cổng IR

Ngay sau khi khởi động, bạn sẽ thấy chủ đề SysToMQTT, sẽ phát ra thông tin chi tiết về cấu hình cổng. Một tin nhắn từ chủ đề này như sau:

json Copy
{
  "uptime": 206,
  "version": "v1.6.0",
  "discovery": true,
  "ohdiscovery": false,
  "env": "nodemcuv2-ir",
  "freemem": 32904,
  "mqttport": "1883",
  "mqttsecure": true,
  "rssi": -47,
  "modules": [
    "IR"
  ]
}

Bây giờ, hãy thử nghiệm cách các lệnh từ một điều khiển từ xa được thu thập. Thiết bị đầu tiên tôi chọn là máy tạo ẩm. Điều khiển từ xa của nó cho phép bật/tắt, đặt khoảng thời gian, điều khiển đèn và nhiều hơn nữa. Khi nhấn các nút này, sẽ có các tin nhắn MQTT như sau:

json Copy
// Công tắc đèn máy tạo ẩm
{
  "value": 16732335,
  "protocol": 3,
  "bits": 32,
  "hex": "0xFF50AF",
  "protocol_name": "NEC",
  "raw": "9046,4492,618,518,554,580,586,552,580,558,590,546,590,546,616,522,580,556,588,1660,588,1658,618,1630,588,1660,586,1662,586,1660,586,1662,620,1628,592,546,586,1662,586,550,578,1670,586,550,618,518,584,554,576,560,616,1632,596,540,590,1658,586,550,586,1662,592,1656,590,1656,592,1654,592"
}

{
  "value": 18446744073709551615,
  "protocol": 3,
  "bits": 0,
  "hex": "0xFFFFFFFFFFFFFFFF",
  "protocol_name": "NEC",
  "raw": "9036,2254,572"
}

Sau đó, nhấn công tắc TIMER:

json Copy
// Công tắc TIMER máy tạo ẩm
{
  "value": 16716015,
  "protocol": 3,
  "bits": 32,
  "hex": "0xFF10EF",
  "protocol_name": "NEC",
  "raw": "9036,4506,570,566,570,566,570,566,572,564,572,564,572,568,570,564,572,568,568,1702,546,1700,546,1680,568,1674,572,1702,546,1676,572,1678,570,1678,570,564,572,566,570,566,572,1678,568,564,574,564,572,564,572,564,572,1678,570,1678,570,1678,568,566,570,1678,570,1676,570,1678,568,1680,568"
}

{
  "value": 18446744073709551615,
  "protocol": 3,
  "bits": 0,
  "hex": "0xFFFFFFFFFFFFFFFF",
  "protocol_name": "NEC",
  "raw": "9034,2256,572"
}

Như bạn thấy, mỗi nút nhấn dẫn đến hai payload. Payload đầu tiên xác định nút cụ thể, và payload thứ hai là định danh duy nhất cho điều khiển từ xa này. Hơn nữa, mỗi payload là một gói raw, chứa một giá trị ở định dạng HEX và thập phân, số bit gửi và các bit raw.

So sánh điều này với tín hiệu hồng ngoại của TV. Tôi có một TV LG và Samsung, và thấy các tín hiệu sau khi nhấn nút on/off:

json Copy
// TV LG on/off
{
  "value": 18446744073709551615,
  "protocol": 3,
  "bits": 0,
  "hex": "0xFFFFFFFFFFFFFFFF",
  "protocol_name": "NEC",
  "raw": "9056,2274,494"
}

{
  "value": 551489775,
  "protocol": 3,
  "bits": 32,
  "hex": "0x20DF10EF",
  "protocol_name": "NEC",
  "raw": "9056,4530,494,632,494,634,494,1788,468,634,494,634,494,632,496,634,494,634,494,1762,492,1762,494,634,492,1762,494,1764,492,1762,494,1788,468,1762,492,632,496,634,494,634,494,1762,494,632,494,632,494,634,494,630,496,1760,494,1762,494,1762,494,632,494,1766,492,1762,492,1788,468,1764,490"
}
json Copy
// TV Samsung on/off
{
  "value": 3772793023,
  "protocol": 7,
  "bits": 32,
  "hex": "0xE0E040BF",
  "protocol_name": "SAMSUNG",
  "raw": "4460,4508,542,1730,516,1708,540,1730,516,570,540,570,540,570,542,566,544,568,542,1730,516,1730,516,1708,540,568,542,568,542,568,542,570,540,568,542,568,542,1708,540,570,540,568,542,568,542,568,542,568,542,568,542,1708,540,570,540,1730,516,1706,540,1708,538,1706,542,1704,540,1708,540"
}

Thú vị là, đối với TV Samsung, nó nhận ra một giao thức khác và không có tin nhắn xác nhận nào được gửi.

Nhưng bạn phải làm gì với thông tin này? Cổng OpenMQTT không cung cấp bất kỳ ánh xạ nào của các tín hiệu IR tới các nút cụ thể, nó chỉ phân tích các tín hiệu và cung cấp thông tin này dưới dạng dữ liệu raw. Bạn cần ghi lại dữ liệu nào tương ứng với nút nào, và sau đó định nghĩa một người tiêu dùng tin nhắn MQTT trong hệ thống phần mềm IoT của bạn để kích hoạt tự động hóa. Ví dụ, bạn có thể sử dụng nút âm lượng của điều khiển từ xa để gửi giá trị âm lượng tới một bộ loa.

Một tùy chọn khác là gửi những tín hiệu này trở lại các thiết bị. Hãy xem điều này trong phần tiếp theo.

Gửi tin nhắn IR

Cổng IR OpenMQTT lắng nghe trên một chủ đề MQTT được xác định cho các lệnh đầu vào. Những lệnh này có thể là các chỉ dẫn để gửi một tín hiệu IR. Bạn có thể sao chép thông tin đã thu được và phát lại cho thiết bị, hiệu quả là sao chép chức năng của điều khiển từ xa. Và vì bạn có thể thu thập dữ liệu từ nhiều điều khiển từ xa, điều này có thể mở ra con đường thay thế tất cả các điều khiển bằng một thiết bị phát duy nhất.

Để thử nghiệm thực tế, tôi sử dụng công tắc bật/tắt của máy tạo ẩm làm ví dụ. Tin nhắn gửi tới Cổng OpenMQTT cần chỉ bao gồm hai tham số: valueprotocol. Dưới đây là tin nhắn đã được tạo:

json Copy
// >openmqtt/ir/commands/MQTTtoIR
{
  "value":16732335,
  "protocol":3
}

Vậy là xong. Máy tạo ẩm sẽ bật hoặc tắt bất cứ khi nào MqttGateway nhận được tin nhắn này.

Để mở rộng ý tưởng này cho việc điều khiển nhiều thiết bị, bạn nên xem xét rằng cả việc gửi IR từ cổng và việc nhận IR của thiết bị mà bạn muốn điều khiển đều là yếu tố giới hạn. Tìm một vị trí trong nhà của bạn từ đó tất cả các thiết bị có thể được tiếp cận có thể là điều khó khăn. Để làm điều này, tôi khuyên bạn nên tìm hiểu về "IR Blaster", một tên gọi phổ biến cho các dự án DIY tạo ra một bộ phát IR đa năng và mạnh mẽ. Ngoài ra, bạn có thể thiết lập nhiều cổng IR trên khắp ngôi nhà của bạn.

Kết luận

Cổng IR OpenMQTT là một giải pháp thực tế để kiểm soát các thiết bị IR bằng hệ thống tự động hóa gia đình của bạn. Bạn cần một board ESP, một bộ thu IR và diode IR. Xây dựng nó, cập nhật firmware, và sau đó xem các tín hiệu IR được chuyển đổi thành tin nhắn MQTT. Bằng cách gửi những tin nhắn này trở lại cổng, một tín hiệu IR được phát ra. Điều này biến Cổng IR thành một điều khiển từ xa chính, cho phép tự động hóa hiệu quả cho nhiều thiết bị trong ngôi nhà của bạn.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào