房间里没装摄像头,Wi-Fi 凭什么知道“有人进来了“?ESP32 开源 CSI 工具包从零入门室内定位与人体检测

📅 2026/8/18 16:17:11
房间里没装摄像头,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深夜加班回到家你希望灯能自动亮起却不想在卧室里装摄像头。这个看似矛盾的需求恰好是 esp-csi 这个开源项目想解决的问题——它把 ESP32 芯片的 Wi-Fi 信道状态信息CSI开放给普通开发者用来做室内定位、人体检测、动作识别等无接触的环境感知应用。简单说你家里每天都在收发信号的那台路由器其实也可以兼任一台看不见的传感器。这篇文章不打算给你堆概念而是像带朋友动手一样从Wi-Fi 为什么能感知环境讲起一路走到数据到手、波形点亮、能判断房间里有没有人。你只需要两块开发板、一台能上网的路由器外加一点耐心。深夜回到家你最想开的那盏灯Wi-Fi 能替你打开吗先从一个具体的夜晚说起。你加班到十一点拎着钥匙站在家门口。屋里黑着灯你犹豫是先摸黑去按开关还是先掏出手机打开 App如果家里有一套自动感应系统它应该在你推门的瞬间就把灯点亮。可问题是——你不想为这件事在家里装摄像头。隐私、成本、布线每一条都让人打退堂鼓。其实你家的 Wi-Fi 信号早就覆盖了每个房间。问题只在于Wi-Fi 不是用来上网的吗它怎么会知道房间里有没有人答案藏在信道状态信息Channel State InformationCSI里。Wi-Fi 信号从发射端飞到接收端的过程中会穿墙、反弹、折射而房间里的任何移动——人走过、门打开、窗帘飘动——都会改变信号的传播路径。CSI 记录的正是这种变化。esp-csi 项目做的就是把 ESP32 芯片里原本只服务于通信的这部分数据挖出来交给普通开发者去做室内定位和人体检测。第一关 · 原理课RSSI 是音量表CSI 才是波纹图样要理解 CSI先得理解它和另一个老熟人——信号强度RSSI——的区别。很多路由器 App 都能显示信号格数那就是 RSSI。打个比方往一潭平静的水面扔一块石头波纹会一圈圈荡开。你站在岸边想知道水花大不大RSSI 能回答你——它只给你一个数字代表信号整体强不强。但如果你想知道波纹经过了什么障碍物、从哪里绕过来的RSSI 就无能为力了因为它把水面所有细节都压成了一个字。CSI 则完全不同。Wi-Fi 信号不是一束简单的光而是由几十个不同频率的子载波叠加而成的波纹图样这正是 OFDM 调制做的事。CSI 会逐个子载波记录下幅度和相位相当于把整幅波纹图样逐格拍照存档。当一个人从信号路径上走过某些子载波的相位被扰动、幅度被压低CSI 里会留下清清楚楚的痕迹。所以严谨一点说CSI 是描述无线信道特征的参数集合包含幅度、相位、时延等信息它对环境变化极其敏感大到走路跑步小到静止状态下人的呼吸起伏都会在数据里留下印记。下图展示了 CSI 的诞生过程——发射端把数据逐级调制送入信道接收端通过信道估计把波纹图样反解出来这一步就是 CSI 数据的来源。看到这里你可能会问道理懂了可这些数据怎么拿到手这就进入第二关。第二关 · 选路课三条采集路径按你的装备挑一条拿 CSI 的方式不止一种选哪条取决于你手上有几块板子、能不能控制路由器。我们把三条路都走一遍你按自己的处境对号入座。省事路线蹭路由器的 Ping 回包1 块板 路由器如果你手头只有一块 ESP32家里刚好有路由器这是最省事的起步方式。原理很简单ESP32 向路由器发一个 Ping 包路由器回应的 Ping 回复里就夹带着 CSI 信息接收端顺手把它解析出来即可。这条路的好处是成本最低、一根串口线就能跑通代价是你得迁就路由器——它的摆放位置、支持的 Wi-Fi 协议、回包节奏都会影响数据质量而且路由器下如果挂着别的设备难免互相干扰。灵活路线两块 ESP32 互相递话2 块板 路由器觉得路由器不听话那就让两台 ESP32 自己组队。两块板子都连上路由器彼此互发 Ping 包接收方从对方发来的包里取 CSI。这样一来采集链路不再依赖路由器的位置路由器底下挂了多少设备也无所谓了。代价是你要多准备一块开发板而且通信仍然要借路由器的桥协议兼容性依然是隐形的天花板。高阶路线自建广播站喂饱一群接收端N1 块板如果你要做的不是单点检测而是多设备组网定位——比如用三四个 ESP32 同时监听交叉定位出人的位置——那就该上广播站方案了。单独一块 ESP32 专职当发送端不停切换 Wi-Fi 信道向外广播数据包周围所有接收板都能拿到同一份 CSI。这条路检测精度最高、彻底摆脱路由器约束多设备共享一个发送源对网络环境的扰动也小。唯一的缺点是要额外添置一台发送板成本略升。新手阶段建议先走省事路线把流程跑通再按需升级。第三关 · 实操课半小时点亮第一张 CSI 波形图选定路线接下来就是动手环节。以最经典的两设备直连方案为例。硬件清单两块 ESP32 开发板一块当发送端一块当接收端。射频性能上ESP32-C5 支持双频通信是目前射频表现最好的选择ESP32-C6 则是已上市芯片中的佼佼者预算有限用 ESP32-C3 入门也完全够用。强烈建议给板子接外置 IPEX 天线——PCB 天线有方向性且容易受主板干扰会让数据大打折扣。另外两块板之间至少保持 1 米距离否则信号过于贴脸感知效果反而不佳。软件环境安装 ESP-IDF 开发框架推荐 v5.0.0 及以上版本新版本支持目的地址过滤采集效果更好然后拉取项目代码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烧录完成后串口里会滚动输出接收端的运行日志看到类似下面的画面就说明链路已经建立最后一步把数据画出来。项目自带 Python 可视化脚本先关掉idf.py monitor释放串口再运行cd examples/get-started/tools pip install -r requirements.txt python csi_data_read_parse.py -p /dev/ttyUSB1屏幕上很快会出现几十条跳动的曲线——那就是各个子载波幅度随时间的实时变化。这时你从设备前走过会看到波形明显扰动恭喜你的第一套 Wi-Fi 感知系统已经活了。第四关 · 读数课一行日志里藏着几十路波纹的秘密波形是看图但要想认真做检测还得能读数字。CSI 在串口里是一行行日志比如这样已简化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,...]别看它长拆开就两类信息。前面是元数据mac是发送方地址rssi是接收信号强度rate是速率channel是当前 Wi-Fi 信道noise_floor是射频噪声底local_timestamp是接收时刻——这些字段帮你判断这条数据是在什么条件下采的。最后引号里那一长串才是主角data数组按子载波逐路存放 CSI 值且每个子载波先存虚部、再存实部也就是[子载波1虚部, 子载波1实部, 子载波2虚部, 子载波2实部, ...]的交错格式。解析时稍不留神就会错位这也是新手最常见的翻车点。数据来自 Wi-Fi 帧里的长训练序列LTF顺序依次是 LLTF、HT-LTF、STBC-HT-LTF具体哪些会出现取决于信道和分组配置。读懂这行日志你就掌握了数据长什么样接下来该让数据替你拿主意了。第五关 · 应用课从波形到房间有人/无人的实战光有原始数据还不够真正的检测算法需要一套趁手的工具。esp-csi 项目里的 console_test 示例就打包了一个叫 ESP-CSI Tool 的图形化平台集采集、显示、分析于一体。界面上半部分是数据区可以同时观察原始 CSI 波形、RSSI 波形、Wi-Fi 信道信息和系统日志方便对比信号强度和信道细节对同一动作的不同反应。下半部分是模型区干的是真正的检测活。上手流程分三步走。第一步把接收板连上路由器界面里填好 SSID 和密码即可。第二步校准基线——这一步是灵魂先设置一个延迟时间让自己离开房间系统会在房间无人的状态下采集一段 CSI 作为基准并自动算出判定阈值。校准完成后系统就能实时输出房间状态了无人、有人静止、有人运动三种状态一目了然。更进一步工具还能按分钟/小时/天统计人员运动次数、记录每次运动起止时间甚至为不同动作走、跑、挥手批量采集 CSI 数据存成文件——这些带标签的数据正是后续训练机器学习模型、做动作识别的原材料。到这里一套Wi-Fi 感知房间的完整链路就闭环了。它背后的应用边界其实很宽多设备组网做厘米级室内定位、检测门窗开关、识别不同活动类型乃至通过呼吸起伏做无接触健康监测都是基于同一套数据的延展。第六关 · 避坑课七条血泪经验帮你少绕路自己踩过坑才记得住路。下面七条按重要性排序每一条都值得写进你的备忘天线优先外置 IPEXPCB 天线方向性强、易受主板干扰是感知效果的第一杀手。校准必须在无人环境校准的意义就是让系统认识房间无人的样子校准期间有人走动基线就废了校准时长越长误报率越低。信道挑闲的用选相对空闲的 Wi-Fi 信道。日志里频繁出现ESP-NOW 发送错误八成是信道拥堵导致缓冲区满了换个信道往往立刻缓解。板间距离别小于 1 米距离太近信号饱和感知灵敏度大打折扣。串口别选错优先用 UART 口而不是 USB Serial/JTAG 口如果可视化时串口数据乱码、报element number is not equal多半是绘图程序抢占 CPU 导致串口缓冲溢出调高波特率即可。跑脚本前先退出 monitoridf.py monitor占着串口Python 脚本会读不到数据这是新手问得最多的问题。IDF 版本别太旧v5.0.0 及以上版本支持目的地址过滤采集效果明显更好。尾声与下一步更大的想象空间和你的第一站最后说说为什么这个生态值得投入。CSI 能力覆盖 ESP32 全系列芯片——ESP32、ESP32-S2、C3、S3、C5、C6、C61 一网打尽意味着你手头的旧板子也可能直接升级出感知能力ESP32 的双核 240MHz CPU 支持 AI 指令集能在设备端跑轻量级机器学习自带的 BLE 还能扫描周边设备辅助判断更重要的是存量项目可以通过 OTA 远程升级获得新功能不必更换硬件。把这套技术放进更大的图景里智能家居可以做人进灯亮、人走空调自动关的无感控制安防领域可以做不暴露隐私的入侵检测养老场景可以做跌倒与呼吸异常监测工业现场则能用于设备状态感知与预测性维护。Wi-Fi 感知正在从论文走向客厅而 esp-csi 恰好给了你一个低门槛的起点。给你的下一步就三件事先把 get-started 跑通用一块板加一台路由器点亮第一张波形图感受波纹随人而动。再上 console_test 玩工具完整走一遍校准→看房间状态→统计运动→采集动作数据的流程理解检测算法是怎么喂出来的。最后啃文档、攒数据项目 docs 目录下有《信号处理基础》《OFDM 技术介绍》《无线信道基础》《无线定位介绍》《CSI 与 RSSI》《CSI 应用案例》几篇文档从原理到应用帮你把地基打牢之后再着手采集一批自己的数据训练一个属于你的动作识别模型。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),仅供参考