本项目是基于RA4M2完成了环境监控网关设备,传感器HS3003采集温湿度,ISL29035采集环境光照强度,MQ5采集环境可燃气体浓度;温湿度,光照强度,可燃气体浓度通过wifi模块周期性上传到Onenet物联网平台;OLED提供显示功能,能够显示时间,温湿度以及wifi,蓝牙,云平台的连接状态;触摸按钮可以用来切换显示界面;该作品提供了台灯控制功能,可以通过蓝牙以及wifi控制台灯亮度以及开关。
开发环境:windows10; IDE:MDK5.34; RASC:V4.0.0; 调试器:ST-LINK V2;
软件使用了FreeRTOS作为实时嵌入式系统,多个线程结合使用。
资源使用情况如下:
硬件架构图实现如下:
下面是控制逻辑:
8. 按下SW2之后,之后一直按着触摸按钮TS21,LED1以及台灯会由暗到明增加亮度,直到最亮100%;
9. 按下SW1之后,之后一直按着触摸按钮TS1,LED1以及台灯会由明到暗减小亮度,直到不亮;
10. 蓝牙连接之后,OLED主界面的蓝牙图标不会再闪烁,连接断开或者未连接,主界面的蓝牙图标闪烁;
11. wifi连接到路由器之后,主界面的WIFI图标不会再闪烁,连接断开或者未连接,主界面wifi图标闪烁;
12. 成功连接到onenet云平台之后,主界面的IoT图标不会再闪烁,连接断开或者未连接,主界面IoT图标闪烁;
13. 当连接了OneNet之后,oneNet下发台灯亮度命令,台灯亮度会变化;
14. 蓝牙连接之后,蓝牙发送台灯亮度控制命令,台灯亮度会变化。
下面介绍一些重点内容:
上电之后的显示界面,会在此界面停留一秒钟。
主界面按下TS1切换到该界面;再次按下TS1退回主界面。
阿里云物联网平台:
本来打算使用阿里云物联网平台的,但是在实际操作过程中,阿里云的Client ID很长,而且有','在ClientID中,DA16200会将逗号识别为一个参数,会一直反馈ERROR -3,表示参数过多,加了转义字符以及双引号都一直解决不了这个问题,遂放弃。
腾讯云物联网平台:
与阿里云有一样的问题,但是不是clientId,而是其他参数,会导致返回ERROR -4的故障,表示参数错误,一直解决不了,遂放弃。
onenet中移物联网平台:
onenet提供了多种协议连接方式,本来想使用MQTT协议的,onenet的MQTT参数比较简单,DA16200配置MQTT的相关参数是没有问题的,但是设置完成之后还是不能正常通信,一直打不开客户端,折腾了很长时按都打不开客户端,解决不了,遂放弃。
最后本来都打算放弃云平台的连接了,使用本地连接,但是看到了onenet还有一个tcp透传,想着试一下,结果还成功了,所以本项目使用了TCP透传与onenet平台连接。
云平台的连接过程还是一波三折,TCP透传需要使用lua脚本来解析单片机发送给云平台的数据,但是本人从来没有使用过lua脚本,所以这个解析脚本尝试了很久才成功,主要是将接收到设备的数据解析为想要的数据由云平台显示。
我设计了一个数据显示的格式:
T+$温度+H+$湿度+L+$光照强度+M+$可燃气体浓度+P+$台灯亮度
举例,如果上传的温度为35.2度,湿度为56.2%,光照强度为123Lux,可燃气体浓度3000ppm,台灯亮度为65%,为则数据格式应该为:
T35.2H56.2L123M3000P65
OneNet收到上述数据之后会进行解析之后,分别显示在不同的数据流中。
网关没5s发送一次数据给OneNet平台。
云平台收到了数据之后会反馈一个字符串"received",设备(RA4M2)可以由此知道数据有没有发送成功。
Lua脚本就会解析这个格式的数据,然后分析显示到Temp,Humi,Lux的数据流中。
下面是设备加载的Lua脚本:
下面是云平台接收的数据:
下面是调试信息,通过串口打印,可以看到发送给oneNet的数据以及OneNet反馈的数据:
下面是云平台下发的控制命令:
命令格式是【Lamp:台灯亮度】,比如【Lamp:80】表示设置台灯亮度为80%
Bootloader使用串口实现,目的是通过板载USB串口UART9来实现软件的在线更新,扩展目标是实现WIFI更新固件(时间关系,未实现),目前实现了上位机软件,支持hex数据的下发,网关RA4M2 bootloader实现了对收到的hex数据接收并解析,并将收到的数据写到对应的flash地址,但是从bootloader跳转到用户app没有实验成功,还没找到问题原因。
用户应用程序的地址应该从0x20000开始,bootloader使用的地址区域为0x0~0x1FFFF。
目前实现功能如下:
目前先记录完成的功能。
上位机使用的是python开发,加载hex文件并通过串口下发。
下位机功能: 下位机上电之后LED会闪烁一秒钟,表示进入了bootloader,如果检测到application是有效的就跳转到app,无效就等待上位机发送hex文件,hex文件接收到了之后就跳转到app。
如下图,我已经将下载到flash中的代码反读取过了,与下载的代码一致。
在已经存在app的情况下,如果想进入bootloader,则在上电的时候按下并保持SW1或者SW2直到LED1闪烁完成,则不会进入用户程序,停留在bootloader,可以再次下载了。
本次比赛学习到了很多东西,对云平台的连接有了更深入的了解,同时对RA4M2单片机的内核以及控制有了充足的认知,RA4M2上手快速,对新手很友好,可以用来开发强大功能的设计作品。瑞萨官方提供的传感器使用起来也很方便,能够快速上手,但是DA16200使用起来有些问题,对于同一个命令,有时候执行正常,有时候却返回ERROR信息,CAN模块没有使用成功,可能是打开方式不对,时间关系没在深究了,后期在验证原因。
感谢电子发烧友以及瑞萨提供的机会。
全家福
演示视频放到了bilibili:https://www.bilibili.com/video/BV1LT411e71K/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。