👁 795

折腾 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 CSI 系统架构图
ESP32 CSI 系统架构:多节点部署 + 服务端处理 + Web 可视化

硬件选择: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 面板显示实时热力图
ESP32 部署布局方案
3 节点三角布局方案:1 TX + 2-3 RX,隔墙可部分穿透

部署布局要点

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 人体感知成像效果
左:俯视活动热力图,右:DensePose 式虚线骨架重构

成像效果:虚线骨架 + 热力图

如你所想,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 网关,性价比拉满。

推荐项目 & 参考

采购清单

物品 数量 预估价格
ESP32-WROOM-32 DevKit 3块 ¥30-45
Micro USB 线 3条 ¥15(家里一般有现成的)
5V1A 充电头 3个 ¥15
3D 打印外壳 3个 ¥15-30
总计 ¥60-105

所有东西淘宝搜就有。买回来一晚上就能搭好原型——刷固件(30分钟)→ 摆位置(10分钟)→ 启动服务器(15分钟)→ 看热力图。比折腾路由器改内核省心一百倍。