3.1 KiB
通过互联网控制你的夜灯 - 虚拟物联网硬件和树莓派
在本课的这一部分,你将订阅从 MQTT broker 发送到你的树莓派或虚拟物联网设备的命令。
订阅命令
下一步是订阅从 MQTT broker 发送的命令并对其作出响应。
任务
订阅命令。
-
在 VS Code 中打开夜灯项目。
-
如果你使用的是虚拟物联网设备,请确保终端正在运行虚拟环境。如果你使用的是树莓派,则无需使用虚拟环境。
-
在
client_telemetry_topic
定义之后添加以下代码:server_command_topic = id + '/commands'
server_command_topic
是设备订阅以接收 LED 命令的 MQTT 主题。 -
在主循环的上方、
mqtt_client.loop_start()
行之后添加以下代码:def handle_command(client, userdata, message): payload = json.loads(message.payload.decode()) print("Message received:", payload) if payload['led_on']: led.on() else: led.off() mqtt_client.subscribe(server_command_topic) mqtt_client.on_message = handle_command
这段代码定义了一个函数
handle_command
,它将消息读取为 JSON 文档,并查找led_on
属性的值。如果该值为True
,则打开 LED,否则关闭 LED。MQTT 客户端会订阅服务器发送消息的主题,并设置在接收到消息时调用
handle_command
函数。💁
on_message
处理器会被所有订阅的主题调用。如果你之后编写代码监听多个主题,可以从传递给处理器函数的message
对象中获取消息发送的主题。 -
按照上一部分作业运行代码的方式运行代码。如果你使用的是虚拟物联网设备,请确保 CounterFit 应用正在运行,并且光传感器和 LED 已在正确的引脚上创建。
-
调整你的物理或虚拟设备检测到的光线水平。接收到的消息和发送的命令会写入终端。LED 也会根据光线水平打开或关闭。
💁 你可以在 code-commands/virtual-device 文件夹或 code-commands/pi 文件夹中找到这段代码。
😀 恭喜!你已经成功编写了设备代码,使其能够响应来自 MQTT broker 的命令。
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而导致的任何误解或误读,我们概不负责。