天天看點

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

1. 概括

本文檔介紹如何通過AliOS Things3.3快速連接配接到阿裡雲物聯網雲平台,并進行資料互動。

2. 雲端準備工作

2.1 注冊登陸

請先點選登陸

物聯網平台

(未注冊阿裡雲賬戶的使用者,請先完成賬戶注冊),按下面步驟一步步去打造。

2.2 建立産品

  • 注冊登入後,如下圖所示,前往管理控制台。
AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援
  • 點選公共執行個體,進行産品建立
AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援
  • 建立燈示範産品 點選建立産品,見下圖所示,這裡建立了一個名稱“HaaS_Light”産品。選擇标準品類/智能生活/電工照明/燈。 當然你也可以選擇其他品類活自定義品類,但是需要注意保持裝置端處理的資料類型與雲端定義一緻。
AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

2.3 建立裝置

在裝置清單中增加對應産品的裝置。本例程中建立了一個light01的裝置:

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

檢視裝置資訊,并複制三元組用于裝置端程式設計

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

建立後的裝置三元組資訊需要同步到裝置端的開發代碼段中,在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章節得到的三元組填入代碼如下區域:

  1. int demo_main(int argc, char *argv[])
  2. {
  3. ...
  4. /* TODO: 替換為自己裝置的三元組 */
  5. char *product_key = "此處請填入product_key";
  6. char *device_name = "此處請填入device_name";
  7. 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 裝置端關鍵日志

序列槽輸出:

  1. success to establish mbedtls connection, fd = 3(cost 0 bytes in total, max used 0 bytes)
  2. [104.526][LK-0313] MQTT connect success in 1908 ms
  3. AIOT_MQTTEVT_CONNECT

4.3 雲端狀态

在雲端裝置管理中,可以看到剛建立的裝置狀态由未激活變成了線上,說明此裝置已成功上雲。

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

5. 擴充開發

上面案例我們僅通過修改三元組就讓裝置連接配接到了物聯網平台。如何對裝置進行功能開發,将資料從雲端推送到裝置或從裝置推送到雲端呢?

5.1 雲端下發屬性

5.1.2 裝置端處理

設定雲端資料回調函數:

  1. /* 配置消息接收處理回調函數 */
  2. aiot_dm_setopt(dm_handle, AIOT_DMOPT_RECV_HANDLER, (void *)demo_dm_recv_handler);
  3. }

在使用者回調函數中捕獲AIOT_DMRECV_PROPERTY_SET事件,即雲端設定屬性的事件:

  1. /* 使用者資料接收處理回調函數 */
  2. static void demo_dm_recv_handler(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata)
  3. printf("demo_dm_recv_handler, type = %d\r\n", recv->type);
  4. switch (recv->type) {
  5. /* 屬性設定 */
  6. case AIOT_DMRECV_PROPERTY_SET: {
  7. printf("msg_id = %ld, params = %.*s\r\n",
  8. (unsigned long)recv->data.property_set.msg_id,
  9. recv->data.property_set.params_len,
  10. recv->data.property_set.params);
  11. /* TODO: 以下代碼示範如何對來自雲平台的屬性設定指令進行應答, 使用者可取消注釋檢視示範效果 */
  12. aiot_dm_msg_t msg;
  13. memset(&msg, 0, sizeof(aiot_dm_msg_t));
  14. msg.type = AIOT_DMMSG_PROPERTY_SET_REPLY;
  15. msg.data.property_set_reply.msg_id = recv->data.property_set.msg_id;
  16. msg.data.property_set_reply.code = 200;
  17. msg.data.property_set_reply.data = "{}";
  18. int32_t res = aiot_dm_send(dm_handle, &msg);
  19. if (res < 0) {
  20. printf("aiot_dm_send failed\r\n");
  21. break;

5.1.3 雲端下發

在裝置界面點選線上調試功能

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

跳轉到線上調試頁面,進行屬性調試

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

5.1.4 檢視裝置端日志

如下所示, {"LightSwitch":1}的指令已經下發到裝置端,開發者可以對此json字元串進行解析并用于裝置控制。

  1. [1606.833][LK-0309] pub: /sys/a1duSiRzIXc/light01/thing/service/property/set
  2. [LK-030A] < 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 | {"method":"thing
  3. [LK-030A] < 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 | .service.propert
  4. [LK-030A] < 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 31 35 39 | y.set","id":"159
  5. [LK-030A] < 30 36 35 31 30 33 31 22 2C 22 70 61 72 61 6D 73 | 0651031","params
  6. [LK-030A] < 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 22 | ":{"LightSwitch"
  7. [LK-030A] < 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 | :1},"version":"1
  8. [LK-030A] < 2E 30 2E 30 22 7D | .0.0"}
  9. [1606.835][LK-0A08] DM recv property set
  10. demo_dm_recv_handler, type = 1
  11. msg_id = 1590651031, params = {"LightSwitch":1}

5.2 裝置上報屬性

5.2.1 裝置端處理

為了示範友善,我們在主任務中定時上報屬性。在具體業務中,屬性上報可在其他線程中觸發。

  1. /* 主循環進入休眠 */
  2. while (1) {
  3. /* TODO: 以下代碼示範了簡單的屬性上報和事件上報, 使用者可取消注釋觀察示範效果 */
  4. demo_send_property_post(dm_handle, "{\"LightSwitch\": 0}");
  5. aos_msleep(10000);

5.2.2 雲端檢視上報資料

在監控運維-日志服務中,可以檢視裝置上報的所有資料。

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

另外。物模型中主要資料類型處了屬性外,還有服務和事件。具體詳情請參考

官網文檔

6. 總結

回顧一下整個流程,可概括為:

  • 雲端建立産品和裝置
  • 裝置端設定三元組
  • 裝置端設定接收回調函數捕獲下行資料
  • 裝置端調用屬性/事件上報接口發送上行資料

通過本案例可以發現,使用AliOS Things連接配接到阿裡雲物聯網平台并進行資料互動開發的流程非常簡單,趕緊試試吧。

開發者技術支援

如需更多技術支援,可加入釘釘開發者群,或者關注微信公衆号

AliOS Things 3.3.0:HaaS100快速上雲1. 概括2. 雲端準備工作3. 裝置端開發4. 調試5. 擴充開發6. 總結開發者技術支援

更多技術與解決方案介紹,請通路阿裡雲AIoT首頁

https://iot.aliyun.com/

繼續閱讀