You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/hk/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md

3.5 KiB

通過互聯網控制你的夜燈 - Wio Terminal

在本課程的這部分,你將訂閱來自 MQTT broker 發送到 Wio Terminal 的指令。

訂閱指令

下一步是訂閱來自 MQTT broker 的指令,並對其作出回應。

任務

訂閱指令。

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

  2. config.h 文件的底部添加以下代碼,以定義指令的主題名稱:

    const string SERVER_COMMAND_TOPIC = ID + "/commands";
    

    SERVER_COMMAND_TOPIC 是設備訂閱以接收 LED 指令的主題。

  3. reconnectMQTTClient 函數的末尾添加以下行,以便在 MQTT 客戶端重新連接時訂閱指令主題:

    client.subscribe(SERVER_COMMAND_TOPIC.c_str());
    
  4. 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 的開啟或關閉。

  5. createMQTTClient 函數中添加以下代碼:

    client.setCallback(clientCallback);
    

    此代碼將 clientCallback 設置為在接收到來自 MQTT broker 的消息時調用的回調函數。

    💁 clientCallback 處理器會針對所有訂閱的主題被調用。如果你之後編寫的代碼需要監聽多個主題,可以通過回調函數中傳遞的 topic 參數獲取消息所屬的主題。

  6. 將代碼上傳到你的 Wio Terminal並使用串行監視器查看發送到 MQTT broker 的光線水平。

  7. 調整你的物理或虛擬設備檢測到的光線水平。你將看到消息被接收以及指令在終端中被發送。根據光線水平,你還會看到 LED 被開啟或關閉。

💁 你可以在 code-commands/wio-terminal 文件夾中找到這段代碼。

😀 恭喜!你已成功編寫代碼,使你的設備能夠響應來自 MQTT broker 的指令。


免責聲明
本文件已使用人工智能翻譯服務 Co-op Translator 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。