Skip to main content

在 Seeed Studio XIAO ESP32 系列上使用 ESPHome 部署 Espectre

ESPectre 是一个基于 Wi-Fi 频谱分析(CSI)的运动检测系统,通过 ESPHome 原生集成 Home Assistant。 当有人在房间内移动时,他们会"干扰"在路由器和传感器之间传播的 Wi-Fi 波。这就像当你在手电筒前挥手时看到阴影变化一样。XIAO ESP32 开发板"监听"这些变化并理解是否有运动。

特性

  • 基于 Wi-Fi 的运动检测:仅使用 Wi-Fi 信号检测人体运动——无摄像头、无麦克风,确保完全隐私
  • 最少硬件,快速设置:仅需一块 XIAO ESP32 开发板,可在 10-15 分钟内设置完成,总成本约 7 美元
  • 完全非侵入式:无需可穿戴设备或物理传感器——用户无需携带或佩戴任何东西
  • 穿墙工作:Wi-Fi 信号可穿透墙壁,实现跨房间的可靠运动检测

所需物品

硬件

  • 2.4GHz Wi-Fi 路由器 - 您家中现有的路由器即可正常工作
  • 支持 CSI 的 ESP32 - XIAO ESP32-C3 / XIAO ESP32-C6 / XIAO ESP32-S3,XIAO ESP32-C5 实验性支持。

软件(全部免费)

  • Python 3.12(⚠️ Python 3.14 与 ESPHome 存在已知问题)
  • ESPHome(集成在 Home Assistant 中或独立运行)
  • Home Assistant(在 Raspberry Pi、PC、NAS 或云端。推荐使用,但可选)

快速开始

1. 安装 ESPHome

# Create virtual environment (recommended)
python3 -m venv venv
source venv/bin/activate # On macOS/Linux
# venv\Scripts\activate # On Windows

# Install ESPHome
pip install esphome

我们推荐在计算机终端中下载并运行 ESPHome,而不是直接在 Home Assistant 中运行,原因是 PlatformIO (PIO) 生成的二进制文件相当大。Home Assistant 环境无法可靠地处理如此大的临时文件和系统文件,这最终可能导致构建或部署过程失败。

例如,在我们的测试中观察到以下消息:

我们发现了 1.63GB 的不必要 PlatformIO 系统数据(临时文件、不必要的包等)。使用 pio system prune --dry-run 列出它们或使用 pio system prune 节省磁盘空间。

2. 下载配置文件

为您的硬件下载示例配置:

平台配置文件CPUWiFiPSRAM状态
XIAO ESP32-C6espectre-c6.yamlRISC-V @ 160MHzWiFi 6✅ 已测试
XIAO ESP32-S3espectre-s3.yamlXtensa @ 240MHzWiFi 4✅ 8MB✅ 已测试
XIAO ESP32-C3espectre-c3.yamlRISC-V @ 160MHzWiFi 4✅ 已测试 ²
XIAO ESP32-C5espectre-c5.yamlRISC-V @ 240MHzWiFi 6⚠️ 实验性 ¹

推荐

  • XIAO ESP32-C6:最适合 WiFi 6 环境,标准运动检测
  • XIAO ESP32-S3:最适合高级应用,未来的机器学习功能(更多内存)
  • XIAO ESP32-C3:经济实惠的选择

这些文件已预配置为从 GitHub 自动下载组件。

⚠️ 实验性平台:ESP32-S2 和 ESP32-C5 支持 CSI 但尚未经过广泛测试。

ESP32-C5:ESPHome 尚不支持 improv_serial(USB 配置)。请改用 BLE 或 WiFi AP 配置。

3. 构建和烧录

cd examples
esphome run espectre-c5.yaml # or espectre-s3.yaml

4. 配置 WiFi

烧录后,使用以下方法之一配置 WiFi:

方法如何操作
BLE(最简单)使用 ESPHome 应用或 Home Assistant Companion 应用
USB前往 web.esphome.io → Connect → Configure WiFi(不推荐 XIAO ESP32-C5)
强制门户连接到 "ESPectre Fallback" WiFi → http://192.168.4.1

要将您的 XIAO ESP32 设备集成到 Home Assistant 中,您需要将其配置为使用与 Home Assistant 相同的局域网。

就是这样!设备将被 Home Assistant 自动发现。

5. 放置传感器

最佳传感器放置对于可靠的运动检测至关重要。推荐与路由器的距离,最佳范围:3-8 米

距离信号多径灵敏度噪声推荐
< 2m过强最小❌ 太近
3-8m良好最佳
> 10-15m可变❌ 太远

放置提示

应该:

  • 将传感器放置在要监控的区域(不一定与路由器直线对齐)
  • 高度:距离地面 1-1.5 米(桌子/台面高度)
  • 外部天线:使用 IPEX 连接器以获得更好的接收效果

不应该:

  • 避免路由器和传感器之间有金属障碍物(冰箱、金属柜)
  • 避免角落或封闭空间(减少多径分集)

6. Home Assistant 集成

