1 Star 1 Fork 1

hehung/心率监控设备_N32G45X

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

项目背景

该项目是参加elecfans举办的N32开源项目移植所完成的项目,移植于我之前所完成的项目《物联网心率监控设备》。 被移植的开源地址:心率监控设备 比赛地址:国民技术N32开源移植挑战赛

项目简介

支持能够通过OLED显示检测的心率波形以及数值,并且将心率数值上传到贝壳物联云平台;还可以显示时间,天气,日期等信息。ESP8266作为wifi模块,上电会自动获取天气以及NTP时间并更新到本地,每1小时会自动更新一次时间以及天气,也可以通过手动按按键设置进行更新。支持通过物联网平台设置不同的城市获取不同城市的天气信息,兼顾心率监控功能的同时也可以作为一个桌面心率监控摆件使用。

应用背景

该项目作为一个办公或者居家桌面摆件使用,随时随地监控心率值,然自己了解自己的身体状况,因为兼顾了获取时间,天气等功能,平时也可以当做一个天气/时钟摆件使用。

实现功能

  1. 心率采集
  2. 心率波形以及数值在OLED上显示
  3. 心率数据上传贝壳物联云平台
  4. 自动更新天气以及时间(NTP)
  5. 通过贝壳物联设置当前城市,用于更新本地城市天气
  6. 时间,日期,天气等信息显示
  7. 按键切换显示界面以及更新时间以及天气信息

整体系统框架

RT-Thread使用情况

使用了RT-Thread OS以及组件,如下:

硬件架构

使用到的硬件设备:

  1. LED控制 - PA0,PB5(普通IO口输出)
  2. 按键采集 - PA4,PA5(普通IO口输入)
  3. 串口USART1 - USB串口打印输出
  4. ESP8266-01 WIFI模块 - UART6 - TXD:PB0, RXD:PB1
  5. OLED 12864显示屏 - IIC - SCL:PB8, SDA:PB9
  6. Pluse sensor心率采集模块 - ADC1 IN2 - PA1
  7. 定时器 timer1 - 用于周期性采集心率传感器数据以及处理心率值
  8. RTC - 用于本地实时时钟

框图如下:

软件框图

软件使用了多个线程,定时器以及外部中断:

  1. 线程1用来驱动OLED显示
  2. 线程2用来驱动LED周期性呼吸
  3. 线程3用来驱动ESP8266工作
  4. 线程4用来接收socket数据 具体框图如下:

软件模块说明

  1. 时间显示界面 左上角显示wifi连接状态(未连接时闪烁); IoT表示物联网平台连接状态(未连接时闪烁); 右上角显示的是天气(未获取最新天气显示天气更新中); 中间显示时间 左下角显示年月日 右下角显示星期 系统上电之后会自动更新天气以及时间,也会自动连接云平台。 该界面下长按按键切换到心率显示界面。
  2. 心率波形显示界面 显示采集到的心率波形以及心率数值(次每分钟) 该界面下会自动上传采集到的心率数值到贝壳物联云平台,5s上传一次。 短按按键返回时间显示界面。
  3. 设置界面 如下,该界面会显示如下三种设置,通过短按按键来切换。 当光标切换到某个选上上就表示该选项被选中,长按按键实现功能。 在更新时间上长按按键,自动更新时间; 在更新天气上长按按键,自动更新天气; 在退出上长按按键,退回到时间显示界面

  1. ESP8266任务 ESP8266会根据当前的命令自动决定是获取NTP时间还是更新天气还是上传数据等逻辑。当ESP8266处于idle状态时,会每10s中向贝壳物联云平台发送一个获取状态的命令表示设备在线,防止云平台自动关闭设备。
  2. 心率传感器 心率传感器的采集在定时器1中完成,每2ms采集一次数据并进行计算,计算出心率值,一般经过10s左右,数据会比较稳定。 心率数据使用ADC采集。
  3. 按键采集 按键通过外部中断来采集,并通过定时器0来处理按键状态,用于计算长按还是短按。
  4. LED闪烁 红色LED会周期性闪烁。
  • 当闪烁周期为100ms时,表示wifi没有连接;
  • 当闪烁周期为500ms时,表示物联网平台没有连接;
  • 当闪烁周期为1s时,表示wifi和物联网平台都连接了。 绿色LED闪烁表示心率传感器采集到了心率值。

