当前位置: 首页 > 科技观察

2020征稿-鸿蒙开发板Onenet平台+开发板开关灯控

时间:2023-03-14 15:08:58 科技观察

更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zzOneNETisPaaSIoT开放中国移动打造的平台。该平台可以帮助开发者轻松实现设备接入和设备连接,快速完成产品开发和部署,为智能硬件和智能家居产品提供完整的物联网解决方案。使用Onenet平台:多协议接入-》EDP,通过edp协议完成下发控制命令(发送灯的开/关命令)、上传数据流信息(灯的开/关状态)等通信过程。EDP(EnhancedDeviceProtocol)是OneNET平台根据物联网特点特别定制的基于TCP的全开放协议,可广泛应用于家居、交通、物流、能源等行业应用。整体流程大致如下:1、在Onenet平台上创建EDP产品、设备、数据流、开关灯应用;2、Hi3861开发板连接EDP设备;3.通过OnenetEDP应用发出控制命令(开/关灯);4、开发板解析指令做出相应动作(开/关灯),并上传灯的状态值,更新数据流信息;5.Onenet应用程序读取数据流的状态值并更新显示;参考官方文档:https://open.iot.10086.cn/doc/multiprotocol/Onenet平台EDP配置1.进入onenet平台控制台https://open.iot.10086.cn/console/,选择multi-协议接入-》EDP;2.添加产品led,添加设备device1;3.添加数据流,因为我用的三色灯扩展板创建了3个数据流:redled,greenled,yelloled;4.应用管理-》添加应用引导;5、编辑应用led,添加红绿黄三原色灯的开关,调整属性,红灯的配置如下,EDP命令“redled:{V}”的内容(其余可以类推);Hi3861开发板准备1.移植Onenetedpsdk,官网链接:https://open.iot.10086.cn/doc/multiprotocol/book/develop/edp/device/doc-tool.html;移植注意事项(附件压缩包中的edp_c为我移植的压缩包):1)添加宏定义:_LINUX;2)可以复用源码自带的cJSON,在//third_party/edp_c/BUILD.gn中包含:"//third_party/cJSON/";3)强制for循环中的变量是有符号数。for循环中,无符号的32位整型数据不能作为判断条件;4)修改宏定义#defineBUFFER_SIZE(0x01<<20)为#defineBUFFER_SIZE1024;段数少,默认应用1MB,运行时报错内存溢出;5)自定义assert宏定义,因为编译时没有发现错误,会替换为自定义实现;6)定义了很多未使用的变量,类似这样修改“valuestring=valuestring;remain_len=remain_len;”即可;2、根据sdk中的例子Main.c,编写edp测试源码(附件压缩包中的edp_test.c为测试源码);1)建立tcp连接,平台EDP??监听地址ip:183.230.40.39,端口:876;2)与平台建立EDP连接,可调用函数EdpPacket*PacketConnect1(constchar*devid,constchar*auth_key),传入设备IDandAPIKey;charsrc_dev[16]="657055845";charsrc_api_key[64]="NO5yPB4JzAypKLfXzLx6V0aUxg4=";EdpPacket*send_pkg;/*使用sdk中EdpKit.h中的PacketConnect1方法封装连接协议*/send_pkg=PacketConnect1(src_dev,src_api_key);/*向设备云发送连接请求*/intret=DoSend(sockfd,(constchar*)send_pkg->_data,send_pkg->_write_pos);if(ret<=0){printf("Dosendfailed.\n");returnNULL;}/*send_pkg使用后必须删除,否则会造成内存丢失Leak*/DeleteBuffer(&send_pkg);3)接收命令请求数据,parse命令,执行开关灯动作;例如:接收字符串“redled:1”表示红灯亮,“redled:0”表示红灯灭;*从设备云端解压EDP协议包到设备,命令请求报文*/UnpackCmdReq(pkg,&cmdid,&cmdid_len,&cmd_req,&cmd_req_len);....../*根据解析出的命令,执行灯亮/关闭GPIO_10:REDGPIO_11:GREENGPIO_12:YELLOW*/if(strcmp(cmd_str,"redled")==0)GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10,cmd_val);elseif(strcmp(cmd_str,"greenled")==0)GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11,cmd_val);elseif(strcmp(cmd_str,"yellowled")==0)GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12,cmd_val);4)调用EdpPacket*PacketSavedataSimpleString(constchar*dst_devid,constchar*input,uint16msg_id),组装一个简单的字符串,用分号分隔,上传数据到平台,用它来更新数据流(灯的开/关状态);例如:assemble字符串“,;redled,1”表示当前红灯亮,“,;redled,0”表示红灯灭;/*将设备端的EDP协议包打包到设备云端,并存储数据(以分号分隔的简单字符串形式)*/send_pkg=PacketSavedataSimpleString(NULL,cmd_resp,0);//没有转发设备,第一个参数是NULLDoSend(sockfd,(constchar*)send_pkg->_data,send_pkg->_write_pos);DeleteBuffer(&send_pkg);5)使用AT指令触发edp测试,添加指令“AT+EDPTEST”方便测试;(void){hi_at_register_cmd(g_at_edp_func_tbl,sizeof(g_at_edp_func_tbl)/sizeof(g_at_edp_func_tbl[0]));}总体测试流程1.编译固件,启动开发板,先连接wifi,确保验证网络是否畅通;2、执行AT+EDPTEST指令,连接Onenet平台,连接成功的设备会显示在线;3、打开应用LED,切换红绿黄灯,可以看到开发板三基色灯正确亮灭;4、串口打印信息如下:wifi连接成功->AT+EDPTEST->成功接入平台->解析命令,控制灯亮灭->上传状态信息,更新设备数据流;5)手机端操作更方便,应用界面如下;以上是感谢大家收看分享的所有内容!更多信息请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz