本文以夜燈開關為例,介紹如何快速使用C Link SDK,類比裝置採用MQTT協議接入物聯網平台,並通過自訂Topic上報資料至物聯網平台的完整操作。
前提條件
已開通物聯網平台服務。
建立產品和裝置
準備開發環境
本樣本的開發環境為Ubuntu 16.04,開發工具為GCC和Make。關於環境的更多說明,請參見環境說明。
安裝Ubuntu 16.04。
更多資訊,請參見Ubuntu。
執行以下命令,安裝GCC和Make。
sudo apt-get -y install gcc make
配置裝置端SDK
下載Demo檔案至開發環境並解壓。
物聯網平台提供SDK定製功能,更多資訊,請參見擷取C Link SDK。
開啟
./LinkSDK/demos/mqtt_basic_demo.c
檔案,配置如下參數:配置裝置接入資訊,使裝置接入物聯網平台。範例程式碼如下:
char *product_key = "a18wP******"; char *device_name = "LightSwitch"; char *device_secret = "uwMTmVAMnGGHaAkqmeDY6cHxxB******"; char *mqtt_host = "a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com";
參數
樣本
說明
mqtt_host
a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com
裝置的接入網域名稱。
企業版執行個體和新版公用執行個體:在執行個體詳情頁面的開發配置面板,查看接入網域名稱。
舊版公用執行個體:接入網域名稱格式為
${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com
。
新舊版公用執行個體和企業版執行個體、以及接入網域名稱的更多資訊,請參見查看執行個體終端節點。
product_key
a18wP******
裝置認證資訊。即完成添加裝置後,您儲存至本地的裝置認證。
您也可以在物聯網平台的裝置詳情頁查看裝置的認證資訊。更多資訊,請參見擷取裝置認證資訊。
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
配置裝置訂閱Topic,例如
/a18wP******/LightSwitch/user/get
,以接收來自物聯網平台的訊息。範例程式碼如下:說明如需體驗該功能,您需取消該代碼兩邊的注釋符號(/**/)。
{ char *sub_topic = "/a18wP******/LightSwitch/user/get"; res = aiot_mqtt_sub(mqtt_handle, sub_topic, NULL, 1, NULL); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }
參數
樣本
說明
sub_topic
/a18wP******/LightSwitch/user/get
具有訂閱許可權的Topic,裝置通過該Topic,可接收物聯網平台的訊息。
您可以在物聯網平台的產品詳情頁的Topic類列表下的自訂Topic頁簽下,查看您的自訂Topic。更多資訊,請參見什麼是Topic。
本樣本為預設的自訂Topic。其中:
a18wP******
為裝置的ProductKey。LightSwitch
為裝置的DeviceName。
配置裝置用於發送資訊的Topic,例如
/a18wP******/LightSwitch/user/update
,並設定要發送的資訊內容。範例程式碼如下:說明如需體驗該功能,您需取消該代碼兩邊的注釋符號(/**/)。
{ char *pub_topic = "/a18wP******/LightSwitch/user/update"; char *pub_payload = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"; res = aiot_mqtt_pub(mqtt_handle, pub_topic, (uint8_t *)pub_payload, (uint32_t)strlen(pub_payload), 0); if (res < 0) { printf("aiot_mqtt_sub failed, res: -0x%04X\n", -res); return -1; } }
參數
樣本
說明
pub_topic
/a18wP******/LightSwitch/user/update
具有發布許可權的Topic,裝置通過該Topic向物聯網平台發送訊息。
您可以在物聯網平台的產品詳情頁的Topic類列表下的自訂Topic頁簽下,查看您的自訂Topic。更多資訊,請參見什麼是Topic。
本樣本為預設的自訂Topic。其中:
a18wP******
為裝置的ProductKey。LightSwitch
為裝置的DeviceName。
pub_payload
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
上報至物聯網平台的訊息內容。
本樣本使用自訂Topic,您可自訂訊息的資料格式。
在Link SDK根目錄下,執行命令
make
。產生的Demo可執行檔為
./output/mqtt-basic-demo
。
運行結果
在Link SDK根目錄下,執行以下命令,運行Demo可執行檔。
./output/mqtt-basic-demo
您可以在裝置端查看運行結果。
以下日誌顯示裝置
LightSwitch
與物聯網平台串連成功。[1619768570.433][LK-0313] MQTT user calls aiot_mqtt_connect api, connect [1619768570.433][LK-0317] LightSwitch&a18wP****** [1619768570.433][LK-0318] 933FE333F78F42E2AAD384F629C771277E06D459577942EA1F04ACFDFE****** core_sysdep_network_establish host a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com port 8883, type 0 establish tcp connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[8883]) success to establish tcp, fd=3 local port: 49122 [1619768570.599][LK-1000] establish mbedtls connection with server(host='a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[8883]) [1619768570.600][LK-1000] success to establish mbedtls connection, (cost 45134 bytes in total, max used 47870 bytes) [1619768570.644][LK-0313] MQTT connect success in 212 ms AIOT_MQTTEVT_CONNECT
以下日誌顯示裝置
LightSwitch
訂閱了Topic/a18wP******/LightSwitch/user/get
。[1620373302.144][LK-0309] sub: /a18wP******/LightSwitch/user/get
Topic訂閱成功後,您可以返回物聯網平台,在裝置詳情頁面的Topic列表頁簽,單擊訂閱的Topic操作欄的發布訊息,然後在發布訊息對話方塊的訊息輸入欄中,輸入一條訊息,例如:This is a test message from Alibaba Iot Platform.,類比從物聯網平台向裝置發送訊息。
以下日誌顯示裝置
LightSwitch
通過Topic/a18wP******/LightSwitch/user/update
,向物聯網平台上報了一條訊息。[1619768570.644][LK-0309] pub: /a18wP******/LightSwitch/user/update [LK-030A] > 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 | {"id":"1","versi [LK-030A] > 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D | on":"1.0","param [LK-030A] > 73 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 | s":{"LightSwitch [LK-030A] > 22 3A 30 7D 7D
您可以在物聯網平台控制台,查看裝置的狀態和作業記錄。
左側導覽列,選擇
,找到裝置,查看裝置狀態。裝置狀態顯示為線上,則表示裝置與物聯網平台成功串連。在左側導覽列,選擇
,選擇夜燈開關產品後,查看裝置上線、訂閱Topic和上報訊息的日誌。
如果在調試過程中出現錯誤,請參見裝置端接收的錯誤碼,根據提示解決問題。