我用165块钱的硬件,搓了一个「无感」健康监测站

admin 2026-05-18 05:12:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍使用165元硬件(SeeedXIAOESP32C6和MR60BHA2毫米波雷达)搭建无接触健康监测站的全过程。系统通过60GHz毫米波检测人体微动,实时监测心率、呼吸频率、距离及人体存在,并基于统计模型估算血压趋势。详细阐述了ESP32数据滤波处理、Go后端架构、WebSocket实时推送及前端可视化方案,同时总结了配网兼容性、进程守护等实战经验,并提出了数据持久化、异常告警等扩展方向。 综合评分: 85 文章分类: IoT安全,安全工具,技术标准,解决方案,其他


cover_image

我用 165 块钱的硬件,搓了一个「无感」健康监测站

原创

黑屋科技站 黑屋科技站

漕河泾小黑屋

2026年5月16日 20:36 上海

在小说阅读器读本章

去阅读

不穿不戴不贴,坐在那里就能测心率、呼吸,还能估算血压。


事情的起因很简单——我搞到了一块 60GHz 毫米波雷达传感器,据说能隔空检测人的心率和呼吸。

听起来很玄学对吧?我也觉得,所以决定自己验证一下。

结果,还真做出来了。


硬件就两个东西

全部家当:

  • Seeed XIAO ESP32C6——一块拇指盖大小的开发板,自带 WiFi 6 和蓝牙 5
  • MR60BHA2 毫米波雷达模组——叠在 ESP32 上面,像搭积木一样

合体之后比打火机还小,USB 供电就能跑,没有屏幕没有按钮没有风扇。

安静到你会忘记它的存在。


它到底能测什么?

这块雷达发射 60GHz 频段的毫米波信号,通过分析反射波的相位变化,能「看到」人体极其微小的运动:

| 检测项 | 原理 | 精度 | | — | — | — | | 呼吸频率 | 胸腔起伏 | 次/分钟 | | 心率 | 心脏搏动引起的体表微振 | bpm | | 人体存在 | 生命体征信号有无 | 有/无 | | 距离 | 信号反射强度 | 厘米级 |

没有摄像头,没有麦克风,纯电磁波。 隐私上完全没有顾虑。

我还基于心率和呼吸频率的统计关联,加了一个血压估算——经验回归模型,不能替代血压计,但看趋势变化够用了。


整套系统怎么跑起来的

数据从雷达到你的手机,经过这么一条链路:

MR60BHA2 雷达传感器    ↓ UART 串口ESP32-C6(滤波 + 血压估算 + WiFi)    ↓ TCP 长连接云服务器(Go 后端)    ↓ WebSocket手机浏览器(实时仪表盘)

每一层都不复杂,连起来就是一套完整的 IoT 系统。


ESP32 端:数据采集和处理

雷达模组通过串口吐数据,ESP32 读取后做三件事:

1. 滤波降噪

原始数据波动很大,心率可能上一秒 68 下一秒 112。直接展示的话图表跟心电图似的——看着吓人但没有意义。

我用了一个滑动平均滤波器,心率和呼吸取最近 8 个采样点的均值,距离取 4 个点。效果立竿见影,曲线瞬间丝滑。

template<int&nbsp;N>struct&nbsp;Filter&nbsp;{&nbsp;&nbsp;float&nbsp;buf[N] = {0};&nbsp;&nbsp;int&nbsp;idx =&nbsp;0, count =&nbsp;0;&nbsp;&nbsp;float&nbsp;add(float&nbsp;v)&nbsp;{&nbsp; &nbsp; buf[idx] = v;&nbsp; &nbsp; idx = (idx +&nbsp;1) % N;&nbsp; &nbsp;&nbsp;if&nbsp;(count < N) count++;&nbsp; &nbsp;&nbsp;float&nbsp;sum =&nbsp;0;&nbsp; &nbsp;&nbsp;for&nbsp;(int&nbsp;i =&nbsp;0; i < count; i++) sum += buf[i];&nbsp; &nbsp;&nbsp;return&nbsp;sum / count;&nbsp; }};

2. 血压估算

基于经验公式,用心率和呼吸频率推算收缩压和舒张压:

