【Funpack第二季第五期】基于乐鑫ESP32-S3-Box-Lite 和EPC001的便携生命体征检测仪原型机
结合乐鑫ESP32-S3-Box-Lite和ECP001实现的便携生命体征检测仪原型机,用于检测人体心电信号等数据,并通过屏幕进行呈现。基于micropython进行开发,使用LVGL进行界面处理。
标签
MicroPython
lvgl
ESP32-S3-BOX-LITE
心电检测
HonestQiao
更新2023-08-01
497

本次完成的项目,是结合乐鑫ESP32-S3-Box-Lite和EPC001开发板,实现的便携生命体征检测仪原型机。

EPC001芯片的资料

通过资料,可以了解到这块EPC001开发板是基于EPC001芯片的多参数生命体征检测开发板,芯片集成了分别用于检测脉搏波信号与心电信号的模拟前端,而且ADC精度为24bits,这是非常之高了。 配合官方提供的软件,就可以通过串口获取EPC001采集到的对应数据进行呈现,检测的波形包括脉搏波、血氧波形、心电、肌电、脑电波形,并可以实时更新检测参数如心率、血氧、血压、心律不齐指数等多种参数。

FhqUrLu7aDDIsaBpFOnQ8iM24RTp

在资料包之中,还提供了"EPC001_Program_HClock_高速时钟"、"EPC001_Program_HClock_低速时钟"的源码,也提供了开发工具,但烧录要使用ARM-USB-TINY-H调试器。 我没有这样的调试器,所以不能对源码进行二次开发。不过EPC001是通过串口与上位机进行通讯的,所以可以参考上位机,对照技术手册,使用串口指令控制EPC001和从EPC001读取检测的数据。

设计想法

ESP32-S3-Box-Lite,使用的是ESP32-S3的主控,带有320x240的TTF屏幕,并提供了PMOD接口,可以与EPC001开发板的串口连接,从而控制EPC001开发板进行采集和数据回传。

 

FtQ1KOZJENiJKUy35K9fWHHwbuW9 

Fq1NDwMbok2U5L95uOLR7rCBcUHB

 

于是结合两者,实现了这个"ECP001便携生命体征检测仪原型机"。

当前分享的这个版本为第一版,实现了对ECP001开发板的基础控制,可以检测一路波形信号数据,并呈现SP02数据。

因为是进行原型开发,所以系统程序的开发基于MicroPyton,界面使用LVGL开发。

在这次分享中,以ECG数据为主。 在学习使用EPC001的过程中,得到了EPC001技术人员的大力支持,解决了不少疑惑和问题,并从网络上查到了大量LVGL相关的资料和分享,都非常感谢!

开发板串口的连接

通过开发板的使用手册,可以了解到ECP001开发板上串口通讯的引脚:

 Fik9fdF8EwSdsGoDdi9PLKLFhJGX 

实际位置位于J3的7、3引脚:

 FjBCTJCf45L2vLlsu6kNeoBJnEy-

这个串口引脚,可以与官方提供的USB2TTL连接到电脑,使用官方提供的上位机软件控制PEC001开发板,并读取数据进行呈现。 在这个项目中,将其与ESP32-S3-Box-Lite的PMOD上的GPIO11、GPIO13进行连接,实现串口通讯。

数据解析规则

为了更好的理解技术手册中所描述的通讯协议,我还是用了逻辑分析仪,来辅助进行分析。 下面是官方上位机软件中,ECG部分的界面:

 Fp0on7RhnaNq6q36jUaV0hqVItEu

使用逻辑分析,可以清晰的看到EPC001回传的数据:

 FvuGdoUnVJPIAy9EPkr07D9b0ZCk

通过逻辑分析仪,我将所有的界面的参数的设置,测量的启停,都进行了详细的分析,并与手册一一核对。 在最开始版本提供的手册,有部分指令和解析规则是对应不上的,向官方技术人员咨询后,得到更新版本的技术手册,从而都匹配正确。

具体的通讯协议,分为两个部分,分别为:

  • 控制命令发送:

  •  FqrFqsb7PeHX_JBS8rH7H6_g7ODy 

  • 下发控制命令后,EPC001会应答对应的控制命令,表示收到。 具体的控制指令包括如下:

  •  FoXvHVoenacQynXOPB805j8SdQZz

  • 数据上传:

  •  FgX2kABtaE7Uaw7bXNxYzJPFuLnL 

  • 当使用采集波形指令后,除了会回传控制指令接受成功,后续将会持续的自动上传检测的数据。

具体的数据上传数据包包括如下:

 Fj2kVhtS7T87VLiSYX4e4NoOBTqv

通过技术手册和逻辑分析仪配合,了解清楚了通讯协议以后,我还使用串口调试工具,进行了对应控制指令的发送和回传数据的接收,把这些弄清楚了,就可以开始具体的开发工作了。

MicroPyton中串口数据的读取

在ESP32-S3-Box-Lite的系统程序中,使用串口与EPC001通讯: FtXyk8XlLTbsCvN8M3VQrdjY2QHt 

在MicroPython中,处理串口通讯非常快捷方便。

首先定义串口通讯引脚:

 FtKO8Qa8zu_VavvcgFWl0VJBvhNB 

然后使用uart.write()进行发送,使用uart.any()检测是否有收到数据,使用uart.read()读取数据: 

FqCuu_4_76mLJKRXYlnhvdL4NpOB

