开发者学堂课程【AliOS Things 物联网开发教程:AliOS Things 物联网开发上手】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/835/detail/13990
AliOS Things 物联网开发上手
内容介绍:
一、设备上云&控制 LED 灯
一、设备上云&控制 LED 灯
1、设备上云的原理
如下图所示:最左侧是设备端,在本次实验当中,使用的是 Haas100,该设备通过wifi连接到物联网平台,然后将 Haas100板上的数据传送到物联网平台上,物联网平台也可以发送控制命令给 Haas100。如控制 Haas100上 LED 灯的亮灭。
2、实战环节
通过动手实际操作搭建设备上云并且控制 led 灯的环境。
(1)思路
首先打开 VS Code,查看项目的帮助文档,点击左侧“案例开发”中的 Wi-Fi 设备连接阿里云 IoT,打开 Wi-Fi 设备连接阿里云示例 linksdk_demo,它是最简单的单品上云的案例。该案例中用到了 Haas100,它需要自行接通电源和上网用的 wifi 天线,插上 USB 连接到计算机以便下载程序。
登录物联网平台,在物联网平台创建公共实例,创建产品,选择商品品类为“灯”,节点类型选择直连,联网方式选择 Wi-Fi 联网。在设备管理中添加灯设备,获取三元组信息,即指产品的 key、设备的名字和设备的密钥,将其填到通过Haas studio下载的代码中,更改配置信息,进行代码下载和调试。此时,在云端就可以看到设备显示在线。该过程的是设备上游的过程。
还可以在代码中添加一些 LED 灯的控制程序,可以接收从云端下发的 LED 灯的控制命令,就可以在云端通过在线调试的方式发送 led 灯的控制指令,进而在设备端捕获到信息,进行灯亮灭开关的控制。
(2)实际操作
①设备上云
登录物联网平台,进入控制台,点击公共实例,创建产品,并定义其名称为Haas100_led,选择品类,输入关键字“灯”,找到“智能生活/电工照明/灯”,该设备为直联设备(设备直接通过 Wi-Fi 连到云端的 Wi-Fi 连接方式),其余配置保持默认,点击确认,产品创建完成。
点击“添加设备”,定义名称为 hass100_led_001,点击确认查看设备信息。点击前往查看,即可在设备信息的页面读取设备的相关信息。目前所关注的是设备的三元组信息,点击查看即可生成该信息,并将该信息拷贝到程序中。
打开我们的 VS Code 创建项目,选定工作区路径,硬件类型选择 haas100,解决方案选择 Wi-Fi 设备连接阿里云实例,点击“立即创建”,确认工程信息后,即可下载相关的代码,其中包含了 linkskd_demo 的代码(用来连接阿里云物联网平台的 sdk)。
代码下载完成后,工程项目被自动打开,新的项目目录自动打开,其中包含有 sdk的相关代码。
在代码中找到设备三元组的配置的位置,替换为实际设备新加三元组信息,如下:
/*TODO:替换为自己设备的三元组*/
char *product_key = "alobEzEWHMU";
char *device_name = "haas100 led_001";
char *device_secret ="3d97ad587749ec14206a5be8da517e93;
点击编译按钮,一键编译,项目编译成功后,将编译好的文件下载到 haas100。
点击烧录按钮,选择对应的串口号,开始烧录。烧录完成之后,设备会重新启动。
设备开机之后,通过命令给设备配置 Wi-Fi 的账号密码,使设备连接到路由器,打开串口终端,通过查看文档获取 wifi 的配网命令,输入名字密码,开始联网。最终显示联网成功,且收到了云端回复的信息。
查看物联网平台的设备信息,可以看到 haas100_led_001 已经处于在线状态,说明设备成功上云,与云端物联网平台连接成功。
②led 灯的控制
即扩展的开发,该部分实验需要修改代码,接收云端下发的属性配置信息相关的代码。以下为相关代码:
#include "led.h"
#include"CISONh"
static void set led switch(char*str)
{
cJSON *strCommand,*strLed;
strCommand=cJSON_Parse(str);
if(!strCommand) {
printf ("json parse error\n");
return;
}
strLed=cJSON_GetObjectItem(strCommand,"LedSwitch");
if(strLed=NULL | | strLed→type !=cJSON_Number) {
printf("json get error\nV);
return;
}
if (strLed->valueint==1){
led_switch(1, LED_ON);
}else (
led switch(1,LED_OFF);
}
cJSON_Delete(strCommand);
}
复制该段代码并修改格式,查询文档可知该段代码应在回用户回调函数中捕获AIOT_DMRECV_PROPERTY_SET 属性设置事件中进行 Led 灯的控制。
代码解析:
收到了命令之后对其进行解析,如果当中包含"LedSwitch "字样,则要根据设置的LedSwitch 的值来控制对应的 Led 灯的亮灭。
在 AIOT_DMRECV_PROPERTY_SET 下面加入刚设置的函数(有自动提示功能,代码自动补全):
case AIOT_DMRECV_PROPERTY_SET:{
printf("msg_id = $id, parans = $.*s\r\n",
(unsigned long)recv->data.property_set.msg_id,
recv->data.property_set.params_len,
recv->data.property_set.params);
set_led_switch(recv->data.property_set.params);
将接收到的数据信息作为参数传入进行解析,并将后面注释的代码恢复,作为给服务端命令的应答。
代码修改结束,点击编译按钮重新编译,编译结束后将修改的代码编译的结果下载到 haas100中,点击烧录按钮,烧录结束后设备自动启动。
打开串口终端,配置 wifi 的账号密码,当记录了 wifi 账号和密码之后,刷新查看设备是否在线,若设备显示在线的,说明上云成功。
接下来,打开阿里云 IoT 平台,点击“监控运维”,点击“在线调试”,选择刚创建的两个设备,可以看到其中“主灯开关”的配置,“参数”选择开启,然后点击“设置”,可以看到设备的灯处于点亮状态。通过 log 也可以其收到的信息,点击“设置”可以把灯关闭。由此,即可实现在线控制 Led 灯的功能。
由以上案例可以发现 Haas Studio 十分方便地下载现有的项目,还可以在基于项目的基础上做出修改,包括编译代码、下载代码以及调试。总结起来,设备上云的过程共分为三大步骤:第一步,在云端的配置,在该步骤中我们在阿里云物联网平台上面创建了设备,并记录了设备的三元组信息;第二步,在设备端的下载代码,并把三元组信息进行配置,并联网;第三步,在云端实现 led 的控制。