N32G45X资源使用

使用到的N32G45的资源有,详见上述 硬件架构

  1. GPIO - 用于LED控制以及读取按键的按下状态;
  2. UART - 用于串口打印(RT-Thread OS)以及ESP8266通信;
  3. ADC - 用于采集心率数值;
  4. 定时器 - 用于2ms标准周期处理心率数据;
  5. IIC - 用于OLED屏幕的驱动;
  6. 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的资源丰富一些,主频相比而言也高一些,但是不影响项目移植。

资源应用对比

资源使用上基本一致,存在下面的区别:

  1. 按键处理逻辑 开源项目RA6M4使用了中断来采集按键信息,但是N32G45使用了普通IO口来作为输入模式采集信息。 原因:RA6M4只有一个user按键,操作不便,这一个按钮需要负责所有按键操作,使用中断采集信息准确可靠,不易出错;而N32G45XVL-STB有四个user按键,每个user可以负责一种类型的操作,不需使用中断,减轻复杂性,本项目采用了开发板的KEY1和KEY2这两个按键。
  2. IIC应用 开源项目RA6M4使用了软件IIC,而N32G45使用了硬件IIC。加快OLED刷新率,显示波形图不会卡顿。
  3. LED驱动 开源项目RA6M4使用了一个PWM驱动的LED,而N32G45采用了普通IO口驱动LED。由于N32G45有三个颜色不同的LED,无需使用PWM驱动来标记不同的状态,普通IO驱动更简单。

测试验证/性能对比

因为我的开源项目对单片机性能要求不高,所以性能对比中并不能看出来什么结果。 N32G45的OLED刷新会快一些,因为使用了硬件IIC。 测试结果显示,N32G45上可以完美运行物联网心率监控设备。

移植过程总结

移植过程中重要集中在对硬件资源的了解以及应用上,本次比赛是我第一次接触国民技术的单片机,通过将项目移植到N32G45,我对国民技术的单片机有了更多的了解,单片机的资源丰富,接口操作简单,项目移植起来也比较轻松,最主要的是国民技术提供的芯片资料很丰富,分类清晰,想要查找的时候很简单快速,点赞。 同时我也了解到了过敏技术在单片机领域的发展,以及未来的发展前景,总的来时过敏技术的单片机还是很不错,不输国外芯片大厂的单片机,期望国产芯片越来越好,走向世界。 本次项目移植过程中,我还修改了一些发现的缺陷项,减少了项目的bug。

项目展示

全家福

心率采集图片:

演示视频

https://www.bilibili.com/video/BV1MR4y1B7r5/

结语

感谢elecfans以及国民技术给予的本次比赛的机会,本次比赛学到了很多,也了解到了国民技术的强大,期望越做越好,将中国芯带向世界。

空文件

简介

支持能够通过OLED显示检测的心率波形以及数值,并且将心率数值上传到贝壳物联云平台;还可以显示时间,天气,日期等信息。ESP8266作为wifi模块,上电会自动获取天气以及NTP时间并更新到本地,每1小时会自动更新一次时间以及天气,也可以通过手动按按键设置进行更新。支持通过物联网平台设置不同的城市获取不同城市的天气信息,兼顾心率监控功能的同时也可以作为一个桌面心率监控摆件使用。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hehung/Pulse_monitor_N32G45X.git
git@gitee.com:hehung/Pulse_monitor_N32G45X.git
hehung
Pulse_monitor_N32G45X
心率监控设备_N32G45X
master

搜索帮助