跳至主要内容

通過互聯網控制你的夜燈 - 虛擬物聯網硬件和樹莓派

物聯網設備需要編寫代碼,使用 MQTT 與 test.mosquitto.org 通信,以發送帶有光傳感器讀數的遙測值,並接收控制 LED 的命令。

在本課的這一部分中,你將把你的樹莓派或虛擬物聯網設備連接到 MQTT 代理。

安裝 MQTT 客戶端包

要與 MQTT 代理通信,你需要在你的樹莓派上或在使用虛擬設備時的虛擬環境中安裝一個 MQTT 庫 pip 包。

任務

安裝 pip 包

  1. 在 VS Code 中打開夜燈項目。

  2. 如果你使用的是虛擬物聯網設備,請確保終端正在運行虛擬環境。如果你使用的是樹莓派,則不需要使用虛擬環境。

  3. 運行以下命令來安裝 MQTT pip 包:

    pip3 install paho-mqtt

編寫設備代碼

設備已準備好編寫代碼。

任務

編寫設備代碼。

  1. app.py 文件的頂部添加以下導入:

    import paho.mqtt.client as mqtt

    paho.mqtt.client 庫允許你的應用通過 MQTT 進行通信。

  2. 在光傳感器和 LED 的定義之後添加以下代碼:

    id = '<ID>'

    client_name = id + 'nightlight_client'

    <ID> 替換為一個唯一的 ID,該 ID 將用作此設備客戶端的名稱,並在稍後用於此設備發布和訂閱的主題名稱。test.mosquitto.org 代理是公共的,許多人使用,包括其他完成此作業的學生。擁有唯一的 MQTT 客戶端名稱和主題名稱可確保你的代碼不會與其他人的代碼發生衝突。在本作業的後面創建服務器代碼時,你也需要此 ID。

    💁 你可以使用像 GUIDGen 這樣的網站來生成唯一的 ID。

    client_name 是此 MQTT 客戶端在代理上的唯一名稱。

  3. 在這段新代碼下面添加以下代碼,以創建一個 MQTT 客戶端對象並連接到 MQTT 代理:

    mqtt_client = mqtt.Client(client_name)
    mqtt_client.connect('test.mosquitto.org')

    mqtt_client.loop_start()

    print("MQTT connected!")

    此代碼創建客戶端對象,連接到公共 MQTT 代理,並啟動一個處理循環,該循環在後台線程中運行,監聽任何訂閱主題的消息。

  4. 以與運行作業前一部分代碼相同的方式運行代碼。如果你使用的是虛擬物聯網設備,請確保 CounterFit 應用正在運行,並且光傳感器和 LED 已在正確的引腳上創建。

    (.venv) ➜  nightlight python app.py 
    MQTT connected!
    Light level: 0
    Light level: 0

💁 你可以在 code-mqtt/virtual-device 文件夾或 code-mqtt/pi 文件夾中找到此代碼。

😀 你已成功將設備連接到 MQTT 代理。