本项目是基于RA4M2完成了环境监控网关设备,传感器HS3003采集温湿度,ISL29035采集环境光照强度,MQ5采集环境可燃气体浓度;温湿度,光照强度,可燃气体浓度通过wifi模块周期性上传到Onenet物联网平台;OLED提供显示功能,能够显示时间,温湿度以及wifi,蓝牙,云平台的连接状态;触摸按钮可以用来切换显示界面;该作品提供了台灯控制功能,可以通过蓝牙以及wifi控制台灯亮度以及开关。
本来上周(2023/2/26)已经完成了大部分功能,但是比赛延迟了一周,所以又完善了一些功能,完善的功能如下:
开发环境:windows10;
IDE:MDK5.34;
RASC:V4.0.0;
调试器:ST-LINK V2;
软件使用了FreeRTOS作为实时嵌入式系统,多个线程结合使用。
资源使用情况如下:
硬件架构图实现如下:
下面是控制逻辑:
下面介绍一些重点内容:
上电之后的显示界面,会在此界面停留一秒钟。
左上角显示wifi,蓝牙,云平台的连接状态,未连接时,闪烁;连接成功,常亮;
右上角显示温度,湿度信息,周期性切换显示;
正中间显示时间;
左下角显示日期,年和月日,周期性切换显示;
右下角显示星期。
主界面按下TS1切换到该界面;再次按下TS1退回主界面。
显示温度(摄氏度);
显示湿度(百分比);
显示环境光亮度(Lux);
显示可燃气体浓度(ppm)
蓝牙发送【Lamp:台灯亮度】就可以控制台灯了,例如发送【Lamp:80】,台灯就会按照80%的占空比的PWM驱动。
蓝牙发送命令给网关,网关识别成功并执行命令之后返回【Success】,识别失败返回【Fail】
阿里云物联网平台:
本来打算使用阿里云物联网平台的,但是在实际操作过程中,阿里云的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没有实验成功,还没找到问题原因。
地址划分:
目前实现功能如下:
目前先记录完成的功能。
上位机使用的是python开发,加载hex文件并通过串口下发,可以通过控制台查看发送以及反馈信息用于debug数据。
上位机会显示下载进度
下位机功能:
下位机上电之后LED1 100ms闪烁一次连续闪烁一秒钟,表示进入了bootloader,之后会检测到application是有效,如果有效就跳转到app,无效就等待上位机发送hex文件,hex文件接收完成之后就跳转到app。
如果上电的时候按下SW1或者SW2,表示不进入app,在app有效的情况下可以停留在bootloader中,持续按下SW1或者SW2直到LED1闪烁完成。
bootloader实现流程:
bug记录:
如下图,hex文件可以通过上位机下载到下位机的flash中,但是下载之后跳转到app中之后不能正常运行app的代码,我将下载到flash中的代码反读取过,并与原始hex文件做了对比,下载写入到falsh中的数据和原始hex文件是一致的,该问题还需后期排查。
本次比赛学习到了很多东西,对云平台的连接有了更深入的了解,同时对RA4M2单片机的内核以及控制有了充足的认知,RA4M2上手快速,对新手很友好,可以用来开发强大功能的设计作品。瑞萨官方提供的传感器使用起来也很方便,能够快速上手,但是DA16200使用起来有些问题,对于同一个命令,有时候执行正常,有时候却返回ERROR信息,CAN模块没有使用成功,可能是打开方式不对,时间关系没在深究了,后期在验证原因。
感谢电子发烧友以及瑞萨提供的机会。
全家福
演示视频放到了bilibili:
网关工程:
ONENET TCP透传Lua脚本:
Bootloader上位机以及工程:
(注:实现了上下位机通信以及下位机flash写入,但是从bootloader跳转到application没成功)
下面是参加RA4M2使用活动的分享:
【瑞萨RA4系列开发板体验】2. KEIL环境搭建+STLINK调试+FreeRTOS使用
【瑞萨RA4系列开发板体验】3. KEIL下UART实现printf与scanf重定向
【瑞萨RA4系列开发板体验】5. 硬件IIC驱动OLED显示汉字
【瑞萨RA4系列开发板体验】7. 用DAC输出正弦波以及余弦波
【瑞萨RA4系列开发板体验】8. 超声波测距模块在RA4M2上的应用
【瑞萨RA4系列开发板体验】9. 用两路DAC在示波器上显示一个爱心
RA4M2挑战赛分享:
【RA4M2设计挑战赛】2. 硬件IIC读取HS3003的温湿度数据
【RA4M2设计挑战赛】3. 硬件IIC读取ISL29035采集光照强度
更多回帖