本文以夜燈開關為例,介紹如何快速使用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和上報消息的日志。
如果在調試過程中出現錯誤,請參見設備端接收的錯誤碼,根據提示解決問題。