ESP32 CSI 人体检测:一套经过标定的实用做法

2026-10-11 · 约 2 分钟

ESP32 CSI 人体检测是拿到可用 Wi-Fi 感知演示最便宜的路子。难点不在采集,而在标定与门控。 下面这套做法能撑过真实房间。

1. 采集

路线 工具 输出
最小示例 espressif/esp-csi 示例 [2] 通过 UART 或 Wi-Fi 输出 CSR/CIR 数据
面向数据集 ESP32-CSI-Tool [3] 逐子载波幅度/相位的 CSV
智能家居 ESPectre(ESPHome)[4] 直接产出存在/运动实体

让一块 ESP32 当发送端(以固定速率发 UDP 包),另一块当接收端;有独立的 Wi-Fi 流量会让测量率忽高忽低。

2. 真正有用的特征

import numpy as np

# H: (时间, 子载波) 幅度矩阵(ESP32 上是 30–64 个子载波)
detail = np.abs(np.diff(H, axis=0)).mean(axis=1)      # 包间变化
var    = H.var(axis=1)                                # 逐包方差
motion = 0.5 * detail + 0.5 * var                     # 廉价的融合指标

不要把原始 CSI 直接喂给阈值——先逐子载波归一化,否则单个噪声大的子载波会主导结果。 这类幅度方差特征在 CSI 活动识别里是标准做法 [1]。

3. 用滞回做标定(演示最常跳过的一步)

ENTER, EXIT = 3.0, 1.5          # 每个房间单独调;ENTER > EXIT
state, hold = False, 0
for m in motion:
    if not state and m > ENTER:
        state, hold = True, 0
    elif state and m < EXIT:
        hold += 1
        if hold > 5:            # 约 0.5 秒的安静才判定离开
            state = False
    else:
        hold = 0

先记录每个房间的安静基线与活动基线,再设 ENTER ≈ 安静均值 + 4σ、EXIT ≈ 安静均值 + 2σ。

4. 演示在真实房间里为什么会失败

失败现象 原因 修法
办公室能用,家里不行 多径基线不同 每个房间重新标定
没人动也误报 空调、窗帘、宠物 拉长窗口 + 提高 ENTER
静止的人漏检 没有微动 加呼吸检测,或加一个 mmWave 传感器
随机掉数 ESP32 与家用 Wi-Fi 抢信道 固定发送端 + 规划信道

5. 什么时候该换路由器

如果你想要全屋覆盖又不想到处摆 ESP32,一台支持 CSI 的路由器能做同样的事, 而且是 80MHz / 256 子载波 / 8 条链——见路由器复现教程与 ESP32 vs 路由器对比。

相关:接入 Home Assistant · 对比 mmWave 雷达 · Wi-Fi CSI 雷达

参考与数据来源

本文的每条外部结论都标注来源与证据等级(分级标准);标注 E 级的是本项目可复现的实测数据。

  1. A 级 · 标准/综述 WiFi Sensing with Channel State Information: A Survey
    W. Ma, W. Zhou, X. Wang · ACM Computing Surveys · 2019
    doi:10.1145/3310194 · 被引 857 · 核实: CrossRef API, 2026-10-11 · 领域内最常被引用的 CSI 感知综述(被引 857 次,核实于 CrossRef)。
  2. C 级 · 官方资料 espressif/esp-csi — Applications based on Wi-Fi CSI
    Espressif Systems
    github.com/espressif/esp-csi · 核实: GitHub API 2026-10-11 (stars 1,679) · 官方 README 原文:“All ESP32 series support CSI, including ESP32 / ESP32-S2 / ESP32-C3 / ESP32-S3 / ESP32-C5 / ESP32-C6 / ESP32-C61.”
  3. C 级 · 官方资料 StevenMHernandez/ESP32-CSI-Tool — active/passive CSI extraction for ESP32
    S. M. Hernandez
    github.com/StevenMHernandez/ESP32-CSI-Tool · 核实: GitHub API 2026-10-11 (stars 571, MIT, last push 2024-07-16)
  4. C 级 · 官方资料 francescopace/espectre — Wi-Fi CSI motion sensing for ESP32 (ESPHome)
    F. Pace
    github.com/francescopace/espectre · 核实: GitHub API 2026-10-11 (stars 9,505)

本页含联盟链接(rel="sponsored"),你通过链接购买不会增加成本,本站可获得少量佣金。