文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 15:38

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。

采用Onenet平台:多协议接入-》EDP,通过edp协议完成控制命令的下发(下发开/关灯命令)、数据流信息的上传(灯的开/关状态)等通信流程。

EDP (Enhanced Device Protocol增强设备协议)是OneNET平台根据物联网特点专门定制的完全公开的基于TCP的协议,可以广泛应用到家居、交通、物流、能源以及其他行业应用中。

整体流程大致如下:

Onenet平台创建EDP产品、设备、数据流、开关灯应用;

Hi3861开发板连接到EDP设备;

通过Onenet EDP应用下发控制命令(开/关灯);

开发板解析命令做出对应的动作(开/关灯),并且上传灯的状态值,更新数据流信息;

Onenet应用读取数据流的状态值,更新展示;


参考官方文档:https://open.iot.10086.cn/doc/multiprotocol/

Onenet平台EDP配置

进入onenet平台控制台https://open.iot.10086.cn/console/,选择多协议接入-》EDP;

 2.添加产品led、添加设备device1;


添加数据流,因为我使用的三色灯扩展板,创建3条数据流:redled、greenled、yelloled;


应用管理-》添加应用led;

 5.编辑应用led,添加红绿黄三原色灯的开关,调整属性,红灯的配置如下,EDP命令内容“redled:{V}”(其余以此类推);

Hi3861开发板准备

移植Onenet edp sdk,官网链接: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)修改宏定义#define BUFFER_SIZE (0x01<<20)为#define BUFFER_SIZE 1024;本次实验中包字节数较小,默认申请1MB,运行时报错内存溢出;

5)自定义实现assert宏定义,因为编译时报错未找到原因就先自定义实现替代;

6)还有很多定义未使用的变量,类似这种修改“valuestring = valuestring; remain_len = remain_len;”即可;

根据sdk中的示例Main.c,编写edp测试源码(附件压缩包中edp_test.c是测试源码);

1)建立tcp连接,平台EDP监听地址ip:183.230.40.39,port:876;

2)与平台建立EDP连接,可以调用函数EdpPacket* PacketConnect1(const char* devid, const char* auth_key),传入设备ID和APIKey;

  1. char src_dev[16] = "657055845"
  2.   char src_api_key[64] = "NO5yPB4JzAypKLfXzLx6V0aUxg4="
  3.  
  4.   EdpPacket* send_pkg; 
  5.    
  6.   send_pkg = PacketConnect1(src_dev, src_api_key);   
  7.    
  8.   int ret = DoSend(sockfd, (const char*)send_pkg->_data, send_pkg->_write_pos); 
  9.   if(ret <= 0) 
  10.   {    
  11.       printf("Dosend failed.\n"); 
  12.       return NULL
  13.   } 
  14.    
  15.   DeleteBuffer(&send_pkg); 

  

3)接收命令请求数据,解析命令,执行开关灯动作;例如:接收到字符串“redled:1”代表红灯开,“redled:0”代表红灯关;

  1. * 解包 由设备云到设备的EDP协议包, 命令请求消息 */ 
  2.  
  3. UnpackCmdReq(pkg, &cmdid, &cmdid_len, &cmd_req, &cmd_req_len); 
  4.  
  5. ...... 
  6.  
  7.  
  8.  
  9. if(strcmp(cmd_str, "redled") == 0) 
  10.  
  11. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, cmd_val); 
  12.  
  13. else if(strcmp(cmd_str, "greenled") == 0) 
  14.  
  15. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_11, cmd_val); 
  16.  
  17. else if(strcmp(cmd_str, "yellowled") == 0) 
  18.  
  19. GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_12, cmd_val); 

 4)调用EdpPacket* PacketSavedataSimpleString(const char* dst_devid, const char* input, uint16 msg_id),组装以分号分隔的简单字符串形式,上传数据到平台,用来更新数据流(灯的开/关状态);例如:组装字符串“,;redled,1”代表当前红灯亮,“,;redled,0”代表红灯灭;

  1.  
  2.  
  3. send_pkg = PacketSavedataSimpleString(NULL, cmd_resp, 0); //没有转发设备,第一个参数为NULL 
  4.  
  5. DoSend(sockfd, (const char*)send_pkg->_data, send_pkg->_write_pos); 
  6.  
  7. DeleteBuffer(&send_pkg); 

 5)采用AT命令的方式触发edp测试,增加命令“AT+EDPTEST”,方便测试;

  1. const at_cmd_func g_at_edp_func_tbl[] = { 
  2.  
  3. {"+EDPTEST", 8, HI_NULL, HI_NULL, HI_NULL, (at_call_back_func)at_exe_edp_test_cmd}, 
  4.  
  5. }; 
  6.  
  7. void AtEdpExampleEntry(void) 
  8.  
  9.  
  10. hi_at_register_cmd(g_at_edp_func_tbl, sizeof(g_at_edp_func_tbl)/sizeof(g_at_edp_func_tbl[0])); 
  11.  

 总体测试流程

编译固件,启动开发板,首先是连接wifi,保证网络畅通;

执行AT+EDPTEST命令,连接Onenet平台,连接成功设备显示在线;


打开应用led,对红绿黄三灯进行开关,能够看到开发板三原色灯正确亮灭;

串口的打印信息如下:wifi连接成功 -> AT+EDPTEST -> 接入平台成功 -> 解析命令,控制灯亮灭 -> 上传状态信息,更新设备数据流;


5)手机操作更加便捷,应用界面如下;


以上就是分享的全部内容,谢谢观看!

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com/

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