15分钟实战:用WiFi信号搭建运动检测系统

50 次阅读 0 点赞 0 评论 8 分钟原创技术教程

无需摄像头与麦克风,仅靠一块支持CSI的ESP32开发板,即可搭建隐私友好的运动检测系统。本文手把手演示如何通过ESPHome刷入固件、接入Home Assistant,并编写“人来灯亮”自动化脚本。附传感器摆放指南与调优技巧,快速跑通智能联动。

#智能家居 #ESP32 #HomeAssistant #ESPHome #WiFi #运动检测 #物联网 #开源硬件
15分钟实战:用WiFi信号搭建运动检测系统

15分钟实战:用WiFi信号搭建运动检测系统

想用人体感应控制灯光,传统 PIR 传感器存在死角,摄像头侵犯隐私,毫米波雷达又价格昂贵。借助开源方案,我们可以利用 WiFi 信道状态信息(CSI)实现无感运动检测。无需任何摄像头或麦克风,硬件成本仅需十元左右。学完本教程,你将用一块 ESP32 开发板搭建独立运动传感器,并接入 Home Assistant 实现人来灯亮、离家报警等自动化场景。

环境与物料准备

硬件清单:

  • 支持 CSI 的 ESP32 开发板(推荐 ESP32-S3 或 ESP32-C6,淘宝渠道易购)
  • 2.4GHz 无线路由器(家庭日常使用即可,无需调整底层配置)

软件环境:

  • Home Assistant(运行于树莓派、NAS、旧电脑或 Docker 均可)
  • 已安装 ESPHome 官方集成插件

知识储备:

  • 能够编写基础 YAML 配置(注意缩进对齐,避免空格混用 Tab)
  • 熟悉 Home Assistant 界面基本操作
  • 全程零代码,无需侵入路由器后台

核心配置:刷入 ESPHome 固件

ESPectre 的核心原理在于分析路由器与 ESP32 之间 2.4GHz 信号的多径传播。人体穿过空间时会扰动电磁波路径,ESP32 捕获信道状态信息的幅度变化即可判定运动状态。

在 Home Assistant 侧边栏打开 ESPHome,点击新建节点并填入以下完整配置。注意替换 WiFi 凭据:

yaml 复制代码
esphome:
  name: espectre-sensor
  platformio_options:
    lib_deps:
      - https://github.com/francescopace/espectre

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf

wifi:
  ssid: "你的WiFi名称"
  password: "你的WiFi密码"

espectre:
  detection_algorithm: mvs        # 经典算法稳定可靠;实验性神经网络填 ml
  segmentation_threshold: auto    # auto 自适应环境,也可手动填入固定数值
  auto_calibration_time: 10s      # 启动后保持房间静止的校准时间

binary_sensor:
  - platform: espectre
    name: "Room Motion"
    device_class: motion

sensor:
  - platform: espectre
    type: movement_score
    name: "Movement Score"

关键参数解读:

  • detection_algorithm:推荐新手使用 mvs 算法,逻辑成熟且抗干扰能力强。ml 为实验性神经网络,免校准但仍在持续迭代,生产环境建议优先用 MVS。
  • segmentation_threshold:决定多大扰动才触发状态翻转。设置为 auto 时系统会自动适配环境底噪;若发现误报频繁或漏报,可改为手动数值(如 3500)。
  • auto_calibration_time:设备上电后需要建立静止环境基线。校准期间请勿在监测区域内走动,否则基准线偏移会导致后续误判。

配置完成后点击 INSTALL。首次刷入建议使用 USB 数据线直连电脑,选择对应串口即可。固件编译烧录成功后,开发板会自动连接局域网并注册到本地网络。

接入 Home Assistant 与自动化编排

ESPHome 设备上线后会自动被 Home Assistant 发现并添加至设备列表。实体面板中将直接生成:

  • 一个 Binary Sensor(实时上报运动状态,响应毫秒级)
  • 一个 Sensor(周期性上报运动分数,用于量化分析)
  • 一个 Number Entity(支持在线动态调节阈值,修改立即生效,无需重新烧录)

硬件就绪后,验证基础功能:打开 binary_sensor.room_motion 的状态面板,在房间内正常走动,观察状态是否从 off 跳变为 on

接下来配置自动化逻辑。切换至 YAML 编辑模式,输入以下配置实现“人来开灯、人走关灯”:

yaml 复制代码
alias: "书房人来灯亮"
description: "检测到运动自动开灯,30 秒无运动后关灯"
trigger:
  - platform: state
    entity_id: binary_sensor.room_motion
    to: "on"
    id: motion_on
  - platform: state
    entity_id: binary_sensor.room_motion
    to: "off"
    for:
      seconds: 30
    id: motion_off
action:
  - choose:
      - conditions:
          - condition: trigger
            id: motion_on
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.study_desk
      - conditions:
          - condition: trigger
            id: motion_off
        sequence:
          - service: light.turn_off
            target:
              entity_id: light.study_desk
mode: single

保存并启用自动化。进出房间即可验证灯具是否按预期响应。for: seconds: 30 的设置可有效避免因短暂转身导致的频繁开关灯。

部署调优与避坑指南

传感器物理摆放直接决定检测精度。遵循以下原则可避开绝大多数干扰:

距离控制: 最佳工作区间为路由器 3 ~ 8 米。距离小于 2 米信号过强,多径反射效应减弱导致灵敏度下降;超过 10 米信号衰减严重,底噪升高易引发随机误报。
位置选择: 放置在需要监控的区域内部,无需与路由器保持直线可视。高度建议 1 ~ 1.5 米(桌面高度最佳),贴合人体活动平面。
环境避开: 远离冰箱、金属文件柜等强反射物,避开死角或密闭小空间,确保电磁波具备足够的多径反射路径。若开发板带有 IPEX 接口,外接全向天线可显著提升覆盖率。

常见问题排查:

  • 启动初期检测失灵:自动校准尚未完成或校准期间有人走动。保持环境静止 10 秒即可恢复。若启用 ml 算法则跳过此步骤。
  • 误报频繁(如窗帘摆动触发):调高 Number 实体的阈值,或在 YAML 中将 segmentation_threshold 设为固定高值,抬高触发门槛。
  • 检测迟钝:核对设备与路由器间距是否在有效区间。缩短距离或移除中间金属遮挡物。
  • 断网运行状态:检测算法完全在 ESP32 本地执行,离线不影响底层判断。网络恢复后,Home Assistant 会自动同步最新状态队列。

场景延伸

单节点设备可覆盖约 50 平方米空间。大户型部署多块开发板即可实现全屋分区监测。基于此基础,可进一步拓展节能控制(无人自动切断非必要电器)、长辈看护(长时间静止触发关怀提醒)或安防布防(离家模式入侵推送告警)。

完整算法文档与高级调优参数详见项目仓库。动手搭建过程中遇到边界场景或独创玩法,欢迎交流分享。

项目地址:github.com/francescopace/espectre

最后更新:2026-06-10T10:04:16

评论 (0)

发表评论

blog.comments.form.loading
0/500
加载评论中...