1 Star 0 Fork 1

hehung/RA4M2_Gateway

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

目录说明

  • Onenet TCP透传Lua解析脚本: ONENET平台TCP透传的数据解析脚本,结合工程使用
  • bootloader上位机以及工程:bootloader的代码以及上位机(存在bug,bootloader跳转application存在问题)
  • images:readme.md文件中所需图片
  • ra4m2_gateway_prj:RA4M2环境检测网关工程

项目简介

本项目是基于RA4M2完成了环境监控网关设备,传感器HS3003采集温湿度,ISL29035采集环境光照强度,MQ5采集环境可燃气体浓度;温湿度,光照强度,可燃气体浓度通过wifi模块周期性上传到Onenet物联网平台;OLED提供显示功能,能够显示时间,温湿度以及wifi,蓝牙,云平台的连接状态;触摸按钮可以用来切换显示界面;该作品提供了台灯控制功能,可以通过蓝牙以及wifi控制台灯亮度以及开关。

项目说明

使用模块以及设备

调试环境

开发环境:windows10; IDE:MDK5.34; RASC:V4.0.0; 调试器:ST-LINK V2;

外扩模块

  • OLED: 显示信息
  • HS3003:温湿度信息获取
  • ISL29035:光照度模块
  • DA14531:蓝牙模块 - 蓝牙控制台灯亮度
  • DS16200:WIFI模块 - 同步本地时间以及连接onenet物联网平台,上传环境数据以及控制台灯亮灭
  • MQ5:可燃气体浓度传感器
  • L298电机驱动模块:用来控制台灯,让台灯和设备的供电电源隔开

板载资料使用

  • LED3: GPIO驱动,周期性闪烁
  • LED2:PWM3驱动,项目中未使用,用于调试
  • LED1(P405): PWM1驱动,连接台灯引脚,可以通过触摸按钮TS2以及实体按钮SW1和SW2控制亮度,同时可以通过物联网以及蓝牙控控制
  • TS1:触摸按钮,控制OLED切换显示界面
  • TS2:触摸按钮,用于控制台灯的亮度
  • SW1:实体按钮,用于确定台灯亮度减小,按下TS2之后台灯光亮度减弱,直到0
  • SW2:实体按钮,用于确定台灯亮度增大,按下TS2之后台灯亮度增大,直到100%
  • RTC:实时时钟,WIFI模块获取的网络时间会同步到RTC
  • 定时器:用来监控WIFI模块AT命令超时以及控制LED1周期性闪烁
  • 串口9:与电脑通信串口,打印调试信息
  • 串口0:串口用于wifi AT命令使用
  • 串口4:串口蓝牙透传通信
  • 外部中断(P008):用来监控蓝牙模块连接状态
  • ADC0 CH0(P000): 采集MQ5可燃气体传感器的浓度

软件资料使用

软件使用了FreeRTOS作为实时嵌入式系统,多个线程结合使用。

  • os_init_thread:初始化线程,初始化板载资源以及公共资源,初始化完成之后关闭该线程
  • key_thread:实体按钮以及触摸按钮周期性采样任务
  • display_thread:显示控制任务,用来控制OLED屏显示
  • bt_thread:蓝牙控制线程,未使用
  • wifi_thread:wifi控制线程,用来控制单片机与wifi模块的AT命令通信,以及发送数据到OneNet,同时从OneNet接收命令
  • sensor_thread:传感器线程,用来周期性采集HS3003,ISL29035以及MQ5采样数据
  • mutex_sci3_i2c_Mutex: 互斥量,用来解决同一个IIC总线上两个设备同时访问IIC总线时的冲突问题
  • wifi_mutex_Mutex:互斥量,用来解决wifi模块通信期间的冲突
  • event_group_0_Event_Group:事件组,用来处理任务键的同步,即所有任务都要等待初始化任务完成初始化才会开始运行

资源使用情况如下:

硬件架构图

硬件架构图实现如下:

