用 ESP32 把 Wi-Fi 变成“隐形雷达”!无摄像头、极度私密的运动传感器来了
最近刷 GitHub 时,发现了一个超级酷的黑科技项目——ESPectre,它能让普通的家用 Wi-Fi 路由器加上一个廉价的 ESP32 开发板,就变成一个精准的运动检测器!而且完全不开摄像头、不录声音、纯数学算法,隐私保护拉满。目前 GitHub 已经 4.1k 星,热度还在涨,最近版本 v2.2.0(12 月 19 日发布)又加了低通滤波和增益锁定,稳定性更强了。

一、ESPectre 是什么?
简单说,ESPectre 是一个跑在 ESP32 上的开源“Wi‑Fi 人体活动传感器”。
它不需要额外的专用雷达硬件,也不采集图像或声音,而是直接利用你家原本就存在的 Wi‑Fi 信号,通过分析信号变化来判断房间里有没有人走动。

它有几个关键特点:
- 运行在 ESP32 系列芯片上(ESP32、S3、C3、C6 等常见开发板都能用)。
- 作为 ESPHome 组件,能原生接入 Home Assistant,自动变成“有人/无人”的传感器实体。
- 完全开源,算法公开透明,适合玩家折腾,也方便研究者做二次开发。
项目GitHub地址:https://github.com/francescopace/espectre
二、为什么 Wi‑Fi 能“看见”人?
要理解 ESPectre 的魔法,先要接受一个看起来有点科幻、但其实很朴素的事实:
只要人在 Wi‑Fi 覆盖范围内走动,就一定会“扰动” Wi‑Fi 信号。
家里的路由器就像一个“小太阳”,不断向外发射电磁波;这些无线波在房间里被墙壁、家具、人体来回反射叠加,最后被 ESP32 这样的设备接收到。

