不装摄像头,让 Wi-Fi 自己“看见“房间:ESP32 CSI 无线感知零基础实战指南

不装摄像头,让 Wi-Fi 自己“看见“房间:ESP32 CSI 无线感知零基础实战指南 不装摄像头让 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深夜十一点客厅空无一人。我盯着桌上的路由器发呆如果家里进了人除了摄像头还能靠什么看见答案就藏在一个开源项目里——ESP32 CSI 工具包它让 Wi-Fi 信号获得无线感知能力用空气里的电磁波探测房间有没有人、人往哪走、甚至在做什么动作。这篇文章不是说明书式的罗列而是我从零做一次 CSI 实验的完整手记先讲清楚原理再一步步搭环境、烧固件、看数据、画波形最后介绍更省力的工具和进阶玩法。你不需要懂射频只要有一块 ESP32 和一点好奇心就能跟上。动手之前先回答一个问题CSI 凭什么看得见Wi-Fi 信号从发送端飞向接收端时并不会走直线——它会撞上墙壁、家具、人被一次次反射、绕射最终到达接收端的是无数条路径叠加后的大杂烩。信道状态信息Channel State InformationCSI记录的正是这条信道长什么样每个子载波的幅度、相位和延迟。这为什么能感知人体道理很朴素当一个人从信号路径上走过反射路径就变了接收端看到的大杂烩也随之改变。CSI 对这类变化极其敏感大到走路、跑步小到静坐时的呼吸起伏它都能捕捉到——这就是Wi-Fi 无线感知的底层逻辑。RSSI 是音量旋钮CSI 是整张乐谱过去我们最熟悉的是 RSSI信号强度但它其实很粗心它只给一个总强度数字人从旁边走过这个数字常常纹丝不动。而 CSI 则像一张完整的乐谱几十上百个子载波各自的幅度、相位都清清楚楚任何一声杂音都逃不掉。对比项RSSICSI信息量一个总强度数值每个子载波的幅度、相位、延迟环境敏感度低人走动常常看不出变化高能感知呼吸等细微动作空间分辨率粗细支持厘米级室内定位典型用途信号覆盖、粗略测距人体检测、活动识别、室内定位上图是 Wi-Fi 物理层的完整流程发射端完成符号映射、IDFT 变换后送入信道接收端通过信道估计Channel Estimation把信道特性还原出来。ESP32 输出的 CSI正是这一步得到的信道快照——这也是为什么它能感知环境而不是只知道信号强不强。人一动电磁波就迷路了墙壁、家具、人体都会反射电磁波人站立时和走两步时反射路径完全不同。CSI 记录的是每条路径叠加后的结果所以只要环境中有一点变化数据就会发颤。理解了这一点后面看到波形随人走动而起伏就不会觉得神奇了——那只是电磁波在告诉你有人改变了我走过的路。认识主角一块会读信道的 ESP32 要做 CSI 实验接收端需要能直接输出原始 CSI 数据的硬件。乐鑫的 ESP32 系列正是这样的主角而且门槛很低ESP32、ESP32-S2、ESP32-S3、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-C61 全系列都支持 CSI手里有哪块用哪块。除了读信道ESP32 还有三个隐藏技能让它特别适合做无线感知BLE 辅助可以扫描周围的蓝牙设备和 CSI 数据互补提高检测准确率OTA 升级已部署的设备通过软件升级就能获得 CSI 能力不用换硬件本地 AI双核 240MHz 主频、支持 AI 指令集能在设备本地跑机器学习和神经网络不必把数据全部传到云端。另外ESP32 输出的信息很丰富除了 CSI 本身还附带 RSSI、射频噪声底、接收时间、天线 rx_ctrl 字段等这些在调试时都是宝贵线索。三步搭好 ESP32 CSI 开发环境第一步备齐硬件建议准备两块开发板一块当发送端、一块当接收端推荐 ESP32-C5 或 ESP32-C6并尽量使用外置 IPEX 天线——PCB 板载天线方向性差容易被主板干扰。两块板之间的距离最好大于 1 米太近数据会比较糊。第二步安装 ESP-IDF 并拉取代码开发框架推荐 ESP-IDF v5.0.0 及以上版本更高版本支持目的地址过滤CSI 效果更好。装好后拉取项目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 monitor # 接收端另开一个终端 cd examples/get-started/csi_recv idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB1烧录完成后两块板通过 Wi-Fi 建立连接接收端的串口就会开始输出 CSI 数据。第 1 次实验让路由器当发报员 最快见到 CSI 的方法其实连发送端开发板都不用准备——用现成的路由器就行。原理很简单ESP32 向路由器发送 Ping 包路由器回应的 Ping Reply 里就携带着 CSI 信息接收端顺水推舟把它取出来。这个方案对应examples/get-started/csi_recv_router示例只需一块 ESP32 加一台路由器即可跑通。它适合环境里只有一块 ESP32、且检测范围内有路由器的场景是成本最低、上手最快的入门路线。当然代价是结果受路由器位置、支持的 Wi-Fi 协议等因素影响精度属于够用级别。看懂串口日志那串天书里藏着什么跑通之后串口会刷出一行行形如CSI_DATA,...的日志。第一次看可能会懵其实拆开看很有规律。一行 CSI 数据的结构大致是CSI_DATA,0,94:d9:b3:80:8c:81,-30,11,1,6,...,67,48,4,0,...前面的字段是元数据type数据类型、id设备编号、mac发送端 MAC、rssi信号强度、rate速率、noise_floor射频噪声底、channel信道等最后一对引号里的 data 数组才是主角它按子载波排列每个子载波先存虚部、再存实部即 [1号子载波虚部, 1号子载波实部, 2号子载波虚部, 2号子载波实部, ...]。把这对虚部实部拼起来就得到每个子载波的复数信道信息幅度和相位都能算出来——后续所有的检测算法都是拿这些数字做文章。把 CSI 数据画成图信号如何感应到人光看数字还是不够直观好在项目自带一个可视化脚本。先关掉idf.py monitor然后运行cd examples/get-started/tools pip install -r requirements.txt python csi_data_read_parse.py -p /dev/ttyUSB1屏幕上会实时画出各子载波的幅度波形。这时候你走到两块板之间会看到波形明显扰动坐下不动、呼吸变慢波形又会呈现另一种细微变化——第一次亲眼看到信号在感知我那种感觉非常奇妙。上图是一次真实的测试部署发送端与接收端分置两侧笔记本实时解析数据。两个设备距离 1 米以上人从中间走过波形就会给出反应。第 2、3 次实验另外两种获取 CSI 的方式入门方案解决了有没有下面两种方案解决够不够准、够不够多。方式二设备间直传两块 ESP32 都连上路由器A 板接收 B 板发出的 Ping 包里携带的 CSI。它的好处是不依赖路由器位置也不受路由器下其他联网设备的干扰适合需要多块 ESP32 协同工作的场景。方式三专用设备广播一台专用发送设备持续切换信道广播数据包多块 ESP32 同时接收其中的 CSI。这种方式精度和可靠性最高不受路由器制约多设备环境里也只有一台发送设备对网络干扰很小代价是需要额外一台专用发送设备适合对精度要求高、需要多设备集群定位的场景。三种方式放到一起对比选择思路就很清楚了获取 CSI 的方式所需设备精度主要依赖适用场景路由器回包1×ESP32 路由器中路由器位置、协议单设备快速入门设备间直传2×ESP32 路由器中高路由器协议多设备协同感知专用设备广播N×ESP32 专用发送端最高无高精度集群定位偷懒神器ESP-CSI Tool 帮你采集、标注、分析 ️自己写解析代码能学到东西但如果你想快速进入应用层项目里的 ESP-CSI Tool 能省掉一大半功夫。这是一个图形化工具把采集、显示、标注、分析打包成了开箱即用的功能实时展示CSI 子载波波形、RSSI 波形、射频底噪、Wi-Fi 信道数据一览无余数据采集把收到的 CSI 保存到文件为后续机器学习攒数据集行为标注按不同动作如 move采集数据并打标签方便训练分类模型智能分析内置房间状态判断有人/无人、运动/静止和运动次数统计。界面上半部分是原始 CSI 数据Raw data下半部分是算法处理后的结果Radar model。它特别适合用来快速理解不同天线、不同人体动作、不同设备摆放到底会怎样影响 Wi-Fi 信号。启动它也很简单注意使用 UART 口而不是 USB Serial/JTAG 口cd examples/esp-radar/console_test/tools pip install -r requirements.txt python esp_csi_tool.py -p /dev/ttyUSB1ESP32 人体检测实战ESP-RADAR 与 ESP-Crab 的进阶玩法 工具准备好了接下来看真实应用。examples/esp-radar是官方给出的一组实战示例console_test交互式控制台支持动态配置与采集 CSI 数据附带人体活动检测算法可判断房间有人/无人、人是否在运动connect_rainmaker把采集到的 CSI 数据上报到乐鑫 RainMaker 云平台方便远程查看wifi_sensing_demo基于esp_wifi_sensing组件做运动与人体存在检测支持现场训练、LED 反馈还能用浏览器里的 Web Serial 监控实时诊断。上面这张图就是检测运行时的界面原始 CSI 波形随人体动作起伏右侧的检测模型标出有人/无人的状态下方的柱状图记录运动次数。用它做 ESP32 人体检测实验比纯看日志直观得多。再进一步examples/esp-crab展示了一套更硬核的方案通过双 ESP32-C5 共晶振实现射频相位同步支持自发自收和单发双收两种模式能从 CSI 相位信息中感知毫米级的信号路径扰动为大范围、复杂环境下的无线感知与 CSI 室内定位提供支撑——如果你对前沿算法和定位精度感兴趣这是很好的研究起点。避坑清单五条用踩坑换来的经验实验顺利时很快但翻车往往就在几个细节上。这五条经验值得先抄下来天线选外置 IPEXPCB 板载天线有方向性、易受主板干扰外置天线明显更稳在无人环境测试测试时让房间保持无人避免别人的走动污染你的数据设备间距大于 1 米两块板离得太近数据区分度会大打折扣避开拥挤的信道Wi-Fi 信道太挤会导致丢包、数据混乱换到空闲信道试试做基线校准使用 ESP-CSI Tool 时先在无人房间完成阈值校准可设置延迟和校准时长校准时间越长误判概率越低。尾声当 Wi-Fi 开始认识你的家 回到文章开头那个深夜的问题。曾经我以为不装摄像头还想看见房间是异想天开而这一路实验下来答案已经很清楚Wi-Fi 信号每天都在穿越你的家ESP32 CSI 工具包只是教会它把看到的讲出来。这套能力未来会通向很多地方智能家居里无感的人员检测、健康场景下非接触的生命体征监测、安防领域的入侵识别、工业现场的设备状态感知与 CSI 室内定位……而这一切的起点不过是一块几十块钱的 ESP32 和一段从csi_send开始烧录的固件。如果你的好奇心已经被勾起来了那就按这篇笔记的节奏从第一次实验开始吧——下次再看到那台路由器你可能会忍不住想它又在看什么【免费下载链接】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),仅供参考