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/mo/1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md

93 lines
3.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "6754c915dae64ba70fcd5e52c37f3adf",
"translation_date": "2025-08-26T23:21:21+00:00",
"source_file": "1-getting-started/lessons/4-connect-internet/wio-terminal-commands.md",
"language_code": "mo"
}
-->
# 通過網絡控制你的夜燈 - Wio Terminal
在本課程的這部分,你將訂閱從 MQTT broker 發送到 Wio Terminal 的指令。
## 訂閱指令
下一步是訂閱從 MQTT broker 發送的指令,並對其作出響應。
### 任務
訂閱指令。
1. 在 VS Code 中打開夜燈項目。
1.`config.h` 文件的底部添加以下代碼,以定義指令的主題名稱:
```cpp
const string SERVER_COMMAND_TOPIC = ID + "/commands";
```
`SERVER_COMMAND_TOPIC` 是設備訂閱以接收 LED 指令的主題。
1.`reconnectMQTTClient` 函數的末尾添加以下行,以便在 MQTT 客戶端重新連接時訂閱指令主題:
```cpp
client.subscribe(SERVER_COMMAND_TOPIC.c_str());
```
1.`reconnectMQTTClient` 函數下方添加以下代碼。
```cpp
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 的開啟或關閉。
1.`createMQTTClient` 函數中添加以下代碼:
```cpp
client.setCallback(clientCallback);
```
此代碼將 `clientCallback` 設置為在從 MQTT broker 接收到消息時調用的回調函數。
> 💁 `clientCallback` 處理器會針對所有訂閱的主題被調用。如果你之後編寫代碼來監聽多個主題,可以從回調函數傳遞的 `topic` 參數中獲取消息所屬的主題。
1. 將代碼上傳到你的 Wio Terminal並使用串行監視器查看發送到 MQTT broker 的光線水平。
1. 調整你的物理或虛擬設備檢測到的光線水平。你將看到消息被接收以及指令在終端中被發送。你還會看到 LED 根據光線水平的變化而開啟或關閉。
> 💁 你可以在 [code-commands/wio-terminal](../../../../../1-getting-started/lessons/4-connect-internet/code-commands/wio-terminal) 文件夾中找到這段代碼。
😀 恭喜!你已成功編寫代碼,使你的設備能夠響應來自 MQTT broker 的指令。
---
**免責聲明**
本文件已使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。