ESPHome 提供自动 Home Assistant 集成。设备烧录并连接到 WiFi 后:

  1. Home Assistant 将自动发现设备
  2. 前往 SettingsDevices & ServicesESPHome
  3. 点击发现设备上的 Configure
  4. 所有传感器将自动添加
  • 请在使用前校准设备。只需按下 Calibrate 按钮;校准完成后按钮状态将自动重置。注意:校准期间房间必须无人。

  • 如果您发现 Home Assistant 可以检测到 Espectre 设备但无法成功添加,只需尝试降低 traffic_generator_rate

在收集 CSI 数据时,CPU 在高中断负载下运行(每秒 100 次或更多)。因此,CSI 数据收集过程和 Home Assistant 通信任务之间会发生资源争用,无论是在硬件级别还是由于有限的网络带宽。

  • 有关更多自动化示例、仪表板示例和更多设置详细信息,请参阅 SETUP.md

7. 配置参数

如果您发现准确性不令人满意,可以通过调整 YAML 文件中 espectre: 部分下的参数来手动微调。调整后,重新构建并上传文件。

参数类型默认值描述
traffic_generator_rateint100CSI 生成的数据包/秒(0=禁用,使用外部流量)
traffic_generator_modestringdns流量生成器模式:dns(UDP 查询)或 ping(ICMP)
publish_intervalintauto传感器更新之间的数据包数(默认:与 traffic_generator_rate 相同,如果流量为 0 则为 100)
segmentation_thresholdfloat1.0运动灵敏度(越低=越敏感)
segmentation_window_sizeint50数据包中的移动方差窗口
selected_subcarrierslistauto固定子载波(省略以进行自动校准)
lowpass_enabledboolfalse启用低通滤波器以降低噪声
lowpass_cutofffloat11.0低通滤波器截止频率(Hz)(5-20)
hampel_enabledboolfalse启用 Hampel 异常值滤波器
hampel_windowint7Hampel 滤波器窗口大小
hampel_thresholdfloat4.0Hampel 滤波器灵敏度(MAD 乘数)
gain_lockstringautoAGC/FFT 增益锁定:autoenableddisabled

有关详细的参数调优(范围、推荐值、故障排除),请参阅 TUNING.md

系统架构

处理管道

ESPectre 使用专注的处理管道进行运动检测:

┌─────────────┐
│ CSI Data │ Raw Wi-Fi Channel State Information
└──────┬──────┘


┌─────────────┐
│ Gain Lock │ AGC/FFT stabilization (~3 seconds)
│ │ Locks hardware gain for stable measurements
└──────┬──────┘


┌─────────────┐
│ Auto │ Automatic subcarrier selection (once at boot)
│ Calibration │ Selects optimal 12 subcarriers via NBVI
└──────┬──────┘


┌─────────────┐
│Normalization│ Attenuate if baseline > 0.25 (always enabled)
│ │ Prevents extreme motion values
└──────┬──────┘


┌─────────────┐
│ Hampel │ Turbulence outlier removal
│ Filter │ (optional, disabled by default)
└──────┬──────┘


┌─────────────┐
│ Low-pass │ Noise reduction (smoothing)
│ Filter │ (optional, disabled by default)
└──────┬──────┘


┌─────────────┐
│Segmentation │ MVS algorithm
│ (MVS) │ IDLE ↔ MOTION
└──────┬──────┘


┌─────────────┐
│ Home │ Native ESPHome integration
│ Assistant │ Binary sensor + Movement/Threshold
└─────────────┘

单个或多个传感器

┌─────────┐  ┌─────────┐  ┌─────────┐
│ ESP32 │ │ ESP32 │ │ ESP32 │
│ Room 1 │ │ Room 2 │ │ Room 3 │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└────────────┴────────────┘

│ ESPHome Native API

┌────────────────────┐
│ Home Assistant │
│ (Auto-discovery) │
└────────────────────┘

每个传感器都会被 Home Assistant 自动发现,包含:

  • 用于运动检测的二进制传感器
  • 运动评分传感器
  • 可调阈值(数字实体)

自动子载波选择

ESPectre 实现了 NBVI(归一化基线变异性指数) 算法用于自动子载波选择,在 零手动配置 的情况下实现接近最优的性能(F1=98.2%)。

⚠️ 重要提示:设备启动后请保持房间 安静和静止 10 秒钟。自动校准在此期间运行,移动会影响检测精度。

有关 NBVI 算法详情,请参阅 ALGORITHMS.md

你可以用它做什么

  • 家庭安防:当你外出时有人进入会收到警报
  • 老人护理:监控活动以检测跌倒或长时间不活动
  • 智能自动化:仅在有人在场时开启灯光/暖气
  • 节能:自动关闭空房间中的设备
  • 儿童监护:夜间离开房间时发出警报
  • 气候控制:仅对有人的区域进行加热/制冷

技术深入探讨

有关算法详情(MVS、NBVI、Hampel 滤波器),请参阅 ALGORITHMS.md

有关性能指标(混淆矩阵、F1 分数、基准测试),请参阅 PERFORMANCE.md

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...