基于ESP32串口的HLK人体传感器模块上位机
前言
之前硬件初恋的时候,买了一个感觉很厉害的人体存在传感器模块,而且很便宜,但是发现这东西,想要改阈值的话,还要上位机来调试、于是去问了售后。我说,我现在手上有一块ESP32,能不能用来做上位机来调整?它说,不行呢亲,一定要买上位机的呢。
于是我被气红温了,和deepseek交流了一个下午,用ESP32手搓了一个上位机。这就是这篇文章的前世故事(bushi)。
下简称HLK-LD2402-24G-人体传感器模块为 HLK
一、整体思路
先说结论:ESP32 完全可以胜任 HLK 的上位机角色。
整体架构
HLK 人体存在模块 <--GPIO--> ESP32 --> USB串口 --> PC
ESP32 作为上位机处理数据的写入和读取:
-
接收并回传模块数据:一端接 HLK 模块,一端接电脑。GPIO端口可以双向传输数据,包括状态信息、参数回读结果等
-
作为串口监视:USB串口连接电脑控制台,回传信息。电脑仅作为状态读取,用来实时监控数据状态。
因此,目前也有局限。
-
现有版本的逻辑只能提前设置好参数,烧录后按流程运行,没有健壮的错误处理设计,也不能实时控制。
-
最理想的情况是“上位机”,可以实时监控目前状态(包括门限、目前距离等实时数据),并且可以在电脑端更改门限。
二、硬件连接
1️⃣ 所需硬件
- ESP32 开发板(我用的是常见的 ESP32-CH340C)
- HLK 人体存在传感器模块
- 若干杜邦线(硬在哪)
2️⃣ 接线说明
以 UART 通信 为例:
| HLK 模块 | ESP32 |
|---|---|
| TX | GPIO16 (RX2) |
| RX | GPIO17 (TX2) |
| GND | GND |
| VCC | 5V / 3.3V(视模块型号) |
都使用学长馈赠的电源模块进行供电。
注意,这里有一点踩坑提醒:TX和RX不是对应关系,是数据流的关系,所以RX端口要连接HLK的TX口,TX端口要连接HLK的RX口。
TX 和 RX 的含义
-
TX(Transmit):发送端
👉 表示 “这个引脚负责把数据发出去”
-
RX(Receive):接收端
👉 表示 “这个引脚负责接收外部发来的数据”
三、HLK 模块的串口通信
在正式写代码前,必须搞清楚 HLK 模块的通信方式。
通信参数来自官方文档。配置命令必须进入配置模式才生效。
1、基本协议握手
| 参数 | 值 |
|---|---|
| 波特率 | 115200 |
| 数据位 | 8 |
| 校验 | None |
| 停止位 | 1 |
| 电平 | TTL 3.3V |
与ESP32对应
Serial2.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN);
2、核心协议通信部分
| 字段 | 说明 |
|---|---|
| 帧头 | 固定 FD FC FB FA |
| 长度 | 仅帧内数据长度,不含头尾 |
| 小端 | 所有多字节数值都是小端 |
| 帧尾 | 固定 04 03 02 01 |
一条完整的命令帧为:
FD FC FB FA | 长度(2字节) | 帧内数据 | 04 03 02 01
-
长度 = 帧内数据的字节数
-
帧内数据 = 命令字(2字节) + 命令值(N字节)
具体命令字可以查阅原始资料
3、ACK 返回帧结构
一条完整的命令帧为:
FD FC FB FA | 长度(2字节) | 命令字 | ACK | 04 03 02 01
其中,ACK 状态:
- 0x0000 → 成功
- 0x0001 → 失败
如果是特殊操作(如读取sn号等),具体返回帧结构会发生改变,具体参阅参数资料。
4、门限参数的计算
门限参数本质是能量(功率),模块内部用的是:
\[M = 10^{N \over 10}\]其中,N是分贝
注意!这里的分贝是回波能量的量化单位,和距离没有直接换算公式,需要凭借经验和尝试,距离只是影响回波强度的一个因素。
回波能量 = 人体反射 × 距离衰减 × 姿态 × 环境
影响因素包括但不限于:
- 人体姿势
- 人体移动幅度
- 环境反射
- 环境材质
- 距离
所以可以使用自动门限生成(但是我没有写这个代码哈哈哈哈)(默默记下,说不定会填坑…)
5、举例
一个完整设置最大距离 5m的命令
计算步骤
-
5.0 m → 50(大约)
-
50 → 0x00000032
-
小端 → 32 00 00 00
完整命令帧(逐字节)
FD FC FB FA // 帧头
08 00 // 长度 = 8
07 00 // 命令字:写参数
01 00 // 参数ID:最大距离
32 00 00 00 // 参数值:5.0m
04 03 02 01 // 帧尾
收到完整回复帧:
FD FC FB FA // 帧头
04 00 // 长度 = 4
07 00 // 命令字:写参数(与请求一致)
00 00 // 状态码:成功
04 03 02 01 // 帧尾
至此,串口通信和门限配置大概完成
四、ESP32 程序设计
1、串口初始化
void setup() {
Serial.begin(115200); // PC 串口
Serial2.begin(115200); // HLK 模块
}
2、串口桥接逻辑
核心思路非常简单:
- ESP32 → HLK
- HLK → ESP32 → PC
void loop() {
// PC 发给 HLK
while (Serial.available()) {
Serial2.write(Serial.read());
}
// HLK 返回给 PC
while (Serial2.available()) {
Serial.write(Serial2.read());
}
}
五、参数配置与调试
我是用的比较传统的办法,多次尝试不同门限,写入再测试。所以会很繁琐。如果可以自动门限生成,就会方便很多。
但是,这也并不是这个项目的本质目的。我只是一方面想怼回客服,另一方面来学习串口通信的相关理论信息。
六、效果与总结
最终效果:
- ✅ 无需官方上位机
- ✅ ESP32 即插即用
从结果来看,这个 HLK 模块并没有任何“不可替代”的上位机逻辑,本质就是串口协议封装。
所谓“必须买官方上位机”,更多是商业策略,而不是技术限制。哈哈哈没招了吧()。
当然了,说句公道话,上位机是更完美的选项,在大型工程是必不可少的。
这个毛坯房在基本程度上还原了基本的串口通信,但是不会是成熟方案。
七、结语
如果你也被“必须买官方工具”这件事恶心过,希望这篇文章能给你一点参考。
能用串口解决的问题,就别急着掏钱。
锦的美图

留下评论