当房间里没人动的时候,这个“无线波场”的形状相对稳定;
而当你走路、挥手、从门口经过时,人体会反射和遮挡部分信号,导致接收端看到的波形发生轻微但可测量的变化——这正是 ESPectre 想要抓住的“痕迹”。
Wi‑Fi 芯片在底层会计算一个叫 CSI(Channel State Information,信道状态信息) 的东西,可以理解成“这一个瞬间,当前这个 Wi‑Fi 信道的指纹长什么样”。ESPectre 就是通过连续读取这些“指纹”,观察它们是平静还是动荡,进而推断有没有运动发生。
三、从复杂信号到一条“抖动曲线”
原始的 CSI 特征维度很高:
每个 Wi‑Fi 包会包含很多个子载波,每个子载波有幅度和相位信息,对一个小小 ESP32 来说,直接拿这些数据做复杂算法是很吃力的。
ESPectre 的做法非常“工程化”:先把复杂信号压缩成一条易于理解的“抖动曲线”:
- 对每一帧 CSI,拿出所有子载波的幅度。
- 在这些子载波之间做统计(比如标准差等),得到一个数值:可以理解成“当前这一瞬间,整个空间的 Wi‑Fi 场有多‘乱’”。
- 把这个数值按时间连起来,就得到一条随时间变化的曲线——当环境很安静时,曲线比较平;有人走动时,曲线就会明显起伏。
你可以把这条曲线想象成“室内 Wi‑Fi 海面的浪高记录”:
- 风平浪静→ 波浪小,曲线低而平;
- 刮风起浪→ 波浪大,曲线高而抖。
四、MVS:用“曲线抖动程度”找出运动段
有了这条“抖动曲线”,下一步就是回答一个实际问题:这条曲线哪一段代表“有人动”?哪一段代表“没人动”?
ESPectre 用的是一个叫 MVS(Moving Variance Segmentation,移动方差分割) 的思路,听着拗口,本质却很直观:
- 在这条曲线上滑动一个时间窗口(例如最近几百毫秒或几秒钟)。
- 在每个窗口里,计算这段时间曲线的“抖动程度”(方差之类的统计量)。
- 如果这一小段时间里曲线非常安静,就认为这是“静止期”;如果这一小段时间波动明显,就认为是“运动期”。
理解成日常类比就是:
不看每一帧的高低,而是看“这几秒内整体有多折腾”。
折腾多 → 有人动;折腾少 → 基本没人动。
这种做法有两个好处:
- 算法全是加减乘除、滑动窗口和阈值判断,不需要机器学习训练,ESP32 也跑得动。
- 延迟很低,可以做到家庭自动化里非常实用的响应速度。
五、NBVI:让传感器“自适应你的房间”
现实世界远比实验室复杂:
- 有的路由器离传感器很近,信号本来就很“乱”;
- 有的房间墙多,Wi‑Fi 多径效应严重;
- 有的环境背景里,人虽然没动,但风扇、宠物、门缝漏风也会制造轻微扰动。
如果直接设一个固定阈值,很容易出现两种极端:
- 阈值太低 → 全天误报,一直“有人”;
- 阈值太高 → 人都走过去了,它还觉得“风平浪静”。
为了解决这个问题,ESPectre 加入了一个自动校准机制,叫 NBVI(Normalized Baseline Variance Index,归一化基线方差指标):
- 设备启动后的前一小段时间,会假定房间大致是“无人运动”的状态,用这段数据估计“在你这个房间、你这个路由器下,正常静止时的平均水平和波动范围”。
- 后续运行时,会把新观察到的“抖动程度”跟这个基线做比较,并自动调整阈值:背景本来就很吵的房间,提高阈值;特别安静的环境,降低阈值。
这就像一个刚搬来你家住的室友:
第一天 TA 会先熟悉一下“你家平时有多吵”,之后才会根据真正异常的动静来判断是不是出了事。
六、从算法到 Home Assistant 里的“有人/无人”
从用户角度看,算法细节不必完全理解,真正重要的是“它在智能家居里能帮你做什么”。在工程实现上,ESPectre 把复杂的数学处理封装成几个非常好用的实体:
-
一个二进制传感器
- 通常叫
binary_sensor.espectre_motion之类,直接告诉你“当前是否检测到运动”。 - 这可以直接用在 Home Assistant 的自动化里,像普通的红外人体传感器一样用。
- 通常叫
-
一个“运动强度”传感器
- 通常是一个 0–100 或类似范围的“motion_score”。
- 数值越高,说明近期环境扰动越大;可以按自己需求设置不同阈值实现“高灵敏模式”“低误报模式”。
-
调节用的参数/实体
- 部分版本中,还会提供一些可调参数,让用户根据房间大小、布置、墙体结构等,调整灵敏度、衰减时间等。
对 Home Assistant 用户来说,大致是这样的体验:
- 用 ESPHome 把 ESPectre 组件加进一个 ESP32 配置;
- 刷入固件,通电等待一小段时间自动校准;
- 在 Home Assistant 中自动出现一个“Wi‑Fi 动作传感器”,可以像常规传感器一样拖进自动化场景:
- 有人走进客厅 → 开灯;
- 夜里卧室有大幅运动 → 触发监控录制或通知;
- 作为“补充传感器”,配合门磁、红外做更加可靠的在家/离家判断。
七、隐私友好:看不见你,却能感知你
传统的人体感应方案很多:摄像头、毫米波雷达、红外、超声波……但要兼顾隐私与成本并不容易。
ESPectre 的一个重要卖点就是:
- 不采集图像,不录音,只使用 Wi‑Fi 的物理信道特性;
- 算法在本地 ESP32 上运行,数据不需要上传云端;
- 对于希望在卧室、卫生间等敏感区域也能检测“是否有人”的场景,Wi‑Fi 这种“看不见你的传感”格外有吸引力。
在欧盟等地区,官方宣传里也强调“GDPR-friendly by design”(天生隐私友好),对重视隐私的智能家居玩家来说,是一个既好玩又实用的方案。
八、谁适合折腾 ESPectre?
如果你符合下面几条中的任何一条,很可能会对这个项目感兴趣:
- 已经在用 Home Assistant / ESPHome,想要更“软硬兼施”的在家/离家检测。
- 想在卧室、走廊、卫生间等不适合放摄像头的地方做存在感知。
- 对无线感知(Wi‑Fi Sensing)、CSI、室内定位等方向感兴趣,想用廉价硬件做实验。
- 做科研/毕业设计/工程项目,需要一个可以实际跑在 ESP32 上的、开箱即用的 CSI 感知平台。
结语
Wi‑Fi 早就无处不在,只是过去大家只把它当作“数据管道”。像 ESPectre 这样的项目,让人重新意识到:家里那些看不见的电磁波,其实时刻都在“感知”你的一举一动。
把这份“隐形的感知”变成可编排的智能家居逻辑,既是一个极客级的玩法,也是未来家庭感知技术的一种雏形。
如果你已经有 Home Assistant 和一块闲置的 ESP32,不妨抽个周末,把你家的 Wi‑Fi 也变成一副“看不见的眼睛”。
更多推荐
所有评论(0)