1. 概括
本文檔介紹如何通過AliOS Things3.3快速連接配接到阿裡雲物聯網雲平台,并進行資料互動。
2. 雲端準備工作
2.1 注冊登陸
請先點選登陸
物聯網平台(未注冊阿裡雲賬戶的使用者,請先完成賬戶注冊),按下面步驟一步步去打造。
2.2 建立産品
- 注冊登入後,如下圖所示,前往管理控制台。

- 點選公共執行個體,進行産品建立
- 建立燈示範産品 點選建立産品,見下圖所示,這裡建立了一個名稱“HaaS_Light”産品。選擇标準品類/智能生活/電工照明/燈。 當然你也可以選擇其他品類活自定義品類,但是需要注意保持裝置端處理的資料類型與雲端定義一緻。
2.3 建立裝置
在裝置清單中增加對應産品的裝置。本例程中建立了一個light01的裝置:
檢視裝置資訊,并複制三元組用于裝置端程式設計
建立後的裝置三元組資訊需要同步到裝置端的開發代碼段中,在3章節會介紹。待裝置端開發結束,就可以在物聯網平台中參看裝置線上狀态。
3. 裝置端開發
3.1 AliOS Things開發環境搭建
開發環境的搭建請參考 HaaS100_Quick_Start (搭建開發環境章節),其中詳細的介紹了AliOS Things 3.3的IDE內建開發環境的搭建流程。
3.2 linksdk_demo代碼下載下傳
物模型上雲的代碼下載下傳請參考 HaaS100_Quick_Start (建立工程章節),其中,
選擇解決方案: “linksdk_demo” 選擇開發闆: HaaS100
3.3 裝置端代碼修改
示範用例路徑為solutions/{your_project}/data_model_basic_demo.c 此示範用例示範Link SDK物模型單品上雲的功能。 注意:{your_project} 為studio中建立的工程名(基于linksdk_demo模闆)
1.修改三元組,使用4.2.1章節得到的三元組填入代碼如下區域:
- int demo_main(int argc, char *argv[])
- {
- ...
- /* TODO: 替換為自己裝置的三元組 */
- char *product_key = "此處請填入product_key";
- char *device_name = "此處請填入device_name";
- char *device_secret = "此處請填入device_secret";
3.4 代碼編譯、燒錄
編譯linksdk_demo的過程如下:
– 參考 HaaS100_Quick_Start (3.1 編譯工程章節),點選 ✅ 即可完成編譯固件。
– 參考 HaaS100_Quick_Start (3.2 燒錄鏡像章節),點選 "⚡️" 即可完成燒錄固件。
燒寫步驟可以參考 HaaS100_Quick_Start。
4. 調試
4.1 聯網
裝置上電後,連接配接序列槽,CLI指令行輸入聯網指令:
netmgr -t wifi -c ssid password
注意:ssid和password需要替換成自己的路由的ssid及密碼。
連上路由器後會觸發Link SDK主任務運作,并自動連接配接到阿裡雲物聯網平台。
4.2 裝置端關鍵日志
序列槽輸出:
- success to establish mbedtls connection, fd = 3(cost 0 bytes in total, max used 0 bytes)
- [104.526][LK-0313] MQTT connect success in 1908 ms
- AIOT_MQTTEVT_CONNECT
4.3 雲端狀态
在雲端裝置管理中,可以看到剛建立的裝置狀态由未激活變成了線上,說明此裝置已成功上雲。
5. 擴充開發
上面案例我們僅通過修改三元組就讓裝置連接配接到了物聯網平台。如何對裝置進行功能開發,将資料從雲端推送到裝置或從裝置推送到雲端呢?
5.1 雲端下發屬性
5.1.2 裝置端處理
設定雲端資料回調函數:
- /* 配置消息接收處理回調函數 */
- aiot_dm_setopt(dm_handle, AIOT_DMOPT_RECV_HANDLER, (void *)demo_dm_recv_handler);
- }
在使用者回調函數中捕獲AIOT_DMRECV_PROPERTY_SET事件,即雲端設定屬性的事件:
- /* 使用者資料接收處理回調函數 */
- static void demo_dm_recv_handler(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata)
- printf("demo_dm_recv_handler, type = %d\r\n", recv->type);
- switch (recv->type) {
- /* 屬性設定 */
- case AIOT_DMRECV_PROPERTY_SET: {
- printf("msg_id = %ld, params = %.*s\r\n",
- (unsigned long)recv->data.property_set.msg_id,
- recv->data.property_set.params_len,
- recv->data.property_set.params);
- /* TODO: 以下代碼示範如何對來自雲平台的屬性設定指令進行應答, 使用者可取消注釋檢視示範效果 */
- aiot_dm_msg_t msg;
- memset(&msg, 0, sizeof(aiot_dm_msg_t));
- msg.type = AIOT_DMMSG_PROPERTY_SET_REPLY;
- msg.data.property_set_reply.msg_id = recv->data.property_set.msg_id;
- msg.data.property_set_reply.code = 200;
- msg.data.property_set_reply.data = "{}";
- int32_t res = aiot_dm_send(dm_handle, &msg);
- if (res < 0) {
- printf("aiot_dm_send failed\r\n");
- break;
5.1.3 雲端下發
在裝置界面點選線上調試功能
跳轉到線上調試頁面,進行屬性調試
5.1.4 檢視裝置端日志
如下所示, {"LightSwitch":1}的指令已經下發到裝置端,開發者可以對此json字元串進行解析并用于裝置控制。
- [1606.833][LK-0309] pub: /sys/a1duSiRzIXc/light01/thing/service/property/set
- [LK-030A] < 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 | {"method":"thing
- [LK-030A] < 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 | .service.propert
- [LK-030A] < 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 31 35 39 | y.set","id":"159
- [LK-030A] < 30 36 35 31 30 33 31 22 2C 22 70 61 72 61 6D 73 | 0651031","params
- [LK-030A] < 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 22 | ":{"LightSwitch"
- [LK-030A] < 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 | :1},"version":"1
- [LK-030A] < 2E 30 2E 30 22 7D | .0.0"}
- [1606.835][LK-0A08] DM recv property set
- demo_dm_recv_handler, type = 1
- msg_id = 1590651031, params = {"LightSwitch":1}
5.2 裝置上報屬性
5.2.1 裝置端處理
為了示範友善,我們在主任務中定時上報屬性。在具體業務中,屬性上報可在其他線程中觸發。
- /* 主循環進入休眠 */
- while (1) {
- /* TODO: 以下代碼示範了簡單的屬性上報和事件上報, 使用者可取消注釋觀察示範效果 */
- demo_send_property_post(dm_handle, "{\"LightSwitch\": 0}");
- aos_msleep(10000);
5.2.2 雲端檢視上報資料
在監控運維-日志服務中,可以檢視裝置上報的所有資料。
另外。物模型中主要資料類型處了屬性外,還有服務和事件。具體詳情請參考
官網文檔。
6. 總結
回顧一下整個流程,可概括為:
- 雲端建立産品和裝置
- 裝置端設定三元組
- 裝置端設定接收回調函數捕獲下行資料
- 裝置端調用屬性/事件上報接口發送上行資料
通過本案例可以發現,使用AliOS Things連接配接到阿裡雲物聯網平台并進行資料互動開發的流程非常簡單,趕緊試試吧。
開發者技術支援
如需更多技術支援,可加入釘釘開發者群,或者關注微信公衆号
更多技術與解決方案介紹,請通路阿裡雲AIoT首頁
https://iot.aliyun.com/