Wi-Fi室内定位与人体检测不装摄像头怎么做?ESP32 CSI开源套件全解析
【免费下载链接】esp-csiApplications based on Wi-Fi CSI (Channel state information), such as indoor positioning, human detection项目地址: https://gitcode.com/GitHub_Trending/es/esp-csi
房间里有几个人、人走到了哪个位置、是坐着还是起身走动……如果告诉你,这些信息可以不用摄像头、不用雷达,只靠房间里的Wi-Fi信号本身就能获取,你会不会觉得不可思议?
这正是 ESP32 CSI 开源套件(esp-csi)在做的事:它让开发者直接读取 ESP32 微控制器上报的信道状态信息(CSI),从而搭建 Wi-Fi 室内定位与人体检测应用。这篇指南会从"Wi-Fi 为什么能感知人体"讲起,再到三条取数路线、30 分钟跑通 Demo、数据解读与进阶玩法,一次讲透。
从一个日常疑问说起:Wi-Fi 真的能"感知"人在动吗?
先做个思想实验:你站在路由器和手机之间,Wi-Fi 网速会变差——这几乎是所有人的共同经验。为什么?因为人体挡住了信号、改变了信号的传播路径。
问题在于,传统信号强度指标(RSSI)只能告诉你"信号变弱了多少",它丢失了大量细节。而 CSI 提供的是一条无线链路的完整"体检报告":每个子载波上的幅度、相位、延迟等丰富信息。当人走过信号覆盖区,这些参数会发生可测量的扰动,CSI 恰好能把这些扰动精确记录下来。
| 对比维度 | RSSI(信号强度) | CSI(信道状态信息) |
|---|---|---|
| 信息量 | 一个标量,只有强度 | 多子载波上的幅度+相位 |
| 对细微动作的敏感度 | 低,只有明显遮挡才变化 | 高,可感知呼吸、咀嚼级别扰动 |
| 定位/检测能力 | 仅能粗略测距 | 支持轨迹追踪与活动识别 |
| 数据量 | 极小 | 每个数据包含数十个子载波复数 |
打个比方:RSSI 像只看得到"灯亮了没有",CSI 则像能看到"灯光的明暗节奏、颜色变化"。正因如此,Wi-Fi CSI 不仅能捕捉走动、奔跑这类大动作,还能在静态环境下感知呼吸引起的微小信号波动——这让"非接触式生命体征监测"成为可能。
先看一张图:CSI 诞生在无线通信的哪个环节
想用好 CSI,得先知道它从哪来。下面这张发射-接收架构图,展示了 Wi-Fi 通信的完整链路:
信号在空气中传播时会经过墙壁、家具、人体等障碍物的多次反射,形成"多径效应"。接收端要做一件关键的事——信道估计(Channel Estimation):把"信号在信道里经历了什么"推算出来,以便补偿失真、恢复原始数据。而这份推算结果,就是 CSI。
项目文档对 OFDM 调制、子载波结构、多径信道做了循序渐进的讲解,推荐从 OFDM-introduction.md 和 Wireless-Channel-Fundamentals.md 入手,先建立整体认知再上手实验。
三条取数路线怎么选:路由器中转、设备直连与专用广播
了解了原理,接下来是核心问题:CSI 数据怎么拿到手?项目提供了三条成熟路线,成本、精度、适用场景各不相同。
路线一:借路由器中转,最省事的入门方案
原理一句话:ESP32 连上路由器,向它持续发送 Ping 包,路由器返回的 Ping 回复里就带着 CSI 信息。只需一块 ESP32 加一个现成路由器即可运行,零额外硬件成本,是体验 CSI 的第一站。适合环境中本来就有路由器、想快速验证概念的场景。
路线二:双设备互发 Ping,部署位置更自由
当你的环境里本来就要布多台 ESP32 时,可以让设备 A 与设备 B 都挂在路由器上、互相发送 Ping 包,CSI 便随之传递。它的优势在于不受路由器摆放位置制约,也不受路由器下其他联网设备干扰,适合多节点协同的场景。
路线三:专用设备广播,追求最高精度
如果对检测精度有硬要求,可以单独安排一台 ESP32 作为"专用发射机",持续切换信道发送广播包,其余多台设备同时接收 CSI。它不依赖路由器、对现有网络干扰小,是多设备集群做厘米级定位的首选。
一张表帮你做决定
| 对比项 | 路由器中转 | 设备直连 | 专用广播 |
|---|---|---|---|
| 硬件成本 | 最低(1块板+路由器) | 中(至少2块板) | 中高(需专用发射端) |
| 部署灵活性 | 依赖路由器位置 | 灵活 | 最灵活 |
| 检测精度 | 入门级 | 中等 | 最高 |
| 抗干扰能力 | 一般 | 较好 | 好 |
| 典型场景 | 单设备尝鲜 | 多设备协同 | 高精度集群定位 |
另外,项目文档里还有一张综合示意图,对比了"路由器作为发送端"与"ESP32 作为发送端"两种架构:
注意右侧那条路径:两块 ESP32 之间可以通过esp-now协议直连互传 CSI,完全绕开路由器——这为某些无路由器的封闭场景提供了更干净的取数方案。
最短路径上手:烧录两个固件,跑出第一份 CSI 波形
理论讲再多,不如自己跑一次。下面这条路径可以在 30 分钟内跑通,全程无需写一行业务代码。
第一步:准备硬件
- 两块 ESP32 系列开发板(官方推荐 ESP32-C5 或 ESP32-C6,本文示例以 ESP32-C3 演示),一块做发送端,一块做接收端;
- 建议给两块板子都换上外置天线——PCB 天线方向性强、易受主板干扰,会影响数据质量;
- 一根连接串口的 USB 线。
第二步:搭好软件环境
- 安装 ESP-IDF 开发框架(推荐v5.0.0 及以上版本);
- 拉取项目仓库:
git clone https://gitcode.com/GitHub_Trending/es/esp-csi cd esp-csi第三步:分别烧录发送端与接收端
# 发送端固件 cd examples/get-started/csi_send idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB0# 接收端固件 cd examples/get-started/csi_recv idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB1两块板子间隔建议保持在 1 米以上,避免近距离强信号压制导致数据失真。
第四步:用 Python 工具实时看波形
cd examples/get-started/tools pip install -r requirements.txt python csi_data_read_parse.py -p /dev/ttyUSB1串口终端里会持续滚动 CSI 日志(包括设备号、MAC、RSSI、速率、带宽等),配套的网页查看器则能把 CSI 幅度实时画成波形。当你从发射端与接收端之间走过时,会直观看到波形随之变化——这就是 Wi-Fi 人体检测的原始素材。
拆解一行数据:CSI 日志里到底有什么
拿到数据后,很多人会被一行长日志吓到。其实拆开看并不复杂,以一条典型记录为例:
CSI_DATA,0,94:d9:b3:80:8c:81,-30,11,1,6,1,0,1,0,1,0,0,-93,0,13,2,2751923,0,67,0,128,1,"[67,48,4,0,...]"- 设备与链路信息:设备 ID、发射端 MAC 地址、RSSI、速率、带宽等,用于区分数据来源和链路状态;
- 接收状态字段:射频噪声底、接收时间等,帮助评估信号质量;
- CSI 数据体:最后引号内的数组,存储各子载波的复数信道信息,每个子载波先存虚部、再存实部。
理解了字段结构,就能在 Signal-Processing-Fundamentals.md 等文档的辅助下,对数据进行滤波、降噪、特征提取,为后续算法做准备。
从波形到决策:把 CSI 变成"雷达"的进阶玩法
原始 CSI 只是素材,真正值钱的是把它变成"判断"。项目在examples/下提供了三个层层递进的进阶样例。
图形化分析台:ESP-CSI Tool
examples/esp-radar/console_test目录里内置了一整套带图形界面的分析工具,界面长这样:
它能做到的事情相当完整:
- 实时观测:同时查看射频噪声底、CSI、RSSI 等多路数据的动态变化;
- 数据采集:把全量 CSI 一键落盘保存,供离线分析;
- 行为标注:为行走、静坐、起身等行为打标签,直接服务于机器学习训练;
- 智能判断:内置人体移动检测与房间人员状态识别模型。
对于研究者来说,这个工具是理解"天线配置、人体移动、设备摆放如何影响 CSI"的绝佳实验台。
人体检测雷达:wifi_sensing_demo 与 console_test
examples/esp-radar/下的两个工程展示了把 CSI 变成"雷达"的完整链路:通过分析 CSI 变化模式识别行走、跑步、坐下、起身等动作,还能进一步细分到呼吸、心跳级别的微动。配合网页串口监视器等工具,可以在一台浏览器里完成远程观测。
更精的测向玩法:ESP-Crab
如果觉得"检测有没有人"还不够,examples/esp-crab展示了双天线测向的玩法——通过对比两根天线的相位差异,判断信号来向,从而实现角度级的定位追踪。项目提供了完整的 PCB 图纸与电路图说明,适合愿意动手做硬件的玩家深入研究。
能落地的典型应用
| 应用方向 | 具体能力 |
|---|---|
| 室内定位 | 厘米级位置追踪、多人同时定位、实时轨迹绘制 |
| 人体活动检测 | 大幅运动识别、姿势变化感知、呼吸/心跳微动监测 |
| 环境感知 | 门窗开关状态检测、物体移动识别、环境扰动监测 |
为什么这套开源方案值得一试
- 硬件选择极宽:ESP32、ESP32-S2、ESP32-C3、ESP32-S3、ESP32-C5、ESP32-C6、ESP32-C61 全系列支持 CSI;
- 信息维度丰富:除 CSI 外还提供 RSSI、射频噪声底、接收时间及天线的
rx_ctrl字段; - 多模态辅助:ESP32 自带 BLE,可扫描周围蓝牙设备作为检测的辅助信号源;
- 算力够用:双核 240MHz 并支持 AI 指令集,能直接跑轻量机器学习与神经网络推理;
- 升级路径平滑:现有基于 ESP32 的物联网项目可通过软件 OTA 升级获得 CSI 能力,无需更换硬件。
高频翻车点与规避清单
实践中最常见的问题,多出在环境和细节上,这里提前给你一份"避坑清单":
- 天线优先选外置:IPEX 外置天线效果明显优于 PCB 天线,后者方向性强、受主板布局影响大;
- 测试选"无人环境":旁边有人走动会让数据混入干扰,建议在无人房间完成基线测试;
- 设备保持距离:发射端与接收端间距应大于 1 米;
- 信道要挑空的:避开拥挤的 Wi-Fi 信道,优先选择相对空闲的频率段;
- 先校准再使用:在稳定环境中采集基线数据并设定阈值,能显著压制环境噪声带来的误判。
通往深度应用的资料地图
项目仓库内置了系统化的中文文档,按下面顺序阅读体验最佳:
- Wireless-indicators-CSI-and-RSSI.md:先弄清 CSI 与 RSSI 的本质区别;
- OFDM-introduction.md:理解子载波与 OFDM 调制,这是读懂数据的前提;
- Wireless-Channel-Fundamentals.md:多径传播与信道建模;
- Signal-Processing-Fundamentals.md:滤波、降噪等信号处理基础;
- Introduction-to-Wireless-Location.md:定位算法的原理与选型;
- CSI-Applications.md:各类应用案例速览。
示例代码统一放在examples/目录下,get-started适合入门,esp-radar适合做人体检测,esp-crab适合研究测向定位。
下一步:现在就动手
Wi-Fi CSI 是一个正在快速成熟的技术方向:智能家居里的无感人员检测、健康场景下的非接触式生命体征监测、安防里的入侵识别、工业里的设备状态监控……都在这条赛道上展开。而这个开源套件已经把门槛降到了"两块开发板 + 三行命令"。
最有效的学习方式永远是亲手跑一遍:clone 仓库,从examples/get-started的路由器方案开始,烧录固件、打开波形、从设备前走过,亲眼看看 CSI 数据是如何回应你的动作。跑通之后,再沿着本文的路线图去尝试设备直连、专用广播和 ESP-RADAR 进阶玩法。等你真正上手,会发现 Wi-Fi 世界里还藏着很多值得探索的东西。
【免费下载链接】esp-csiApplications based on Wi-Fi CSI (Channel state information), such as indoor positioning, human detection项目地址: https://gitcode.com/GitHub_Trending/es/esp-csi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考