4.4 KiB
Điều khiển đèn ngủ qua Internet - Wio Terminal
Trong phần này của bài học, bạn sẽ đăng ký nhận các lệnh được gửi từ một MQTT broker đến Wio Terminal của bạn.
Đăng ký nhận lệnh
Bước tiếp theo là đăng ký nhận các lệnh được gửi từ MQTT broker và phản hồi lại chúng.
Nhiệm vụ
Đăng ký nhận lệnh.
-
Mở dự án đèn ngủ trong VS Code.
-
Thêm đoạn mã sau vào cuối tệp
config.h
để định nghĩa tên chủ đề cho các lệnh:const string SERVER_COMMAND_TOPIC = ID + "/commands";
SERVER_COMMAND_TOPIC
là chủ đề mà thiết bị sẽ đăng ký để nhận các lệnh điều khiển LED. -
Thêm dòng sau vào cuối hàm
reconnectMQTTClient
để đăng ký chủ đề lệnh khi MQTT client được kết nối lại:client.subscribe(SERVER_COMMAND_TOPIC.c_str());
-
Thêm đoạn mã sau bên dưới hàm
reconnectMQTTClient
.void clientCallback(char *topic, uint8_t *payload, unsigned int length) { char buff[length + 1]; for (int i = 0; i < length; i++) { buff[i] = (char)payload[i]; } buff[length] = '\0'; Serial.print("Message received:"); Serial.println(buff); DynamicJsonDocument doc(1024); deserializeJson(doc, buff); JsonObject obj = doc.as<JsonObject>(); bool led_on = obj["led_on"]; if (led_on) digitalWrite(D0, HIGH); else digitalWrite(D0, LOW); }
Hàm này sẽ là callback mà MQTT client gọi khi nhận được một tin nhắn từ server.
Tin nhắn được nhận dưới dạng một mảng các số nguyên 8-bit không dấu, vì vậy cần được chuyển đổi thành mảng ký tự để xử lý như văn bản.
Tin nhắn chứa một tài liệu JSON và được giải mã bằng thư viện ArduinoJson. Thuộc tính
led_on
của tài liệu JSON được đọc, và tùy thuộc vào giá trị, LED sẽ được bật hoặc tắt. -
Thêm đoạn mã sau vào hàm
createMQTTClient
:client.setCallback(clientCallback);
Đoạn mã này thiết lập
clientCallback
làm callback được gọi khi một tin nhắn được nhận từ MQTT broker.💁 Trình xử lý
clientCallback
được gọi cho tất cả các chủ đề đã đăng ký. Nếu sau này bạn viết mã để lắng nghe nhiều chủ đề, bạn có thể lấy chủ đề mà tin nhắn được gửi đến từ tham sốtopic
được truyền vào hàm callback. -
Tải mã lên Wio Terminal của bạn và sử dụng Serial Monitor để xem mức độ ánh sáng được gửi đến MQTT broker.
-
Điều chỉnh mức độ ánh sáng được phát hiện bởi thiết bị vật lý hoặc thiết bị ảo của bạn. Bạn sẽ thấy các tin nhắn được nhận và các lệnh được gửi trong terminal. Bạn cũng sẽ thấy LED được bật và tắt tùy thuộc vào mức độ ánh sáng.
💁 Bạn có thể tìm đoạn mã này trong thư mục code-commands/wio-terminal.
😀 Bạn đã thành công lập trình thiết bị của mình để phản hồi các lệnh từ một MQTT broker.
Tuyên bố miễn trừ trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với các thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.