3.4 KiB
通过互联网控制夜灯 - Wio Terminal
在本节课程中,您将订阅从 MQTT broker 发送到 Wio Terminal 的命令。
订阅命令
下一步是订阅从 MQTT broker 发送的命令,并对其作出响应。
任务
订阅命令。
-
在 VS Code 中打开夜灯项目。
-
在
config.h
文件的底部添加以下代码,以定义命令的主题名称:const string SERVER_COMMAND_TOPIC = ID + "/commands";
SERVER_COMMAND_TOPIC
是设备将订阅以接收 LED 命令的主题。 -
在
reconnectMQTTClient
函数的末尾添加以下代码行,以便在 MQTT 客户端重新连接时订阅命令主题:client.subscribe(SERVER_COMMAND_TOPIC.c_str());
-
在
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); }
此函数将作为回调,当 MQTT 客户端从服务器接收到消息时调用。
消息以无符号 8 位整数数组的形式接收,因此需要转换为字符数组才能作为文本处理。
消息包含一个 JSON 文档,并使用 ArduinoJson 库进行解码。读取 JSON 文档的
led_on
属性,根据其值决定是否打开或关闭 LED。 -
在
createMQTTClient
函数中添加以下代码:client.setCallback(clientCallback);
此代码将
clientCallback
设置为当从 MQTT broker 接收到消息时调用的回调函数。💁
clientCallback
处理程序会为所有订阅的主题调用。如果您稍后编写监听多个主题的代码,可以通过回调函数传递的topic
参数获取消息发送的主题。 -
将代码上传到您的 Wio Terminal,并使用串口监视器查看发送到 MQTT broker 的光线强度数据。
-
调整您的物理或虚拟设备检测到的光线强度。您将在终端中看到接收到的消息和发送的命令。根据光线强度,您还会看到 LED 被打开或关闭。
💁 您可以在 code-commands/wio-terminal 文件夹中找到此代码。
😀 您已成功编写代码,使设备能够响应来自 MQTT broker 的命令。
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。