软件实现逻辑

  1. 上电之后,做系统初始化,在初始化线程中作外设模块以及内部设备的初始化,初始化完成之后各个线程开始运行,初始化线程终止;
  2. 按键线程启动,周期性检测按键以及触摸按钮按下状态;
  3. 蓝牙线程启动,检测蓝牙命令并做出响应,主要是检测台灯控制命令;
  4. wifi控制线程启动,初始化wifi模块 -> 发送控制命令 -> 连接路由器 -> 获取网络时间并更新到RTC -> 获取传感器数据并传递给Onenet物联网平台 -> 接收物联网平台发送的数据,并解析控制台灯亮度;
  5. 显示线程启动:显示启动界面 -> 1s后进入主界面,OLED显示wifi连接状态,蓝牙连接状态,IOT云平台连接状态,温湿度信息,时间,日期,星期等信息 -> 此时按下TS1进入传感器数据显示界面 -> 显示温湿度,可燃气体浓度,环境光强度等信息 -> 再次按下TS1退回主界面;
  6. 传感器线程启动,周期性采集各个传感器的数据;
  7. 上述步骤2~6同步进行;

下面是控制逻辑:
8. 按下SW2之后,之后一直按着触摸按钮TS21,LED1以及台灯会由暗到明增加亮度,直到最亮100%; 9. 按下SW1之后,之后一直按着触摸按钮TS1,LED1以及台灯会由明到暗减小亮度,直到不亮; 10. 蓝牙连接之后,OLED主界面的蓝牙图标不会再闪烁,连接断开或者未连接,主界面的蓝牙图标闪烁; 11. wifi连接到路由器之后,主界面的WIFI图标不会再闪烁,连接断开或者未连接,主界面wifi图标闪烁; 12. 成功连接到onenet云平台之后,主界面的IoT图标不会再闪烁,连接断开或者未连接,主界面IoT图标闪烁; 13. 当连接了OneNet之后,oneNet下发台灯亮度命令,台灯亮度会变化;
14. 蓝牙连接之后,蓝牙发送台灯亮度控制命令,台灯亮度会变化。

下面介绍一些重点内容:

启动界面

上电之后的显示界面,会在此界面停留一秒钟。

主显示界面

  • 左上角显示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代码在本文附件中提供,以及gitee也可以获取。

下面是设备加载的Lua脚本:

下面是云平台接收的数据:

下面是调试信息,通过串口打印,可以看到发送给oneNet的数据以及OneNet反馈的数据:

下面是云平台下发的控制命令:
命令格式是【Lamp:台灯亮度】,比如【Lamp:80】表示设置台灯亮度为80%

Bootloader制作

Bootloader使用串口实现,目的是通过板载USB串口UART9来实现软件的在线更新,扩展目标是实现WIFI更新固件(时间关系,未实现),目前实现了上位机软件,支持hex数据的下发,网关RA4M2 bootloader实现了对收到的hex数据接收并解析,并将收到的数据写到对应的flash地址,但是从bootloader跳转到用户app没有实验成功,还没找到问题原因。

用户应用程序的地址应该从0x20000开始,bootloader使用的地址区域为0x0~0x1FFFF。

目前实现功能如下:

  1. 上位机下载软件,支持选择hex文件,以及使用串口下载,支持串口波特率可配;
  2. 实现下位机bootloader软件串口数据接收,,并解析hex文件,将hex文件信息写到对应的地址区域;
  3. 完成flash代码的写入,但是跳转部分存在问题,跳转之后软件启动不了,没找到问题原因,还需后期再查。

目前先记录完成的功能。

上位机

上位机使用的是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/

空文件

简介

本项目是基于RA4M2完成了环境监控网关设备,传感器HS3003采集温湿度,ISL29035采集环境光照强度,温湿度以及光照强度通过wifi模块周期性上传到Onenet物联网平台;OLED提供显示功能,能够显示时间,温湿度以及wifi,蓝牙,云平台的连接状态;触摸按钮可以用来切换显示界面;蓝牙模块与手机蓝牙通信,可以通过手机发送指令控制LED亮灭。 展开 收起
C
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hehung/ra4-m2_-gateway.git
git@gitee.com:hehung/ra4-m2_-gateway.git
hehung
ra4-m2_-gateway
RA4M2_Gateway
master

搜索帮助