SBP&nbsp;=&nbsp;0.5&nbsp;× HR +&nbsp;1.1&nbsp;× BR +&nbsp;49.0DBP&nbsp;=&nbsp;0.3&nbsp;× HR +&nbsp;0.6&nbsp;× BR +&nbsp;30.0

这不是医学级别的测量,但能反映趋势——比如你连续几天收缩压在爬升,那确实该注意一下。

3. WiFi 配网 + 数据上传

第一次使用时,ESP32 会创建一个叫 MR60BHA2_Setup 的 WiFi 热点,手机连上后浏览器弹出配置页面,输入家里 WiFi 的账号密码就行。

之后每次通电自动连接,通过 TCP 长连接把 JSON 数据推到云服务器。

想换 WiFi?3 秒内按两下 RESET 按钮,清除记忆重新配网。


服务器端:Go 写的后端

后端用 Go 写的,一共四个模块:

  • TCP Server:监听 9000 端口,接收 ESP32 推上来的 JSON Lines 数据
  • WebSocket Hub:把收到的数据实时广播给所有在线的浏览器客户端
  • JWT 认证:登录接口 + token 校验中间件,防止数据被随便看
  • 静态文件服务:托管前端页面

整个后端交叉编译成 Linux 二进制,丢到服务器上用 systemd 管理,稳定运行。


前端:手机上打开就能看

原生 HTML + Chart.js,没用任何框架。

打开浏览器 → 输入地址 → 登录 → 看到实时仪表盘:

  • 心率卡片(滤波值 + 原始值)
  • 呼吸频率卡片
  • 血压估算卡片(收缩压/舒张压)
  • 检测距离 + 人体存在状态
  • 四张实时趋势图(心率、呼吸、血压、相位波形)

所有数据通过 WebSocket 推送,100ms 刷新一次。手机端自适应布局,竖屏横屏都能看。

全程中文界面。


踩过的坑

蓝牙配网在 ESP32-C6 上不好使。 一开始想用 BLE Provisioning 配网,折腾了一晚上发现 ESP32-C6 的 NimBLE 协议栈在 Arduino 框架下有兼容性问题,扫不到蓝牙设备。果断换成 SoftAP + 网页配网,反而更简单——不用装 App,手机浏览器直接搞定。

nohup 在服务器上根本不靠谱。 用 nohup ./server & 跑后端,SSH 一断进程就挂。试了 setsidscreen,都不稳定。最后老老实实写了 systemd service 文件,开机自启 + 崩溃自动重启,才算彻底解决。

串口监视器抢端口。 开着 Go 后端占着串口,Arduino 就烧不了固件。每次改代码都要先杀进程再上传,来回切换很烦。后来改成 WiFi + TCP 模式,彻底解放了串口。


成本

| 物料 | 价格 | | — | — | | XIAO ESP32C6 | ≈ 45 元 | | MR60BHA2 雷达模组 | ≈ 120 元 | | USB-C 数据线 | 家里找的 | | 云服务器 | 已有的闲置机器 | | 合计 | ≈ 165 元 |

代码量:ESP32 固件 280 行 + Go 后端 200 行 + 前端 300 行,总共不到 800 行。


接下来可以玩什么

这个项目目前还是个 MVP,但有不少有意思的方向可以继续:

  • 数据持久化——存到数据库里,做历史回看和趋势分析
  • 异常告警——心率过高/过低时推个微信通知
  • 睡眠分析——通过呼吸和心率变化模式判断深睡/浅睡
  • 跌倒检测——毫米波雷达天然适合做这个,MR60BHA2 本身就支持
  • 多设备管理——一个后台同时看多个房间的数据
  • 接大模型——让 AI 分析健康趋势,给出建议

最后

整个项目从硬件接线到服务器部署,一个人一天搞定。

最有意思的地方在于:165 块钱的硬件 + 不到 800 行代码,就能搭出一套完整的、可远程访问的、实时的生命体征监测系统。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:漕河泾小黑屋 黑屋科技站 黑屋科技站《我用 165 块钱的硬件,搓了一个「无感」健康监测站》

评论:0   参与:  0