ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ESP-CSI 项目实战指南:基于 Wi-Fi 信道状态信息的智能感知应用开发

ESP-CSI 项目实战指南:基于 Wi-Fi 信道状态信息的智能感知应用开发 ESP-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 开源仓库为核心系统讲解如何利用 Wi-Fi 信道状态信息CSI实现非接触式智能感知包括 CSI 的基础原理、ESP32 全系列支持能力、三种 CSI 数据获取方案路由器回包、设备间 Ping、广播信道扫描的对比与适用场景以及基于仓库内 get-started、esp-radar 等例程的实机烧录、数据解析与可视化全流程。读完本文你将掌握从搭建双 ESP32 收发链路、解析 CSI 原始数据格式到基于源码实现参数配置与二次开发的一整套实战方法。什么是 CSI无线信道的指纹信道状态信息CSI, Channel State Information是描述无线信道特性的重要参数包括信号的幅度、相位、信号延迟等指标。在 Wi-Fi 通信中CSI 用于测量无线网络的信道状态。通过分析和研究 CSI 的变化可以推断引起信道状态变化的物理环境变化实现非接触式智能传感。CSI 对环境变化极其敏感它不仅能感知人或动物的行走、奔跑等大动作引起的变化还能捕捉静态环境中人或动物的细微动作如呼吸、咀嚼等。这些能力使 CSI 在智能环境监测、人体活动监测、无线定位等应用中具有广泛前景。仓库提供了 6 篇基础知识文档覆盖从信号处理到应用案例的完整知识链条信号处理基础介绍无线通信系统的组成、采样与量化、Nyquist 采样定理、DFT/FFT、调制解调技术以及 CSI 如何基于 OFDM/OFDM-MIMO 的子载波特性获取信道信息OFDM 介绍正交频分复用技术原理无线信道基础自由空间、空气等信道介质与多径传播无线定位技术介绍基于 RSSI/CSI 的测距与定位方法无线通信指标 CSI 与 RSSI两类指标的对比与适用边界CSI 应用与案例分析人体检测、行为识别等落地场景其中CSI 通过子载波获取信道信息的能力源自 OFDM 与 OFDM-MIMO 技术OFDM 将整个频谱划分为多个正交子载波每个子载波独立传输数据且相互干扰极小从而提升频谱效率与抗干扰能力在 OFDM-MIMO 系统中多天线同时传输不同数据流信道对不同的子载波影响不同通过观察发射与接收信号的差异即可推断信道状态信息包括信道衰落、相位偏移等。这是理解后文所有例程数据格式的理论基础。Espressif CSI 的六大核心优势仓库从六个维度总结了选择 ESP32 系列芯片做 CSI 感知的理由全系列支持所有 ESP32 系列均支持 CSI包括 ESP32 / ESP32-S2 / ESP32-C3 / ESP32-S3 / ESP32-C5 / ESP32-C6 / ESP32-C61。从入门级到双频新品无需挑选特定型号。强大的生态乐鑫是 Wi-Fi MCU 领域的全球领导者可将 CSI 与现有物联网设备无缝结合。更多信息ESP32 提供丰富的信道信息包括 RSSI、RF 噪声本底noise floor、接收时间和天线的rx_ctrl字段——这些字段会直接出现在例程输出的每一行 CSI 数据中是二次开发时可用的宝贵元数据。蓝牙辅助ESP32 同时支持 BLE例如可以扫描周围设备来辅助检测形成Wi-Fi 感知 BLE 辅助的多模态方案。强大的处理能力ESP32 支持 AI 指令集能够在端侧运行机器学习和神经网络直接在设备上完成 CSI 特征提取与推理。OTA 升级现有项目可通过软件 OTA 升级获得 CSI 新功能无需增加额外硬件成本利于存量设备迭代。例程全景从入门到应用仓库的 examples 目录按入门 → 应用 → 硬件平台三层组织覆盖 CSI 数据获取、云端上报、人体感知算法与专用硬件方案。get-started快速上手 CSI 收发get-started 帮助用户快速上手 CSI 功能通过基础示例展示 CSI 数据的获取与初步分析csi_recvESP32 作为接收端示例csi_sendESP32 作为发送端示例csi_recv_router路由器作为发送端ESP32 通过 Ping 触发路由器发送 CSI 报文tools提供辅助 CSI 数据分析的脚本csi_data_read_parse.py基于 PyQt5 pyqtgraph 的实时图形化解析工具esp-radarCSI 智能感知应用esp-radar 提供利用 CSI 数据实现的实际应用包括云端上报与人体活动检测connect_rainmaker将 CSI 数据捕获并上传到 Espressif RainMaker 云平台实现远程可视化与控制console_test交互式控制台支持动态配置和捕获 CSI 数据并内置人体活动检测算法应用wifi_sensing_demo基于esp_wifi_sensing组件的 Wi-Fi 感知演示包含运动和人体存在检测、现场训练标定、LED 状态反馈以及配套的浏览器端 Web Serial 监控页面用于实时诊断与调参此外仓库还包含 esp-crab 硬件平台方案主/从接收端与发送端用于多信道 CIR/CSI 数据采集适合对硬件有进一步要求的场景。三种 CSI 获取方案对比与实战获取 CSI 是开展一切感知应用的前提。仓库归纳了三种典型方案分别对应不同硬件条件与精度需求。方案一获取路由器 CSI单设备即可实现方法ESP32 向路由器发送 Ping 包并接收路由器返回的 Ping 回应中携带的 CSI 信息优点只需一个 ESP32 加一个路由器即可完成成本最低缺点依赖路由器条件如路由器位置、支持的 Wi-Fi 协议等适用场景环境中只有一个 ESP32且检测环境中存在路由器从源码看这一方案由 csi_recv_router 主程序实现程序先通过example_connect()连接路由器然后调用wifi_ping_router_start()创建 ping 会话将目标地址设置为网关 IPlocal_ip.gw以1000 / CONFIG_SEND_FREQUENCY毫秒为间隔持续向路由器发送 Ping 包。CSI 回调函数wifi_csi_rx_cb中通过memcmp(info-mac, ctx, 6)只接受来自已连接路由器 BSSID 的回包。值得注意的是为了兼容不同品牌路由器该例程的 CSI 配置见 csi_recv_router/main/app_main.c#L128-L181特意只选取 LLTFLegacy Long Training Field子载波在非 C5/C6 芯片上htltf_en false、stbc_htltf2_en false并在 C6 上关闭 SU/MU/DCM/beamformed 采集从而保证路由器回包中必然携带的 legacy 前导码可被解析。方案二获取设备之间的 CSI双 ESP32实现方法ESP32 A 和 B 都向路由器发送 Ping 包ESP32 A 接收 ESP32 B 发出的 Ping 中携带的 CSI 信息是对第一种场景的补充优点不依赖路由器的位置也不受其他连接路由器设备的影响缺点依赖路由器支持的 Wi-Fi 协议和环境适用场景环境中必须有两个或以上的 ESP32方案三获取特定设备的 CSI广播信道扫描精度最高实现方法数据包发送设备不断切换信道发送数据包ESP32 A、B、C 都获取该设备广播数据包中的 CSI 信息这种方法的检测精度和可靠性最高优点完成过程不受路由器影响检测精度高当环境中有多个设备时仅需一个数据包发送设备对网络环境造成很小的干扰缺点除普通 ESP32 外还需要额外的专用数据包发送设备成本相对较高适用场景适用于需要高精度和多设备集群定位的场景三种方案选型建议方案硬件要求精度干扰源典型场景路由器 CSI1 个 ESP32 路由器中路由器位置/协议家庭、办公单点感知设备间 CSI≥2 个 ESP32中高路由器协议、环境多点部署补充广播 CSI≥3 个 ESP32 专用发包设备最高几乎无高精度集群定位双设备收发链路实操烧录与数据可视化下面以 get-started 为例走一遍完整的 CSI 数据采集链路。硬件准备需要两块 ESP32 开发板一块作为发送方一块作为接收方。为保证 CSI 感知效果尽量满足以下要求使用 ESP32-C5 / ESP32-C6ESP32-C5 支持双频 Wi-Fi 通信射频性能出色ESP32-C6 是已上市芯片中射频性能优秀的选择使用外部天线PCB 天线方向性较差且容易受到主板干扰两个设备之间的距离应大于 1 米编译烧录分别将csi_send与csi_recv固件烧录到两块开发板# csi_send 发送端 cd esp-csi/examples/get-started/csi_send idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB0 monitor # csi_recv 接收端 cd esp-csi/examples/get-started/csi_recv idf.py set-target esp32c3 idf.py flash -b 921600 -p /dev/ttyUSB1从发送端源码 csi_send/main/app_main.c#L129-L169 可以看到链路的核心设计收发双方通过ESP-NOW通信peer_addr设为广播地址{0xff,0xff,0xff,0xff,0xff,0xff}信道固定为CONFIG_LESS_INTERFERENCE_CHANNEL11并将 STA 接口 MAC 设为固定的CONFIG_CSI_SEND_MAC1a:00:00:00:00:00接收端据此过滤数据源发送端以CONFIG_SEND_FREQUENCY 100即 100 Hz的周期调用esp_now_send()发送计数包usleep(1000 * 1000 / CONFIG_SEND_FREQUENCY)控制节拍发送速率配置为WIFI_PHY_RATE_MCS0_LGI、PHY 模式HT40带宽设置为WIFI_BW_HT40使数据帧携带 HT-LTF从而让接收端能采集到更多子载波的 CSI图形化解析 CSI 数据在csi_recv一侧运行csi_data_read_parse.py做数据分析。运行前请先关闭idf.py monitor以释放串口cd esp-csi/examples/get-started/tools # 安装 Python 相关依赖 pip install -r requirements.txt # 图形化显示 python csi_data_read_parse.py -p /dev/ttyUSB1该工具csi_data_read_parse.py使用 PyQt5 pyqtgraph 构建了三个实时绘图窗口最后一帧 CSI 相位数据、子载波幅度随时间变化曲线、以及相位数据图并叠加显示 AGC/FFT 增益曲线便于观察信道动态。工具内置了两种数据列定义DATA_COLUMNS_NAMES25 列适用于 ESP32/S2/S3/C3 等与DATA_COLUMNS_NAMES_C5C615 列适用于 ESP32-C5/C6/C61说明不同芯片导出的 CSI 数据列并不完全相同解析时需按芯片型号匹配。深入理解 CSI 数据格式理解原始数据格式是后续做算法处理的前提。以一行 CSI 原始数据为例type,id,mac,rssi,rate,sig_mode,mcs,bandwidth,smoothing,not_sounding,aggregation,stbc,fec_coding,sgi,noise_floor,ampdu_cnt,channel,secondary_channel,local_timestamp,ant,sig_len,rx_state,len,first_word,data 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,0,0,...]ESP32-C5 / ESP32-C6 的数据格式为type,seq,mac,rssi,rate,noise_floor,fft_gain,agc_gain,channel,local_timestamp,sig_len,rx_state,len,first_word,data CSI_DATA,7,1a:00:00:00:00:00,-23,11,-96,32,4,11,372852,47,0,256,0,[0,0,0,...]元数据字段包括 type、id/seq、mac、rssi、rate、sig_mode、mcs、bandwidth、smoothing、not_sounding、aggregation、stbc、fec_coding、sgi、noise_floor、ampdu_cnt、channel、secondary_channel、local_timestamp、ant、sig_len、rx_state、len、first_word 等。C5/C6 型号额外输出 fft_gain、agc_gain 两个增益字段这是其支持自动增益控制AGC/FFT gain补偿的体现。CSI 数据由最后一项 data 数组存储用[...]框起包含每个子载波的信道状态信息。其具体结构对应 Wi-Fi 帧中的 Long Training FieldLTF部分。对每一个子载波先存储虚部再存储实部即格式为[子载波1的虚部, 子载波1的实部, 子载波2的虚部, 子载波2的实部, ...]。LTF 顺序LLTF → HT-LTF → STBC-HT-LTF。根据通道和分组信息可能不会出现全部 3 个 LTF。源码层面的字段打印与增益补偿接收端如何输出这些字段看 csi_recv/main/app_main.c#L137-L210 的回调函数实现回调wifi_csi_rx_cb首先校验info-mac是否为发送端 MACCONFIG_CSI_SEND_MAC避免收进来无关设备的 CSI从wifi_pkt_rx_ctrl_t *rx_ctrl中逐字段读取 rssi、rate、sig_mode、mcs、cwb带宽、noise_floor、channel、timestamp、ant、sig_len 等并打印在CONFIG_GAIN_CONTROL开启时C3/S3/C5/C6/C61 默认开启调用esp_csi_gain_ctrl_get_rx_gain获取 AGC/FFT 增益前 100 包用于记录增益基线esp_csi_gain_ctrl_record_rx_gain之后通过esp_csi_gain_ctrl_get_gain_compensation计算compensate_gain补偿系数并用该系数乘上每个 CSI 数值后输出从而抵消接收机自动增益带来的幅度波动——这是保证 CSI 幅度数据可比性的关键工程细节CSI 采集初始化配置CSI 功能通过 wifi_csi_init() 完成初始化核心调用链为esp_wifi_set_promiscuous(true)开启混杂模式按芯片型号构造wifi_csi_config_t配置结构体不同芯片字段不同ESP32/S2/S3/C3 等使用lltf_en、htltf_en、stbc_htltf2_en、ltf_merge_en、channel_filter_en、manu_scale、shift等字段ESP32-C5/C61 使用acquire_csi_legacy、acquire_csi_ht20/ht40、acquire_csi_su/mu/dcm/beamformed、val_scale_cfg、dump_ack_en等新字段esp_wifi_set_csi_config(csi_config)应用配置esp_wifi_set_csi_rx_cb(wifi_csi_rx_cb, NULL)注册回调esp_wifi_set_csi(true)使能 CSI 功能整个链路中Wi-Fi 以 STA 模式启动WIFI_MODE_STA关闭省电WIFI_PS_NONE并将信道固定在干扰较少的 11 号信道配合 HT40 带宽与 802.11n 协议保证 CSI 数据持续稳定产出。常见问题排查AQ问题 1csi_send 打印内存不足现象串口出现以下日志W (510693) csi_send: ESP_ERR_ESPNOW_NO_MEM ESP-NOW send error原因当前信道拥堵导致发送数据包时出现拥塞ESP-NOW 缓冲区空间已满从发送端源码看该警告来自esp_now_send()返回非ESP_OK时的日志分支csi_send/main/app_main.c#L162-L166解决方案更换 Wi-Fi 信道或更换到网络环境更好的地方问题 2csi_data_read_parse.py 串口打印异常现象串口出现以下日志element number is not equal data is not incomplete原因绘图时 PYQT 占用大量 CPU导致 PC 无法及时读取串口缓冲队列造成数据混乱解决方案提高串口的波特率高阶应用从原始 CSI 到 Wi-Fi 感知完成基础数据采集后可进一步参考 esp-radar 下的三个应用例程进阶云端上报connect_rainmaker 演示如何把 CSI 数据流接入 Espressif RainMaker 云平台实现远程可视化与控制适合构建云端联动场景交互式调试console_test 提供控制台命令可动态配置 CSI 采集参数并实时评估算法性能配套 radar_evaluate.c 实现人体活动检测算法组件化感知wifi_sensing_demo 基于esp_wifi_sensing组件封装其工作流README给出了感知状态机的标准接入流程创建 FSMesp_wifi_sensing_fsm_create()→ 添加 AP 信道与两个固定对端 MAC 信道 → 注册 ACTIVE/INACTIVE 回调 →esp_wifi_sensing_fsm_control(..., ESP_WIFI_SENSING_FSM_CTRL_START, NULL)启动 → 可选esp_wifi_sensing_fsm_ping_router_start()保持 CSI 流量。固件通过HMS:前缀输出 JSON 诊断数据浏览器端 Web Serial 监控页支持HMSCMD系列命令做运行时调参如SET_CFG peer motion_sensitivityfloat active_jitter_minfloat active_filter_msms基于原始 CSI 数据用户还可利用机器学习、神经网络等算法训练更精确的检测模型如呼吸、咀嚼等细微动作识别这正是 ESP32 端侧 AI 指令集的用武之地。注意事项外置 IPEX 天线效果优于 PCB 天线PCB 天线具有方向性。测试应在无人环境中进行避免他人活动对测试结果的影响——因为 CSI 对环境变化极其敏感无关人员走动会直接污染测试数据。相关资源ESP-IDF 编程指南乐鑫 IoT 开发框架的官方文档包含环境搭建与 API 参考本仓库所有例程均基于 ESP-IDF 构建ESP-WIFI-CSI 指南ESP-WIFI-CSI 的使用说明详细介绍了 CSI 数据结构与 LTF 部分的字节布局是解析 data 数组的第一手参考资料社区项目参考ESPectre一个基于 Wi-Fi CSI 频谱分析的运动检测系统支持与 Home Assistant 集成可作为 CSI 研究向智能家居场景落地的参考实现学术资源Through-Wall Human Pose Estimation Using Radio Signals穿墙人体姿态估计经典工作Awesome-WiFi-CSI-SensingWi-Fi CSI 感知方向的论文与资源合集仓库的后续迭代会持续补充基础知识文档信号处理、OFDM、无线信道、无线定位、CSI 与 RSSI 对比、应用案例建议结合 docs 目录与各例程源码对照学习先跑通 get-started 双设备链路再按需进入 esp-radar 应用层开发。【免费下载链接】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),仅供参考
返回列表