过往分享
【国民技术N32项目移植】1. 新建工程+LED与按键跳坑总结
【国民技术N32项目移植】2. 硬件IIC驱动OLED
【国民技术N32项目移植】3. 硬件IIC驱动RT-Thread OS SSD1306软件包
【国民技术N32项目移植】4. 硬件定时器实现2ms定时
【国民技术N32项目移植】5. ADC应用以及跳坑总结
项目背景
该项目是参加elecfans举办的N32开源项目移植所完成的项目,移植于我之前所完成的项目《物联网心率监控设备》。
被移植的开源地址:心率监控设备
比赛地址:国民技术N32开源移植挑战赛
项目简介
支持能够通过OLED显示检测的心率波形以及数值,并且将心率数值上传到贝壳物联云平台;还可以显示时间,天气,日期等信息。ESP8266作为wifi模块,上电会自动获取天气以及NTP时间并更新到本地,每1小时会自动更新一次时间以及天气,也可以通过手动按按键设置进行更新。支持通过物联网平台设置不同的城市获取不同城市的天气信息,兼顾心率监控功能的同时也可以作为一个桌面心率监控摆件使用。
应用背景
该项目作为一个办公或者居家桌面摆件使用,随时随地监控心率值,然自己了解自己的身体状况,因为兼顾了获取时间,天气等功能,平时也可以当做一个天气/时钟摆件使用。
实现功能
- 心率采集
- 心率波形以及数值在OLED上显示
- 心率数据上传贝壳物联云平台
- 自动更新天气以及时间(NTP)
- 通过贝壳物联设置当前城市,用于更新本地城市天气
- 时间,日期,天气等信息显示
- 按键切换显示界面以及更新时间以及天气信息
整体系统框架
RT-Thread使用情况
使用了RT-Thread OS以及组件,如下:
硬件架构
[]()
使用到的硬件设备:
- LED控制 - PA0,PB5(普通IO口输出)
- 按键采集 - PA4,PA5(普通IO口输入)
- 串口USART1 - USB串口打印输出
- ESP8266-01 WIFI模块 - UART6 - TXD:PB0, RXD:PB1
- OLED 12864显示屏 - IIC - SCL:PB8, SDA:PB9
- Pluse sensor心率采集模块 - ADC1 IN2 - PA1
- 定时器 timer1 - 用于周期性采集心率传感器数据以及处理心率值
- RTC - 用于本地实时时钟
框图如下:
软件框图
软件使用了多个线程,定时器以及外部中断:
-
线程1用来驱动OLED显示
-
线程2用来驱动LED周期性呼吸
-
线程3用来驱动ESP8266工作
-
线程4用来接收socket数据
具体框图如下:
软件模块说明
-
时间显示界面
左上角显示wifi连接状态(未连接时闪烁);
IoT表示物联网平台连接状态(未连接时闪烁);
右上角显示的是天气(未获取最新天气显示天气更新中);
中间显示时间
左下角显示年月日
右下角显示星期
系统上电之后会自动更新天气以及时间,也会自动连接云平台。
该界面下长按按键切换到心率显示界面。
-
心率波形显示界面
显示采集到的心率波形以及心率数值(次每分钟)
该界面下会自动上传采集到的心率数值到贝壳物联云平台,5s上传一次。
短按按键返回时间显示界面。
-
设置界面
如下,该界面会显示如下三种设置,通过短按按键来切换。
当光标切换到某个选上上就表示该选项被选中,长按按键实现功能。
在更新时间上长按按键,自动更新时间;
在更新天气上长按按键,自动更新天气;
在退出上长按按键,退回到时间显示界面
-
ESP8266任务
ESP8266会根据当前的命令自动决定是获取NTP时间还是更新天气还是上传数据等逻辑。当ESP8266处于idle状态时,会每10s中向贝壳物联云平台发送一个获取状态的命令表示设备在线,防止云平台自动关闭设备。
-
心率传感器
心率传感器的采集在定时器1中完成,每2ms采集一次数据并进行计算,计算出心率值,一般经过10s左右,数据会比较稳定。
心率数据使用ADC采集。
-
按键采集
按键通过外部中断来采集,并通过定时器0来处理按键状态,用于计算长按还是短按。
-
LED闪烁
红色LED会周期性闪烁。
N32G45X资源使用
使用到的N32G45的资源有,详见上述 硬件架构:
- GPIO - 用于LED控制以及读取按键的按下状态;
- UART - 用于串口打印(RT-Thread OS)以及ESP8266通信;
- ADC - 用于采集心率数值;
- 定时器 - 用于2ms标准周期处理心率数据;
- IIC - 用于OLED屏幕的驱动;
- RTC - 用于内部实时时钟
移植过程
之前的项目是基于RA6M4单片机完成,采用了RT-Thread OS,本次移植过程同样使用RT-Thread OS,这样可以最大程度保证移植的完整性,同时也便捷的多。
资源使用对比
硬件资源对比
资源 |
RA4M2 |
N32G45 |
内核 |
Cortex-M33 |
Cortex-M4 |
主频 |
200MHz |
144MHz |
SRAM |
192KB+64KB |
144KB |
FLASH |
1MB |
512KB |
从上表可以看出,RA4M2的资源比N32G45的资源丰富一些,主频相比而言也高一些,但是不影响项目移植。
资源应用对比
资源使用上基本一致,存在下面的区别:
-
按键处理逻辑
开源项目RA6M4使用了中断来采集按键信息,但是N32G45使用了普通IO口来作为输入模式采集信息。
原因:RA6M4只有一个user按键,操作不便,这一个按钮需要负责所有按键操作,使用中断采集信息准确可靠,不易出错;而N32G45XVL-STB有四个user按键,每个user可以负责一种类型的操作,不需使用中断,减轻复杂性,本项目采用了开发板的KEY1和KEY2这两个按键。
-
IIC应用
开源项目RA6M4使用了软件IIC,而N32G45使用了硬件IIC。加快OLED刷新率,显示波形图不会卡顿。
-
LED驱动
开源项目RA6M4使用了一个PWM驱动的LED,而N32G45采用了普通IO口驱动LED。由于N32G45有三个颜色不同的LED,无需使用PWM驱动来标记不同的状态,普通IO驱动更简单。
测试验证/性能对比
因为我的开源项目对单片机性能要求不高,所以性能对比中并不能看出来什么结果。
N32G45的OLED刷新会快一些,因为使用了硬件IIC。
测试结果显示,N32G45上可以完美运行物联网心率监控设备。
移植过程总结
移植过程中重要集中在对硬件资源的了解以及应用上,本次比赛是我第一次接触国民技术的单片机,通过将项目移植到N32G45,我对国民技术的单片机有了更多的了解,单片机的资源丰富,接口操作简单,项目移植起来也比较轻松,最主要的是国民技术提供的芯片资料很丰富,分类清晰,想要查找的时候很简单快速,点赞。
同时我也了解到了过敏技术在单片机领域的发展,以及未来的发展前景,总的来时过敏技术的单片机还是很不错,不输国外芯片大厂的单片机,期望国产芯片越来越好,走向世界。
本次项目移植过程中,我还修改了一些发现的缺陷项,减少了项目的bug。
项目展示
全家福
心率采集图片:
代码
代码以开源,放在gitee上:
心率监控设备_N32G45X
地址:https://gitee.com/hehung/Pulse_monitor_N32G45X
演示视频
https://www.bilibili.com/video/BV1MR4y1B7r5/
结语
感谢elecfans以及国民技术给予的本次比赛的机会,本次比赛学到了很多,也了解到了国民技术的强大,期望越做越好,将中国芯带向世界。