☰
ESP32 CSI 实战指南:两块开发板完成 Wi-Fi 室内定位与人体检测
2026/10/23 4:48:33 网站建设 项目流程

ESP32 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

不装摄像头,怎么知道房间里有没有人?esp-csi 项目把 ESP32 CSI(信道状态信息)直接开放出来使用:通过 Wi-Fi 信号随人体动作产生的变化,实现室内定位、人体检测这类非接触式感知。项目基于 ESP-IDF 开发框架,ESP32、S2、C3、S3、C5、C6、C61 全系列芯片均支持。

CSI 与 RSSI 的区别:为什么人能改变 Wi-Fi 信号

RSSI 只有一个数值,告诉你信号强弱;CSI 则把接收信号按子载波拆解成幅度与相位的复数,能看出信号被障碍物、人体反射后具体变成了什么样。原理很直接:人走动时,身体会反射、吸收并散射电磁波,各子载波对应的 CSI 数值随之改变;静态环境下的呼吸、咀嚼等细微动作也会引起缓慢、有规律的波动。因此感知逻辑是:先记录空房间的基线,再拿后续数据与基线对比,偏差超过阈值即判定有人活动。整个过程不需要摄像头。

📡 三种获取 CSI 数据的方式:按现场条件选型

三种方式对应不同的部署密度,前提条件和成本各不相同:

方式工作原理前提条件成本精度与干扰适合谁
路由器当发送端ESP32 向路由器发 Ping,读取回复中携带的 CSI检测环境内有路由器最低,仅需 1 块 ESP32受路由器位置和支持的 Wi-Fi 协议限制只有单台设备、想最快上手的场景
设备间直连两块 ESP32 都向路由器发 Ping,A 读取 B 发来的包中 CSI至少 2 块 ESP32中等不受路由器位置和其他连接设备影响多设备协同、收发位置可自由摆放
专用设备广播专门的发包设备持续切换信道发广播包,多台 ESP32 同时接收普通 ESP32 之外需 1 台专用发包设备最高精度和可靠性最高,对多设备网络干扰小高精度、多设备集群定位

路由方案对应的示例工程在 examples/get-started/csi_recv_router 目录下。

三种方式的通用建议:优先外置 IPEX 天线,PCB 天线方向性较强且易受主板干扰;设备间直连时两块设备间距大于 1 米;避开拥挤的 Wi-Fi 信道,发送端报ESP_ERR_ESPNOW_NO_MEM时通常就是信道拥塞导致,换个信道即可。

🔌 两台 ESP32 的烧录步骤:从克隆仓库到看到数据

硬件先备齐:两块 ESP32 开发板(推荐 ESP32-C5 或 C5/C6 射频性能较好的型号),一块烧csi_send当发送端,另一块烧csi_recv当接收端,接外置天线,两者间距大于 1 米。软件环境安装 ESP-IDF,版本 v5.0.0 及以上(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 # 接收端 cd examples/get-started/csi_recv idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB1

第三步,在电脑上运行解析脚本。运行前先关闭idf.py monitor,否则串口会被占用:

cd examples/get-started/tools pip install -r requirements.txt python csi_data_read_parse.py -p /dev/ttyUSB1

跑通后,接收端串口持续输出CSI_DATA开头的原始数据,脚本把子载波幅度、相位画成实时曲线。若出现串行口数据错乱(提示element number is not equal之类),一般是上位机绘图占满 CPU、没及时读串口缓冲,把波特率调高即可。

读到的 CSI 数据怎么解析:从原始数据到人体检测

每条数据以CSI_DATA开头,前半段是逗号分隔的元数据:type、id、mac、rssi、rate、noise_floor、channel 等;最后的data字段是一个数组,存放每个子载波的信道值,按先虚部后实部的顺序排列(即第 1 子载波虚部、第 1 子载波实部、第 2 子载波虚部……)。ESP32-C5 和 C6 的字段顺序单独列出:type、seq、mac、rssi、rate、noise_floor、fft_gain、agc_gain、channel 等。

拿到原始数据后,工具分两层。csi_data_read_parse.py做实时曲线展示,适合验证链路是否打通。功能完整的图形化工具是examples/esp-radar/console_test下的esp_csi_tool.py:实时显示 CSI、RSSI 和射频噪声底,支持把采集的数据存盘、对不同运动行为打标注(供后续机器学习训练),并内置人体移动检测和房间是否有人两类分析。做进一步应用时,同一目录下的wifi_sensing_demo基于esp_wifi_sensing组件实现运动与在员检测,带 LED 反馈和浏览器 Web Serial 监控界面;connect_rainmaker则把 CSI 数据上报到 RainMaker 云平台。数据采集前建议在无人、稳定的环境里做基线校准,减少环境噪声影响。

深入学习的入口:文档与示例目录

理论部分见中文基础文档 docs/zh_CN/,涵盖信号处理、OFDM 原理、无线信道、定位基础以及 CSI 与 RSSI 的对比。可运行的代码从基础收发示例 examples/get-started/ 到检测类应用 examples/esp-radar/ 均有,按目标芯片idf.py set-target后即可编译烧录。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询