news 2026/8/21 17:14:53

Wi-Fi感知入门:3步用ESP32 CSI实现室内定位与人体检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Wi-Fi感知入门:3步用ESP32 CSI实现室内定位与人体检测

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个坑

  1. 用PCB天线做实验:PCB 天线方向性强、紧贴主板,感知效果大打折扣。换成外置 IPEX 天线,差距立竿见影。
  2. 两块板子贴太近:距离小于 1 米时信号路径太短,人体扰动被淹没。拉到 1 米以上再测。
  3. 信道选得太拥挤:日志频繁出现ESP-NOW 发送错误,多半是当前信道拥堵导致缓冲区满了。换一个空闲信道即可。
  4. 串口数据突然错乱:绘图工具 CPU 占用高,电脑来不及读串口缓冲,日志出现element number is not equal。把波特率调高(如 921600)能明显缓解。
  5. 在有人走动的环境里校准:基线数据混入他人活动,后续所有判断都会漂移。校准请在无人环境完成。

想象空间:当路由器学会"看"房间

也许不久后,家里的路由器不再只是"发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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!