因为不同的波形数据的获取,对应不同的指令,所以可以参考实际需要,进行指令的定义: 

Fm7utcXm-EeqIUEU3FH38bFYnQfe

发送对应的波形采集控制指令后,就能够接收到数据上传了。

在代码中,我适当的输出了读取到的数据:

 FogvIu97s6Jf2nq-H5dqzLYkaAUE 

可以看到,持续收到了0x21开头的ECG波形数据。

读取到数据之后,就可以根据技术手册的说明,进行解析。

 Fo8MuTToj6ODDCKfrgGHWOZagJfd 

上面的示例为EMC,ECG的上传数据规则类似,只是最开始的数据包头类型为0x21。

 Fu2DqqwN3z8q9Iqw-eb1inBZ0Tlc

 

在MicroPython中,使用如下的方式进行解析:

 FmrY0CB-ss0753xrfgf5O3XRL5fy 

上述解析过程如下:

  1. 检测数据包的头和尾,应为为0x21、0x0A,则表示有效的ECG数据
  2. 计算校验和位之前的数据包内容部分的校验和,并与收到的校验和进行对比,相同则说明数据有效
  3. 再取得数据中的波形数据的部分,进行下一步的处理

参考前面使用逻辑分析的结果和技术手册,可以了解波形部分的数据,是对应数字的ASCII码,使用下面的代码进行界面得到对应的数值:

 Fpbh8BjEZ2s0VYxFxz67lenB6dNX 

如前述逻辑分析仪取得的数据:

 FkjnEJUhw8krUbtem_fOnvaH6tCh

解析后,对应的数值为:8388608

该数值,即为ADC采样的原始值(RAW),可以参考手册中的说明,转换为mV原始值和增益值: 

Fpj54gahVvBsLhzwt3OmR2tfl7zF 

增益值和原始值的差别,只是在于计算增益值的时候,nGain=1即可。

对应的MicroPython处理代码如下:

 Fj1UCnjN5lfXE08y0pRJbeSfK8aE

因为拿到过两版技术手册,所以上面的代码中,有两个计算公式。实际的处理代码,为下面的部分,与最新的技术手册对应。

界面的处理

在界面的处理上,因为是第一版,所以以简洁快速为主,基本的设置如下。

  • 开机首显示首界面
  • 按中键后,进入波形采集和呈现界面
    • 在此界面,可以按中键,进行切换暂停和呈现状态
  • 按左右键,分别为进入波形界面和SP02数据呈现界面
  • 按右上角BOOT按键,则返回首界面

因为使用了LVGL进行界面的开发,所以可以很方便的使用LVGL的组件,来进行具体界面的呈现。

  • 首界面:使用LVGL的image组件呈现图片

    • FtN058lWw5gmjeaRqq0AeRFC4zi_
    • Fgva9UKTq2n6QifHhhEoCHpmC1gv
  • 波形部分的显示:使用LVGl的chart组件

    • FmEDQDHY4rJ3x9jaw9hYYcbJlUSv
  • 波形界面文本显示:在波形数据界面,会显示当前的参数设置,以及读取到的数据,使用LVGL的label组件即可:

    • Fn2NUSZHZAEm4GPjnHn0bphWql8U
  • SP02数据:使用LVGL的Table组件进行呈现:

    • FjwKD6WVTU7QegYcX_KxYKZHaQgf
    • Fu3aEpdUiEiRHhqcxVVkfA5MIX7a

最后,再使用按键,来处理对应界面的切换:

 Ft8gx3QOs_gqzQe7K1w3vppvp3lJ

串口数据对接LVGL界面

通过LVGL设计好了相应的界面,再将读取到的数据,与LVGL界面关联起来,就能实时进行数据呈现:

  • 波形数据的呈现: 
  • FleK3OYb7EbF1feYhxM_EmjhEdys
  • SP02数据的呈现: 
  • Fn7-KmgdLY7KTDGEsEH4QDuE8bPC

功能展示

最终,第一版原型机实现的功能如下:

  • 首界面:
    • Fnv9cGADLHv0PjrgGtJEixZaqw0p
  • 波形界面:
    • FhY1-GP7Db8VnGjBWkhoOf4d8spf
  • SP02数据呈现:
    • FsABLacJMDW6gdnwY52xEMGA4sIb

 

源码分享

完整的源码,可以查看:https://gitee.com/honestqiao/EPC001_ESP32-S3-Box-Lite

后续计划

随着对暖芯迦EPC001使用的深入,以及在MicroPython中使用LVGL的熟练,对第二版也进行了一些规划。

  • 功能上
    • 完善对现有波形数据的支持:
    • 采用模块化的结构,进行数据解析
    • 实现对PPG-绿光、PPG-红光、ECG、PPG+ECG、EMG、EEG、BP波形数据的控制和读取,以及SP02数据的读取
  • 界面上
    • 使用Screen/Tab的方式,方便进行切换操作
      • FnEZfJbtgsR4Wrm4cWwzflJu3rKW
团队介绍
一个狂热的开源爱好者和传播者,同时也是一名极客爱好者,长期关注嵌入式发展和少儿创客教育,既擅长互联网系统架构设计与研发,又拥有丰富的嵌入式研发经验。为人精力充沛,古道热肠,圈内人称乔大妈、乔帮主。
团队成员
HonestQiao
狂热的开源爱好者和传播者
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号