# 基于暖芯迦九感ECP001和乐鑫ESP32-S3-Box-Lite的便携检测仪原型机 **Repository Path**: honestqiao/EPC001_ESP32-S3-Box-Lite ## Basic Information - **Project Name**: 基于暖芯迦九感ECP001和乐鑫ESP32-S3-Box-Lite的便携检测仪原型机 - **Description**: 基于暖芯迦九感ECP001和乐鑫ESP32-S3-Box-Lite的生命体征检便携检测仪原型机 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2023-07-02 - **Last Updated**: 2023-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: MicroPython, LVGL, 心电, 肌电 ## README # 基于暖芯迦九感ECP001和乐鑫ESP32-S3-Box-Lite的便携生命体征检测仪原型机 这次有幸拿到了ESP32-S3-Box-Lite和九感EPC001多参数健康检测开发板试用,非常感谢硬禾和暖芯咖提供机会。 因为之前有ESP32和心电相关模块的使用经验,所以看到硬禾和暖芯咖官方的活动,第一时间报名并如愿中选。 ![02_01.PEC001开发板](assets/02_01.PEC001%E5%BC%80%E5%8F%91%E6%9D%BF.jpg) ## EPC001官方提供的资料 暖芯咖为这块开发板的试用,提供了完整的资料包。 ![资料包](./assets/16871826608885.jpg) 通过资料,可以了解到这块开发板是基于EPC001芯片的多参数生命体征检测开发板,芯片集成了分别用于检测脉搏波信号与心电信号的模拟前端,而且ADC精度为24bits,这是非常之高了。 配合官方提供的软件,就可以通过串口获取EPC001采集到的对应数据进行呈现,检测的波形包括脉搏波、血氧波形、心电、肌电、脑电波形,并可以实时更新检测参数如心率、血氧、血压、心律不齐指数等多种参数。 在资料包之中,还提供了"EPC001_Program_HClock_高速时钟"、"EPC001_Program_HClock_低速时钟"的源码,也提供了开发工具,但烧录要使用ARM-USB-TINY-H调试器。 我没有这样的调试器,所以不能对源码进行二次开发。不过EPC001是通过串口与上位机进行通讯的,所以可以参考上位机,对照技术手册,使用串口指令控制EPC001和从EPC001读取检测的数据。 ## 设计想法 我手头硬禾提供的ESP32-S3-Box-Lite,使用的是ESP32-S3的主控,带有320x240的TTF屏幕,并提供了PMOD接口,可以与EPC001开发板的串口连接,从而控制EPC001开发板进行采集和数据回传。 【配图】![02_02_01.ESP32-S3-Box-Lite_正面](assets/02_02_01.ESP32-S3-Box-Lite_%E6%AD%A3%E9%9D%A2.jpg) ![02_02_02.ESP32-S3-Box-Lite_背面](assets/02_02_02.ESP32-S3-Box-Lite_%E8%83%8C%E9%9D%A2.jpg) 于是结合两者,实现了这个"九感ECP001便携生命体征检测仪原型机"。 当前分享的这个版本为第一版,实现了对ECP001开发板的基础控制,可以检测一路波形信号数据,并呈现SP02数据。 因为是进行原型开发,所以系统程序的开发基于MicroPyton,界面使用LVGL开发。在这次分享中,以ECG数据为主。 在学习使用EPC001的过程中,得到了暖芯迦官方技术人员的大力支持,解决了不少疑惑和问题,并从网络上查到了大量LVGL相关的资料和分享,都非常感谢! ## 开发板串口的连接 通过开发板的使用手册,可以了解到ECP001开发板上串口通讯的引脚: ![EPC001连线](assets/16882867629660.jpg) 实际位置位于J3的7、3引脚: ![EPC001串口引脚](assets/16882868182629.jpg) 这个串口引脚,可以与官方提供的USB2TTL连接到电脑,使用官方提供的上位机软件控制PEC001开发板,并读取数据进行呈现。 在这个项目中,将其与ESP32-S3-Box-Lite的PMOD上的GPIO11、GPIO13进行连接,实现串口通讯。 ## 数据解析规则 为了更好的理解技术手册中所描述的通讯协议,我还是用了逻辑分析仪,来辅助进行分析。 下面是官方上位机软件中,ECG部分的界面: ![03_01_01.软件](assets/03_01_01.%E8%BD%AF%E4%BB%B6.png) 使用逻辑分析,可以清晰的看到EPC001回传的数据: ![03_01_03.逻辑分析仪](assets/03_01_03.%E9%80%BB%E8%BE%91%E5%88%86%E6%9E%90%E4%BB%AA.png) 通过逻辑分析仪,我将所有的界面的参数的设置,测量的启停,都进行了详细的分析,并与手册一一核对。 在最开始版本提供的手册,有部分指令和解析规则是对应不上的,向官方技术人员咨询后,得到更新版本的技术手册,从而都匹配正确。 具体的通讯协议,分为两个部分,分别为: * 控制命令发送: ![EPC001控制指令](assets/16882874025195.jpg) 下发控制命令后,EPC001会应答对应的控制命令,表示收到。 具体的控制指令包括如下: ![EPC001控制命令](assets/16882875920421.jpg) * 数据上传: ![EPC001 EMG波形数据](assets/16882874942524.jpg) 当使用采集波形指令后,除了会回传控制指令接受成功,后续将会持续的自动上传检测的数据。 具体的数据上传数据包包括如下: ![EPC001数据回传](assets/16882876187816.jpg) 通过技术手册和逻辑分析仪配合,了解清楚了通讯协议以后,我还使用串口调试工具,进行了对应控制指令的发送和回传数据的接收,把这些弄清楚了,就可以开始具体的开发工作了。 ## MicroPyton中串口数据的读取 在ESP32-S3-Box-Lite的系统程序中,使用串口与EPC001通讯: ![EPC001与ESP32-S3-Box-Lite连线](assets/16882879412668.jpg) 在MicroPython中,处理串口通讯非常快捷方便。 首先定义串口通讯引脚: ![MicroPython中串口定义](assets/16882880040885.jpg) 然后使用uart.write()进行发送,使用uart.any()检测是否有收到数据,使用uart.read()读取数据: ![MicroPython串口数据收发](assets/16882880725958.jpg) 因为不同的波形数据的获取,对应不同的指令,所以可以参考实际需要,进行指令的定义: ![MicroPython定义EPC001指令](assets/16882889416937.jpg) 发送对应的波形采集控制指令后,就能够接收到数据上传了。 在代码中,我适当的输出了读取到的数据: ![03_01_04_03.数据输出](assets/03_01_04_03.%E6%95%B0%E6%8D%AE%E8%BE%93%E5%87%BA.png) 可以看到,持续收到了0x21开头的ECG波形数据。 读取到数据之后,就可以根据技术手册的说明,进行解析。 ![EPC001 EMG波形数据](assets/16882882044801.jpg) 上面的示例为EMC,ECG的上传数据规则类似,只是最开始的数据包头类型为0x21。 ![EPC001 ECG波形数据](assets/16882886370754.jpg) 在MicroPython中,使用如下的方式进行解析: ![MicroPython解析ECG数据](assets/16882882674297.jpg) 上述解析过程如下: 1. 检测数据包的头和尾,应为为0x21、0x0A,则表示有效的ECG数据 2. 计算校验和位之前的数据包内容部分的校验和,并与收到的校验和进行对比,相同则说明数据有效 3. 再取得数据中的波形数据的部分,进行下一步的处理 参考前面使用逻辑分析的结果和技术手册,可以了解波形部分的数据,是对应数字的ASCII码,使用下面的代码进行界面得到对应的数值: ![MicroPython解析ECG数据中的ADC值](assets/16882884860228.jpg) 如前述逻辑分析仪取得的数据: ![逻辑分析仪熟悉结果](assets/16882885193403.jpg) 解析后,对应的数值为:8388608 该数值,即为ADC采样的原始值(RAW),可以参考手册中的说明,转换为mV原始值和增益值: ![EPC001 ECG数据换算](assets/16882887259813.jpg) 增益值和原始值的差别,只是在于计算增益值的时候,nGain=1即可。 对应的MicroPython处理代码如下: ![MicroPython换算ECG数据](assets/16882887969804.jpg) 因为拿到过两版技术手册,所以上面的代码中,有两个计算公式。实际的处理代码,为下面的部分,与最新的技术手册对应。 ## 界面的处理 在界面的处理上,因为是第一版,所以以简洁快速为主,基本的设置如下。 * 开机首显示首界面 * 按中键后,进入波形采集和呈现界面 * 在此界面,可以按中键,进行切换暂停和呈现状态 * 按左右键,分别为进入波形界面和SP02数据呈现界面 * 按右上角BOOT按键,则返回首界面 因为使用了LVGL进行界面的开发,所以可以很方便的使用LVGL的组件,来进行具体界面的呈现。 * 首界面:使用LVGL的image组件呈现图片 * ![EPC001](assets/EPC001.png) * ![MicroPython中使用LVGL显示图片](assets/16882896410401.jpg) * 波形部分的显示:使用LVGl的chart组件 * ![MicroPython中使用LVGL显示波形](assets/16882893893531.jpg) * 波形界面文本显示:在波形数据界面,会显示当前的参数设置,以及读取到的数据,使用LVGL的label组件即可: * ![MicroPython中使用LVGL显示文本](assets/16882894387031.jpg) * SP02数据:使用LVGL的Table组件进行呈现: * ![MicroPython中表格数据定义](assets/16882895392152.jpg) * ![MicroPython中使用LVGL显示表格数据](assets/16882895545658.jpg) 最后,再使用按键,来处理对应界面的切换: ![MicroPython中按键处理](assets/16882895979380.jpg) ## 串口数据对接LVGL界面 通过LVGL设计好了相应的界面,再将读取到的数据,与LVGL界面关联起来,就能实时进行数据呈现: * 波形数据的呈现: ![MicroPython中使用LVGL更新波形数据](assets/16882897097630.jpg) * SP02数据的呈现: ![MicroPython中使用LVGL显示SP02数据](assets/16882897791641.jpg) ## 功能展示 最终,第一版原型机实现的功能如下: * 首界面: * ![01_01.整体概览](assets/01_01.%E6%95%B4%E4%BD%93%E6%A6%82%E8%A7%88.jpg) * 波形界面: * ![01_02.曲线呈现](assets/01_02.%E6%9B%B2%E7%BA%BF%E5%91%88%E7%8E%B0.jpg) * SP02数据呈现: * ![03_03_03.数据呈现](assets/03_03_03.%E6%95%B0%E6%8D%AE%E5%91%88%E7%8E%B0.jpg) 具体的项目分享演示视频,可以访问B站界面:[https://www.bilibili.com/video/BV11N411D7CB/](https://www.bilibili.com/video/BV11N411D7CB/) ## 源码分享 完整的源码,可以查看:[https://gitee.com/honestqiao/EPC001_ESP32-S3-Box-Lite](https://gitee.com/honestqiao/EPC001_ESP32-S3-Box-Lite) ## 后续计划 随着对暖芯迦EPC001使用的深入,以及在MicroPython中使用LVGL的熟练,对第二版也进行了一些规划。 * 功能上 * 完善对现有波形数据的支持: * 采用模块化的结构,进行数据解析 * 实现对PPG-绿光、PPG-红光、ECG、PPG+ECG、EMG、EEG、BP波形数据的控制和读取,以及SP02数据的读取 * 界面上 * 使用Screen/Tab的方式,方便进行切换操作 * ![第二版界面演示](assets/16882918393055.jpg) ## 相关链接 * [Funpack第二季第五期:ESP32-S3-BOX-LITE](https://www.eetree.cn/project/detail/1691) * [免费试用丨九感EPC001多参数健康检测开发板](https://mp.weixin.qq.com/s?__biz=MzIwNDAxNDg1Nw==&mid=2648779467&idx=1&sn=d27dbbf42757036143366951717e4ecf&chksm=8ed31eadb9a497bbf079add51eace3a7455dbb4255bae3d135fde50b534a46f329c7a097cfe8&scene=21#wechat_redirect) * [【名单公布】九感EPC001多参数健康检测开发板试用活动名单出炉](https://mp.weixin.qq.com/s/s5KulPtJlVCAXXpblwqnrA) * [九感EPC001便携生命体征检测仪原型机分享演示(B站)](https://www.bilibili.com/video/BV11N411D7CB/)