国民技术
直播中

hehung

8年用户 659经验值
擅长:嵌入式技术
私信 关注

【国民技术N32项目移植】项目提交-物联网心率监控设备

物联网心率监控设备演示视频

过往分享

【国民技术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小时会自动更新一次时间以及天气,也可以通过手动按按键设置进行更新。支持通过物联网平台设置不同的城市获取不同城市的天气信息,兼顾心率监控功能的同时也可以作为一个桌面心率监控摆件使用。

应用背景

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

实现功能

  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。

项目展示

全家福

心率采集图片:

代码

代码以开源,放在gitee上:

心率监控设备_N32G45X

地址:https://gitee.com/hehung/Pulse_monitor_N32G45X

演示视频

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

结语

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

回帖(1)

晟1000

2023-3-3 10:42:40
做物联网项目的朋友,有兴趣和我们FAE交流吗
举报

更多回帖

发帖
×
20
完善资料,
赚取积分