Wi-Fi感知入门:3步用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。esp-csi 项目让 ESP32 这枚几十块钱的芯片变成一台无线感知设备,不加摄像头、不加雷达,只靠普通信号就能检测人体移动、追踪位置。听起来像科幻?继续往下读,你很快就能亲手复现。
一句话讲透:Wi-Fi信号就像湖面的水波
想象你站在湖边丢下一颗石子,涟漪一圈圈散开,碰到岸边的石头、水里的树枝,波纹就会扭曲变形。Wi-Fi 信号就是这些"涟漪",而墙壁、家具、你的身体,都是搅动波纹的"石头"。
传统上我们只知道信号"强不强"——这是 RSSI,它只有一个数字。而 CSI(信道状态信息)能看到每一圈"波纹"的完整形状:幅度多大、相位如何偏移。Wi-Fi 用 OFDM 方式同时在几十个子载波上传输,相当于在湖面激起了几十圈波纹。当你从信号路径上走过,这些子载波的幅度和相位会发生细微但规律的变化。
检测人体,本质就是观察这些数字的变化。
从装环境到首次出数据:你的第一份CSI上手路线 🚀
第一步:准备硬件
你需要两块 ESP32 开发板,一块当发送端,一块当接收端。项目推荐 ESP32-C5 / ESP32-C6,两者的射频性能是系列里目前最好的。还有两个小建议:尽量选外置 IPEX 天线(PCB 天线方向性差、容易被主板干扰);两块板子之间保持 1 米以上距离。
第二步:搭建软件环境
安装 ESP-IDF(建议 v5.0 及以上版本),然后克隆仓库并进入示例目录:
git clone https://gitcode.com/GitHub_Trending/es/esp-csi cd esp-csi第三步:烧录两块板子的固件
打开两个终端,分别烧录发送端和接收端:
# 终端1:发送端 cd examples/get-started/csi_send idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB0 monitor # 终端2:接收端 cd examples/get-started/csi_recv idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB1第四步:用Python工具看实时波形
先关掉接收端的串口监视器,再运行解析脚本:
cd examples/get-started/tools pip install -r requirements.txt python csi_data_read_parse.py -p /dev/ttyUSB1一个波形窗口会弹出来,几十条子载波曲线实时跳动。现在走到两块板子中间挥挥手——你会亲眼看到波形出现明显的起伏。这就是你的第一份"看得见"的人体检测。
看懂一行CSI数据:从原始日志到人体检测
打开接收端的串口监视器,你会看到源源不断的 CSI_DATA 日志,像这样(截取了一部分):
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,...]"这行"天书"拆开只有三部分:
- 数据头:开头的
CSI_DATA是类型标志,告诉解析程序"这是CSI行"。 - 元数据:逗号分隔的一串数字,依次是序号、发送方 MAC 地址、RSSI、速率、信道、时间戳等。比如
-30是信号强度,13是当前信道,2751923是本地时间戳。ESP32-C5/C6 的字段略有精简,但思路一致。 - 核心的 data 数组:方括号里那串数才是真正的"透视眼"。它按子载波排列,每个子载波占两个数——先虚部、后实部,即 [子载波1虚部, 子载波1实部, 子载波2虚部, 子载波2实部, ...]。
把每一对虚实部换算成幅度和相位画成曲线,就是波形窗口里跳动的线条。当人走动时,各子载波的幅度和相位会同步偏移——机器学习模型正是靠这种变化模式,区分"没人""有人走动""有人静止"等状态。
如何选对获取信号的方案:三条路线对比 📡
同一个 Wi-Fi 感知,获取 CSI 的途径有三条,选错会直接影响部署成本和效果。
| 方案 | 工作方式 | 优点 | 短板 | 什么时候选 |
|---|---|---|---|---|
| 路由器模式 | ESP32 向路由器发 Ping,接收回复里的 CSI | 一块板子加现成路由器,成本最低 | 依赖路由器位置,易受其他联网设备干扰 | 入门尝鲜、环境里正好有路由器 |
| 设备直连 | 两个 ESP32 都连路由器,互相收对方的 Ping 包 | 不依赖路由器位置,部署灵活 | 需要两块板子 | 需要多设备协同覆盖 |
| 专用广播 | 发送端切换信道持续广播,多个接收端同时采集 | 精度最高,多设备下对网络干扰小 | 要专门准备发送设备 | 高精度定位、多设备集群 |
新手最容易踩的5个坑
- 用PCB天线做实验:PCB 天线方向性强、紧贴主板,感知效果大打折扣。换成外置 IPEX 天线,差距立竿见影。
- 两块板子贴太近:距离小于 1 米时信号路径太短,人体扰动被淹没。拉到 1 米以上再测。
- 信道选得太拥挤:日志频繁出现
ESP-NOW 发送错误,多半是当前信道拥堵导致缓冲区满了。换一个空闲信道即可。 - 串口数据突然错乱:绘图工具 CPU 占用高,电脑来不及读串口缓冲,日志出现
element number is not equal。把波特率调高(如 921600)能明显缓解。 - 在有人走动的环境里校准:基线数据混入他人活动,后续所有判断都会漂移。校准请在无人环境完成。
想象空间:当路由器学会"看"房间
也许不久后,家里的路由器不再只是"发Wi-Fi的盒子":它能在夜里察觉老人跌倒,能在婴儿房监测呼吸起伏;商场能用信号画顾客热力图,工厂能用信号看设备是否异常。把"连接"变成"感知",是无线技术正在发生的一场静默升级。
现在就动手:克隆仓库,点亮你的第一份数据 ⚡
从一块板、一个路由器开始,用十分钟跑通你的第一个 Wi-Fi 感知 demo。想深入了解可以阅读官方文档 docs/zh_CN/CSI-Applications.md 了解应用场景,或在 examples/esp-radar/ 里体验自带图形界面的 ESP-CSI Tool。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),仅供参考