【Heart Rate Sensor】心率监测仪
2026-09-112
【Heart Rate Sensor】心率监测仪
本文介绍了 DFRobot 心率传感器 heart rate sensor 结合 ESP32 开发板及MicroPython 编程、数码管模块,通过 ADC 电压采样、心率计算、串口通信,实现心率监测的项目设计,包括环境搭建、代码、流程图、效果演示等。
项目介绍
- 准备工作:心率传感器模块、两位数码管模块、硬件连接、环境搭建;
- 工程测试:流程图、关键代码、串口绘图、数码管显示。

心率传感器
心率传感器,采用光电容积脉搏波描记法,通过测量血液中血红蛋白随心脏跳动而对氧气吸收的变化量来测量人体心率参数。

- 具有响应快,性能稳定,适应性强等特点;
- 模块拥有方波和脉搏波两种信号输出模式,可以通过板载开关去自由切换输出信号;
- 脉搏波将输出一个连续的心率波形,而方波将根据心率的变化输出对应的方波;
- 心率传感器体积小巧,可以佩戴于手指、手腕等检测位置。
硬件连接
- 连接心率传感器模块和 ESP32-S31 开发板;
| 心率传感器 | ESP32-S31 | Note |
|---|---|---|
| Signal | Pin 45 | Data |
| GND | GND | Ground |
| VCC | 3V3 | Power |
根据原理图和数据手册可知,ESP32-S31 集成了 2 个 ADC,管脚说明详见: ADC 管脚分配说明 。
- 使用杜邦线连接 USB 转 TTL 工具和 ESP32-S31 开发板;
| ESP32-S31 | USB-TTL | Note |
|---|---|---|
| Pin 2 (TXD1) | RXD | Transmite |
| Pin 3 (RXD1) | TXD | Receive |
| GND | GND | Ground |
详见:RainbowLink V2 4 通道隔离 USB 协议转换器 .
- 杜邦线连接开发板和数码管模块
| 74HC595 | ESP32-S31 | Note |
|---|---|---|
| SDI | Pin 38 | Serial Data In |
| SCLK | Pin 37 | Serial Clock |
| LOAD | Pin 36 | Load / Latch |
| GND | GND | Ground |
| VCC | 3V3 | Power |
实物图

环境搭建
- 烧录 MicroPython 固件至开发板;

- 下载并安装 Thonny IDE 软件;
详见:【ESP32-S31_Function_coreboard-1开发板】介绍、环境搭建、工程测试 .
流程图

工程代码
Thonny IDE 新建 hr_seg_uart.py 文件,添加如下代码
from machine import Pin, ADC, UART
import time
# ---------- 74HC595 数码管引脚 ---------------
latch = Pin(36, Pin.OUT)
clock = Pin(37, Pin.OUT)
data = Pin(38, Pin.OUT)
# Initialize UART
uart = UART(1, baudrate=115200, tx=Pin(2), rx=Pin(3))
# 共阳数码管段码
smgduan = [
0b11000000, # 0
0b11111001, # 1
0b10100100, # 2
0b10110000, # 3
0b10011001, # 4
0b10010010, # 5
0b10000010, # 6
0b11111000, # 7
0b10000000, # 8
0b10010000, # 9
]
# ------------ ADC 心率传感器配置 ----------------
adc_pin = Pin(45) # 心率传感器OUT引脚
adc = ADC(adc_pin)
adc.atten(ADC.ATTN_11DB)# 0~3.3V量程
conv_factor = 3.3 / 65535.0
# 595移位输出
def shift_out(byte):
for i in range(8):
bit = (byte >> (7 - i)) & 1
data.value(bit)
clock.value(1)
clock.value(0)
# 双位数码管显示函数
# left:整数位,right:小数位,dot=True点亮小数点
def show(left, right, dot=False):
seg_l = smgduan[left % 10]
seg_r = smgduan[right % 10]
if dot:
seg_l &= 0b01111111 # 整数位点亮小数点,如 1.2
latch.value(0)
shift_out(seg_r)
shift_out(seg_l)
latch.value(1)
# ---------------------- 主循环 ----------------------
while True:
adc_val = adc.read_u16()
voltage = adc_val * conv_factor # 转换电压 0~3.3V
# 保留一位小数
v_1dec = round(voltage * 10) / 10
int_part = int(v_1dec)
dec_part = int((v_1dec * 10) % 10)
# 数码管显示 X.X
show(int_part, dec_part, dot=True)
# 串口打印
uart.write(f"{adc_val}\r\n")
print(f"Heart ADC raw:{adc_val}, Voltage:{voltage:.1f} V")
time.sleep(0.2)
保存文件。
效果演示
- Thonny 运行程序,或将程序另存为
main.py至开发板根目录,复位运行; - 将心率传感器固定在手指或手腕,通过串口或数码管观察到 ADC 数值规律跳动;

- Thonny 软件的 Shell 终端空白处右键,勾选
显示绘图器选项;

显示 ADC 原始值的波动,即心率变化;

串口绘图
- 打开网页串口绘图工具: 高性能WebSerial串口绘图工具 ;
- 配置参数,连接串口,开始采集;

- 根据串口数据绘图结果,可获取心电图;

- 数码管显示 ADC 电压;

总结
本文介绍了 DFRobot 心率传感器 heart rate sensor 结合 ESP32 开发板及MicroPython 编程,通过 ADC 电压采样、心率计算、串口通信,实现心率监测的项目设计,包括环境搭建、工程配置、代码、流程图、效果演示等,为相关产品的快速开发和应用设计提供了参考。






大佬,新的编辑器好用嘛