基于VisionFive2采用mqtt协议对接OneNet云网关设计


目录:
# 1. 系统板介绍
# 2.  onenet云服务器
# 3. 整体结构
# 4. OneNet云添加设备和调试
# 5. VisionFive2应用
# 6. 代码中主要逻辑
# 7. 查看Log
# 8. 总结

正文:
1. 系统板介绍
VisionFive2(昉·星光 2) 搭载四核64位RV64GC ISA的芯片平台(SoC),工作频率最高可达1.5 GHz,集成IMG BXE-4-32,支持OpenCL 3.0,OpenGL ES 3.2和Vulkan 1.2。昉·星光 2提供2/4/8 GB LPDDR4 RAM选项,外设I/O接口丰富,包括M.2接口、eMMC插座、USB 3.0接口、40-pin GPIO header、千兆以太网接口、TF卡插槽等。
image.png
在此次项目中用到网口(用来连接网路,适用mqtt协议通讯到onenet云服务器),SD卡(系统刷写), USB口(用来拷贝应用程序),IO口(此次用了GPIO44 61 36 60 用来作为控制继电器IO)串口(用来输入命令,也可以通过hdmi接显示器上,打开板子命令行输入命令和查看日志)
image.png

2. OneNET云服务器
OneNET物联网开放平台是中国移动打造的面向产业互联和智慧生活应用的物联网PaaS平台,OneNET支持适配各种网络环境和协议类型,可实现各种传感器和智能硬件的快速接入,提供丰富的API和应用模板以支撑各类行业应用和智能硬件的开发,有效降低物联网应用开发和部署成本,满足物联网领域设备连接、智能化改造、协议适配、数据存储、数据安全以及大数据分析等等平台级服务需求。
image.png
3. 整体结构
    在整体架构中,围绕Onenet云服务器,可以通过发布者发布消息到服务器,多个订阅者来订阅信息。此次项目中开发板VisionFive2即发布消息,同时还订阅服务器下发设置,比如控制继电器开关的配置,从服务器上下发,VisionFive2收到云端的下发,则控制对用继电器开关

image.png
4. OneNet云添加设备和调试
  在OneNet云上我们需要先注册账号,随后登录进去后创建产品,创建设备。设备信息保留下来,用于代码中配置设备信息和密码登录云端,Onenet云密码使用官网的takon工具计算,在我们使用mqtt工具调试登录时会用到。
image.png
我们可以在产品开发页面创建物模型,随后添加设备,设备中则具有该模型
image.png
在设备属性中可以看到
image.png
设备调试页面可以手动点击下发设备,以及查看VisionFive2上报消息记录(onenet云调试中,需要先随便下发一条消息,不然一开始看不到上报数据信息)
image.png

5. VisionFive2应用
   我们使用的VisionFive2主板为RISC-V指令集,需要在虚拟机上安装riscv64-linux-gnu-gcc编译器,来搭建我们的交叉编译环境,在makefile中我们可以配置两个gcc编译方式。配置x86的gcc,方便我们电脑直接在电脑虚拟机上运行。最终编译使用riscv64-linux-gnu-gcc生成应用拷贝到VisionFive2主板运行,如下是riscv64编译器的安装信息
image.png
次项目中将应用通过u盘拷贝到了/root/app路径下,采用终端命令行控制启动,也可以在/etc/init.d下添加脚本开机启动,看个人需要吧
image.png
6. 代码中主要逻辑
  1>. 初始化中配置用到的gpio口输出状态,这里判断了一下是x86环境还是开发板,方便我们电脑上调试不会报错。因为x86上不存在这部分外设
image.png
2>. main函数中初始化设备后登录onenet云,主循环中会2s时间更新必要的临时变量数据,和周期性上报消息到云端
image.png
3>. 登录设备成功随后配置订阅消息
image.png
4>. 在init中注册回调函数,当订阅收到消息时用来解析数据
image.png
image.png
5>. 收到switch设置开关状态则控制继电器状态
image.png
7. 查看Log
如下是收到平台下发的switch状态打开时订阅到消息的log以及周期性上报消息log信息
image.png

8. 总结
  1> 此项目中可能过多的是服务器上设置和建立物模,代码部分采用mqtt标准协议,通讯消息为json格式,也有标准的cjson库用来创建json消息和解析比较方便。值得注意的是cjson输出两种格式问题:cJSON_Print(root)输出json格式;cJSON_PrintUnformatted(root);输出json字符串形式
2> 作为一名应用工程师,对驱动层了解还是甚少,目前开发板中烧录的标准的img文件,未尝试自主修改设备树注册新模块,昉·星光好在资料非常齐全,后面该板子对自己的学习和提升有很大帮助
3> 在习惯了做arm架构的开发项目,初次使用RISC-V,可能对用用上来说区别还是体现出来啥,总之了解还是甚少,学习空间很大