👁 796
折腾 RuView WiFi 感知:五台路由器实测,全军覆没
最近发现个叫 RuView 的项目,说能用 WiFi 信号检测人在不在、呼吸、心率,甚至姿态。听着挺玄乎,原理其实不复杂——WiFi 信号在屋里反射来反射去,人一动信号就变,把这些变化采集下来用机器学习分析,就能判断人的状态。
关键数据叫 CSI(信道状态信息),是 WiFi 芯片在物理层算出来的,包含每个子载波的幅度和相位。问题是:这数据芯片算了但驱动不给你看。
我手头有五台路由器,想着能不能白嫖一把,结果挨个试了一遍,全不行。
逐台探测
京东云 AX1800 Pro(192.168.8.8)
SSH 上去一看,IPQ6018 + QCN5024,跑的 ath11k 开源驱动。ath11k 压根没 CSI 接口,debugfs 里翻了个遍,啥也没有。高通的 CSI 功能在闭源 QCS SDK 里,那玩意不给普通人用。
| 项目 | 结果 |
|---|---|
| SoC | IPQ6018 |
| WiFi芯片 | QCN5024 |
| 驱动 | ath11k(开源) |
| CSI | ❌ |
| Spectral | ❌ |
| Monitor模式 | ✅ |
京东云 AX6600(192.168.9.9)
跟 8.8 同门师兄弟,IPQ6018 + QCN9074,也是 ath11k。5G 射频芯片换成了 QCN9074,但驱动一样,CSI 一样没有。
| 项目 | 结果 |
|---|---|
| SoC | IPQ6018 |
| WiFi芯片 | QCN9074(5G) |
| 驱动 | ath11k(开源) |
| CSI | ❌ |
| Spectral | ❌ |
| Monitor模式 | ✅ |
京东云赵云 WiFi7(192.168.1.1)
这台有点意思。IPQ5332 + QCN9224,闭源 qca_ol 驱动,只能 telnet 上去。虽然没有 CSI,但发现了 spectraltool,能跑 Spectral Scan 采集 FFT 功率谱密度。
Spectral 不是 CSI,差在哪?CSI 是每个子载波的幅度+相位,精度高,能检测呼吸心跳;Spectral 是整段频谱的功率分布,只能看个大概——屋里有人走动信号会抖,但呼吸这种微弱变化抓不到。
| 项目 | 结果 |
|---|---|
| SoC | IPQ5332 |
| WiFi芯片 | QCN9224 |
| 驱动 | qca_ol + umac(闭源) |
| CSI | ❌ |
| Spectral | ✅ spectraltool可用 |
| Monitor模式 | ✅ |
| 接入方式 | Telnet only |
京东云 AX6600 新塘版(192.168.28.1)
本来以为这台是 MTK 的,SSH 上去一看,还是 IPQ6018,还是京东云 AX6600,hostname 叫 GodSun-xintang。驱动跟赵云一样是闭源 qca_ol,也有 spectraltool。
| 项目 | 结果 |
|---|---|
| SoC | IPQ6018 |
| WiFi芯片 | QCN5024/QCN9074 |
| 驱动 | qca_ol + umac(闭源) |
| CSI | ❌ |
| Spectral | ✅ spectraltool可用 |
| Monitor模式 | ✅ |
奇虎 360T7(192.168.31.1)——差点成了
这台终于不是高通了!MTK7981B + MT7915,跑的 mt7915e 开源驱动,内核 6.12.40 还挺新。
GitHub 上有个项目 ljk25679/openwrt-mt7915-csi,专门给 MT7915 加 CSI 补丁的 OpenWrt fork。原理是 MT7915 固件本身就会算 CSI(给 Beamforming 用的),只是 mt76 驱动没把数据往用户态传,打个补丁就能导出来。
但——得刷固件。这台机器不在本地,远程刷机变砖了就废了,不敢动。
| 项目 | 结果 |
|---|---|
| SoC | MTK7981B |
| WiFi芯片 | MT7915 |
| 驱动 | mt7915e(mt76开源体系) |
| CSI | ⚠️ 有补丁,需刷固件 |
| Spectral | ❌ |
| Monitor模式 | ✅ |
| 内核 | 6.12.40 |
| 系统 | HWRT 24.10.2(基于OpenWrt) |
汇总
| 路由器 | SoC | WiFi芯片 | 驱动 | CSI | Spectral | 能干啥 |
|---|---|---|---|---|---|---|
| AX1800 Pro | IPQ6018 | QCN5024 | ath11k | ❌ | ❌ | 啥也干不了 |
| AX6600 | IPQ6018 | QCN9074 | ath11k | ❌ | ❌ | 啥也干不了 |
| 赵云WiFi7 | IPQ5332 | QCN9224 | qca_ol | ❌ | ✅ | 粗粒度运动检测 |
| AX6600新塘 | IPQ6018 | QCN5024/9074 | qca_ol | ❌ | ✅ | 粗粒度运动检测 |
| 360T7 | MTK7981B | MT7915 | mt76 | ⚠️需刷机 | ❌ | 远程不敢刷 |
五台机器,没一台能直接出 CSI。
为什么这么难
说白了就一句话:路由器厂商没动力开放 CSI。
CSI 数据对普通用户没用,反而可能被拿来偷窥隐私(隔着墙检测人在不在),所以驱动层默认就丢弃了。高通和联发科都有 CSI SDK,但那是给企业客户做智能家居、安防用的,不公开。
开源驱动这边,ath11k 和 mt76 的开发者主要精力在让 WiFi 正常工作,CSI 导出这种小众需求排不上优先级。
那怎么才能玩
买 ESP32-S3。淘宝六七十块钱一块,刷个 ESP32 CSI Tool 固件,连上你家 WiFi 当专用雷达接收器,CSI 数据通过串口或网络输出,RuView 直接吃。
别折腾路由器了,路由器就是路由器。
—
参考:RuView · openwrt-mt7915-csi · ESP32 CSI Tool
补:用 ESP32 替代路由器,真正跑起 CSI 人体感知
上文折腾五台路由器全灭后,结论很明确:路由器就是路由器,别指望它给你开 CSI。要做到 WiFi 人体感知,最实际的方案是买几块 ESP32,几十块钱搞定。
ESP32 是唯一一款在原厂 ROM 级别开放 CSI 数据接口的消费级芯片。它不需要破解、不需要刷第三方驱动,Espressif 官方 ESP-IDF 里就直接提供了 CSI 采集例程。
硬件选择:ESP32-WROOM-32,不是 S3/S2
市面上 ESP32 的变种很多,但注意:只有原版 ESP32(双核 Xtensa LX6)支持 CSI 数据采集。ESP32-S2/S3/C3/C6 虽然更新更便宜,但 WiFi MAC 层不同,没有 CSI 接口。
| 型号 | 架构 | CSI 支持 | 价格 |
|---|---|---|---|
| ESP32 (原版) | Xtensa LX6 双核 | ✅ 是 | ¥8-15 |
| ESP32-S2 | Xtensa LX7 | ❌ 否 | ¥10 |
| ESP32-S3 | Xtensa LX7 | ❌ 否 | ¥12-18 |
| ESP32-C3/C6 | RISC-V | ❌ 否 | ¥8-12 |
推荐:买 ESP32-WROOM-32 模块,¥10-12/个,配个 USB 转串口板或直接用带 USB 的 DevKit 板。3 块板子总成本 ¥30-50。
系统架构概览
整个系统分三层:
- 采集层:1 块 ESP32 做发射(TX),2-3 块做接收(RX),部署在房间不同位置
- 处理层:GWRT 或 VPS 上跑 Python 接收 UDP 数据,做滤波和位置算法
- 可视化层:Web 面板显示实时热力图
部署布局要点
CSI 检测的是多角度穿过人体的信号反射变化,不是单纯看信号强弱,所以摆放很关键:
| 要素 | 要求 |
|---|---|
| 安装高度 | 离地 1-1.5m(人体躯干区域) |
| 节点间距 | 2-5m 最佳 |
| 布局形状 | 三角形或四边形,覆盖监测区域 |
| 避开 | 金属物体/大功率电器旁边 |
| 供电 | Micro USB 5V1A(普通手机充电头即可) |
| 外壳 | 3D 打印白盒或 86 盒面板,¥5-15/个 |
固件烧录
Espressif 官方提供了 esp-csi 项目,直接用 ESP-IDF 编译烧录:
# 1. 安装 ESP-IDF
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.sh
source export.sh
# 2. 获取 esp-csi 例程
git clone https://github.com/espressif/esp-csi.git
cd esp-csi/examples/console_test
# 3. 配置(TX 或 RX 角色)
idf.py menuconfig
# → Example Configuration → CSI Mode: Sender 或 Receiver
# → WiFi SSID/Password: 填你家 WiFi 的
# 4. 编译烧录
idf.py set-target esp32
idf.py flash -b 921600 -p /dev/ttyUSB0
idf.py monitor
TX 节点负责持续发送 WiFi 包,RX 节点负责捕获 CSI 数据并通过 UDP 上报到服务器。注意:TX 和 RX 必须连接同一个 WiFi 路由器,ESP32 工作在 STA 模式下。
服务端配置(GWRT 或 VPS)
所有 ESP32 RX 节点通过 UDP 发送 CSI 数据到中央服务器(建议端口 5005)。服务器上跑 Python 处理脚本:
# 安装依赖
pip install numpy scipy flask
# 运行 CSI 接收 + 处理 + Web 面板
python3 csi_server.py --port 5005
处理流程:UDP 接收 → CSI 帧解析 → 子载波滤波 → 方差/能量计算 → 活动热力图生成 → WebSocket 推送到前端。
算法并不复杂:
- 空房间采集 30 秒基线数据
- 实时 CSI 与基线做方差比较
- 方差超过阈值 = 有人活动
- 多节点联合 = 三角定位出活动区域
- 呼吸检测需要更低频的滤波(0.2-0.5Hz)
成像效果:虚线骨架 + 热力图
如你所想,CSI 不能拍照片,它输出的是稀疏信号重构——类似一张虚线勾勒的人体骨架,叠加在房间俯视热力图上。
具体来说:
- 活动热力图:用 64 个子载波在每个 ESP32 节点上的幅度变化,反推出哪个区域信号扰动最大。粉色/红色 = 活跃区域,蓝色/深色 = 安静区域
- 骨架重构:通过多节点到达时间差(类似 TDOA)和信号反射路径分析,在空间中重建人体轮廓。效果类似 Wifi DensePose——一条条虚线勾勒出头部、躯干、四肢的位置
- 运动轨迹:热力图上会显示人走过的路径拖影,虚线长短和置信度相关
- 呼吸波形:当人静止时,CSI 的时间序列波形可以直接反映呼吸频率(0.2-0.5Hz 的规律波动)
| 检测维度 | 效果 | 最少 ESP32 |
|---|---|---|
| 有人在/不在 | ✅ 稳定,>95% 准确率 | 1块 |
| 呼吸检测 | ✅ 需滤波处理 | 2块 |
| 活动热力图 | ✅ 米级精度 | 3块 |
| 骨架重构 | ⚠️ 实验阶段,虚线轮廓 | 3块+ |
| 隔墙检测 | ⚠️ 一堵空心砖墙内可用 | 3块+ |
隔墙效果实测
| 场景 | CSI 检测效果 |
|---|---|
| 同房间(无墙) | ✅✅✅ 极佳,呼吸都清晰 |
| 一堵空心砖墙 | ✅✅ 良好,走动明显,呼吸勉强 |
| 一堵混凝土墙 | ⚠️ 只有大幅动作可检测 |
| 两堵墙以上 | ❌ 基本无效 |
| 楼板(楼上楼下) | ❌ 钢筋屏蔽严重 |
还可以同时干别的事
ESP32 是双核处理器,CSI 采集走的是 WiFi MAC 协处理器,不占主 CPU。所以一块 ESP32 可以一边跑 CSI 一边干其他事:
- 读取温湿度传感器(DHT22/BME280)
- 控制继电器开关
- 通过 MQTT 上报到 HomeAssistant
- 驱动板载 LED 指示灯
一块 ¥10 的 ESP32 = 人体传感器 + 温湿度计 + 智能开关 + MQTT 网关,性价比拉满。
推荐项目 & 参考
- Espressif ESP-CSI(官方,最稳定):github.com/espressif/esp-csi
- ESP32 CSI Tool(学术常用):github.com/StevenMHernandez/ESP32-CSI-Tool
- RuView(全栈方案,含可视化面板):github.com/ruvnet/RuView
- CSI 学术论文清单:github.com/Marsrocky/Awesome-WiFi-CSI-Sensing
采购清单
| 物品 | 数量 | 预估价格 |
|---|---|---|
| ESP32-WROOM-32 DevKit | 3块 | ¥30-45 |
| Micro USB 线 | 3条 | ¥15(家里一般有现成的) |
| 5V1A 充电头 | 3个 | ¥15 |
| 3D 打印外壳 | 3个 | ¥15-30 |
| 总计 | ¥60-105 |
所有东西淘宝搜就有。买回来一晚上就能搭好原型——刷固件(30分钟)→ 摆位置(10分钟)→ 启动服务器(15分钟)→ 看热力图。比折腾路由器改内核省心一百倍。
💖 打赏支持
如果这篇文章帮到了你,欢迎打赏支持
微信扫一扫,赞赏支持
发表回复