1 2@page haas100_quick_start_cloud HaaS100快速上云 3 4**[更正文档](https://gitee.com/alios-things/documentation/edit/rel_3.3.0/quickstart/haas100_quick_start_cloud.md)**      **[贡献说明](https://help.aliyun.com/document_detail/302301.html)** 5 6 7# 1. 概括 8本文档介绍如何通过AliOS Things3.3快速连接到阿里云物联网云平台,并进行数据交互。 9 10# 2. 云端准备工作 11## 2.1 注册登陆 12请先点击登陆[物联网平台](https://www.aliyun.com/product/iot/iot_instc_public_cn)(未注册阿里云账户的用户,请先完成账户注册),按下面步骤一步步去打造。 13## 2.2 创建产品 14注册登入后,如下图所示,前往管理控制台。 15 16<div align=left display=flex> 17 <img src="https://img.alicdn.com/imgextra/i4/O1CN01BN7DMd1IibotD78f6_!!6000000000927-2-tps-1308-490.png" style="max-width:800px;" /> 18</div> 19 20点击公共实例,进行产品创建 21 22<div align=left display=flex> 23 <img src="https://img.alicdn.com/imgextra/i2/O1CN01AjRz9z294Sk2dsMXe_!!6000000008014-2-tps-1328-792.png" style="max-width:800px;" /> 24</div> 25 262、创建灯演示产品 27点击创建产品,见下图所示,这里创建了一个名称“HaaS_Light”产品。选择标准品类/智能生活/电工照明/灯。 28当然你也可以选择其他品类活自定义品类,但是需要注意保持设备端处理的数据类型与云端定义一致。 29 30<div align=left display=flex> 31 <img src="https://img.alicdn.com/imgextra/i4/O1CN01JHVICa1e8M1CVLuQ4_!!6000000003826-2-tps-1522-1768.png" style="max-width:800px;" /> 32</div> 33 34## 2.3 创建设备 35在设备列表中增加对应产品的设备。本例程中创建了一个light01的设备: 36 37<div align=left display=flex> 38 <img src="https://img.alicdn.com/imgextra/i2/O1CN01QipCrM1YxklnN7iIu_!!6000000003126-2-tps-2280-1276.png" style="max-width:800px;" /> 39</div> 40 41查看设备信息,并复制三元组用于设备端编程 42 43<div align=left display=flex> 44 <img src="https://img.alicdn.com/imgextra/i3/O1CN01uCSOTD29nLYXjgsRm_!!6000000008112-2-tps-2512-1204.png" style="max-width:800px;" /> 45</div> 46 47创建后的设备三元组信息需要同步到设备端的开发代码段中,在3章节会介绍。待设备端开发结束,就可以在物联网平台中参看设备在线状态。 48 49# 3. 设备端开发 50 51## 3.1 AliOS Things开发环境搭建 52开发环境的搭建请参考 @ref HaaS100_Quick_Start (搭建开发环境章节),其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。 53 54## 3.2 linksdk_demo代码下载 55物模型上云的代码下载请参考 @ref HaaS100_Quick_Start (创建工程章节),其中, 56> 选择解决方案: “linksdk_demo” 57> 选择开发板: HaaS100 58 59## 3.3 设备端代码修改 60 61演示用例路径为solutions/{your_project}/data_model_basic_demo.c 此演示用例演示Link SDK物模型单品上云的功能。 62注意:{your_project} 为studio中创建的工程名(基于linksdk_demo模板) 63 641.修改三元组,使用4.2.1章节得到的三元组填入代码如下区域: 65```sh 66int demo_main(int argc, char *argv[]) 67{ 68... 69 /* TODO: 替换为自己设备的三元组 */ 70 char *product_key = "此处请填入product_key"; 71 char *device_name = "此处请填入device_name"; 72 char *device_secret = "此处请填入device_secret"; 73... 74``` 75 76## 3.4 代码编译、烧录 77编译linksdk_demo的过程如下: 78 79-- 参考 @ref HaaS100_Quick_Start (3.1 编译工程章节),点击 ✅ 即可完成编译固件。 80 81-- 参考 @ref HaaS100_Quick_Start (3.2 烧录镜像章节),点击 "⚡️" 即可完成烧录固件。 82 83烧写步骤可以参考 @ref HaaS100_Quick_Start。 84# 4. 调试 85## 4.1 联网 86设备上电后,连接串口,CLI命令行输入联网命令: 87``` 88netmgr -t wifi -c ssid password 89``` 90注意:ssid和password需要替换成自己的路由的ssid及密码。 91 92 93连上路由器后会触发Link SDK主任务运行,并自动连接到阿里云物联网平台。 94## 4.2 设备端关键日志 95串口输出: 96``` 97success to establish mbedtls connection, fd = 3(cost 0 bytes in total, max used 0 bytes) 98[104.526][LK-0313] MQTT connect success in 1908 ms 99AIOT_MQTTEVT_CONNECT 100``` 101## 4.3 云端状态 102在云端设备管理中,可以看到刚创建的设备状态由未激活变成了在线,说明此设备已成功上云。 103<div align=left display=flex> 104 <img src="https://img.alicdn.com/imgextra/i4/O1CN01DLB3xo1sPfbw46myX_!!6000000005759-2-tps-1234-482.png" style="max-width:800px;" /> 105</div> 106 107# 5. 扩展开发 108上面案例我们仅通过修改三元组就让设备连接到了物联网平台。如何对设备进行功能开发,将数据从云端推送到设备或从设备推送到云端呢? 109## 5.1 云端下发属性 110### 5.1.2 设备端处理 111设置云端数据回调函数: 112```c 113int demo_main(int argc, char *argv[]) 114{ 115 ... 116 /* 配置消息接收处理回调函数 */ 117 aiot_dm_setopt(dm_handle, AIOT_DMOPT_RECV_HANDLER, (void *)demo_dm_recv_handler); 118 ... 119} 120 121``` 122在用户回调函数中捕获AIOT_DMRECV_PROPERTY_SET事件,即云端设置属性的事件: 123```c 124 /* 用户数据接收处理回调函数 */ 125static void demo_dm_recv_handler(void *dm_handle, const aiot_dm_recv_t *recv, void *userdata) 126{ 127 printf("demo_dm_recv_handler, type = %d\r\n", recv->type); 128 129 switch (recv->type) { 130 /* 属性设置 */ 131 case AIOT_DMRECV_PROPERTY_SET: { 132 printf("msg_id = %ld, params = %.*s\r\n", 133 (unsigned long)recv->data.property_set.msg_id, 134 recv->data.property_set.params_len, 135 recv->data.property_set.params); 136 137 /* TODO: 以下代码演示如何对来自云平台的属性设置指令进行应答, 用户可取消注释查看演示效果 */ 138 { 139 aiot_dm_msg_t msg; 140 141 memset(&msg, 0, sizeof(aiot_dm_msg_t)); 142 msg.type = AIOT_DMMSG_PROPERTY_SET_REPLY; 143 msg.data.property_set_reply.msg_id = recv->data.property_set.msg_id; 144 msg.data.property_set_reply.code = 200; 145 msg.data.property_set_reply.data = "{}"; 146 int32_t res = aiot_dm_send(dm_handle, &msg); 147 if (res < 0) { 148 printf("aiot_dm_send failed\r\n"); 149 } 150 } 151 } 152 break; 153 ... 154 } 155``` 156 157### 5.1.3 云端下发 158在设备界面点击在线调试功能 159 160<div align=left display=flex> 161 <img src="https://img.alicdn.com/imgextra/i4/O1CN01cy33YO1Hnoi7A8vWV_!!6000000000803-2-tps-2176-536.png" style="max-width:800px;" /> 162</div> 163 164跳转到在线调试页面,进行属性调试 165 166<div align=left display=flex> 167 <img src="https://img.alicdn.com/imgextra/i2/O1CN01CWWBIG1dzC5unT1R7_!!6000000003806-2-tps-1934-976.png" style="max-width:800px;" /> 168</div> 169 170### 5.1.4 查看设备端日志 171如下所示, {"LightSwitch":1}的命令已经下发到设备端,开发者可以对此json字符串进行解析并用于设备控制。 172```c 173[1606.833][LK-0309] pub: /sys/a1duSiRzIXc/light01/thing/service/property/set 174 175[LK-030A] < 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 | {"method":"thing 176[LK-030A] < 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 | .service.propert 177[LK-030A] < 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 31 35 39 | y.set","id":"159 178[LK-030A] < 30 36 35 31 30 33 31 22 2C 22 70 61 72 61 6D 73 | 0651031","params 179[LK-030A] < 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 22 | ":{"LightSwitch" 180[LK-030A] < 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 | :1},"version":"1 181[LK-030A] < 2E 30 2E 30 22 7D | .0.0"} 182 183[1606.835][LK-0A08] DM recv property set 184demo_dm_recv_handler, type = 1 185msg_id = 1590651031, params = {"LightSwitch":1} 186 187 188``` 189 190 191## 5.2 设备上报属性 192### 5.2.1 设备端处理 193为了演示方便,我们在主任务中定时上报属性。在具体业务中,属性上报可在其他线程中触发。 194```c 195 /* 主循环进入休眠 */ 196 while (1) { 197 /* TODO: 以下代码演示了简单的属性上报和事件上报, 用户可取消注释观察演示效果 */ 198 demo_send_property_post(dm_handle, "{\"LightSwitch\": 0}"); 199 aos_msleep(10000); 200 } 201``` 202### 5.2.2 云端查看上报数据 203在监控运维-日志服务中,可以查看设备上报的所有数据。 204 205<div align=left display=flex> 206 <img src="https://img.alicdn.com/imgextra/i3/O1CN013cTaUO1q5rFSx3SZC_!!6000000005445-2-tps-2648-1526.png" style="max-width:800px;" /> 207</div> 208 209另外。物模型中主要数据类型处了属性外,还有服务和事件。具体详情请参考[官网文档](https://help.aliyun.com/document_detail/73727.html?spm=5176.11065259.1996646101.searchclickresult.40dd49deCWMVaW)。 210# 6. 总结 211回顾一下整个流程,可概括为: 212- 云端创建产品和设备 213- 设备端设置三元组 214- 设备端设置接收回调函数捕获下行数据 215- 设备端调用属性/事件上报接口发送上行数据 216 217通过本案例可以发现,使用AliOS Things连接到阿里云物联网平台并进行数据交互开发的流程非常简单,赶紧试试吧。 218