# 通过互联网控制你的夜灯 - 虚拟物联网硬件和树莓派 物联网设备需要通过 MQTT 与 *test.mosquitto.org* 通信,以发送包含光传感器读数的遥测值,并接收控制 LED 的命令。 在本课程的这一部分,你将把树莓派或虚拟物联网设备连接到 MQTT broker。 ## 安装 MQTT 客户端包 为了与 MQTT broker 通信,你需要在树莓派或虚拟设备的虚拟环境中安装一个 MQTT 库的 pip 包。 ### 任务 安装 pip 包 1. 在 VS Code 中打开夜灯项目。 1. 如果你使用的是虚拟物联网设备,请确保终端正在运行虚拟环境。如果你使用的是树莓派,则无需使用虚拟环境。 1. 运行以下命令以安装 MQTT pip 包: ```sh pip3 install paho-mqtt ``` ## 编写设备代码 设备已经准备好进行编码。 ### 任务 编写设备代码。 1. 在 `app.py` 文件顶部添加以下导入: ```python import paho.mqtt.client as mqtt ``` `paho.mqtt.client` 库允许你的应用通过 MQTT 进行通信。 1. 在光传感器和 LED 的定义之后添加以下代码: ```python id = '' client_name = id + 'nightlight_client' ``` 将 `` 替换为一个唯一的 ID,该 ID 将用作此设备客户端的名称,并在后续用于此设备发布和订阅的主题名称。*test.mosquitto.org* broker 是公共的,许多人都在使用,包括其他完成此任务的学生。拥有一个唯一的 MQTT 客户端名称和主题名称可以确保你的代码不会与其他人的代码冲突。在稍后的任务中创建服务器代码时,你也需要使用此 ID。 > 💁 你可以使用像 [GUIDGen](https://www.guidgen.com) 这样的网站生成一个唯一的 ID。 `client_name` 是此 MQTT 客户端在 broker 上的唯一名称。 1. 在这段新代码的下方添加以下代码,以创建一个 MQTT 客户端对象并连接到 MQTT broker: ```python mqtt_client = mqtt.Client(client_name) mqtt_client.connect('test.mosquitto.org') mqtt_client.loop_start() print("MQTT connected!") ``` 此代码创建客户端对象,连接到公共 MQTT broker,并启动一个处理循环,该循环在后台线程中运行,监听任何已订阅主题的消息。 1. 以与完成任务的上一部分代码相同的方式运行代码。如果你使用的是虚拟物联网设备,请确保 CounterFit 应用正在运行,并且光传感器和 LED 已在正确的引脚上创建。 ```output (.venv) ➜ nightlight python app.py MQTT connected! Light level: 0 Light level: 0 ``` > 💁 你可以在 [code-mqtt/virtual-device](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/virtual-device) 文件夹或 [code-mqtt/pi](../../../../../1-getting-started/lessons/4-connect-internet/code-mqtt/pi) 文件夹中找到此代码。 😀 你已成功将设备连接到 MQTT broker。 **免责声明**: 本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档为权威来源。对于关键信息,建议使用专业人工翻译。因使用本翻译而导致的任何误解或误读,我们概不负责。