ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ESP Wi-Fi Sensing Demo:基于 esp_wifi_sensing 组件的三通道人体感知实战指南

ESP Wi-Fi Sensing Demo:基于 esp_wifi_sensing 组件的三通道人体感知实战指南 ESP Wi-Fi Sensing Demo基于 esp_wifi_sensing 组件的三通道人体感知实战指南【免费下载链接】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 仓库中的wifi_sensing_demo为例完整讲解如何基于esp_wifi_sensing组件搭建一套可独立运行、可调试的 Wi-Fi CSI 人体感知Human Sensing示例固件。通过本文你将掌握感知状态机FSM的创建与启动流程、AP 与固定对端多通道监听、LED 状态反馈策略以及一套可直接用浏览器 Web Serial 页面进行可视化调参的轻量串口协议可用于快速完成从“设备上电”到“看到运动检测曲线”的完整 bring-up。示例概览与组成wifi_sensing_demo位于 examples/esp-radar/wifi_sensing_demo是一个自包含self-contained的 ESP-IDF 示例工程用于在贴近真实的上电联调流程中验证esp_wifi_sensing组件。根据 README.md 的说明该示例组合了以下能力Wi-Fi STA 连接与感知状态机启动设备以 STA 模式接入路由器并在连接建立后启动 CSI 感知 FSM三个被监控的通道channel已连接的 APBSSID加上两个固定对端 MAC 地址共三个感知参考通道状态 LED 策略通过 LED 的闪烁、常亮、渐灭快速给出视觉反馈轻量串口协议输出可供 tools/web_serial_monitor.html 浏览器页面消费的结构化数据支持在线诊断与运行时调参。工程依赖方面main/idf_component.yml 声明了esp_wifi_sensing 0.1.1、espressif/led_strip ^3.0.0并要求 ESP-IDF 版本不低于 5.4idf: 5.4。主组件在 main/CMakeLists.txt 中注册了app_main.c、led_control.c、web_serial_monitor.c三个源文件并显式依赖esp_wifi_sensing、protocol_examples_common、driver、esp_driver_ledc与led_strip。感知状态机组件公开的标准工作流示例遵循组件官方推荐的公开工作流在 main/app_main.c 的demo_init()中依次完成五个步骤创建 FSM调用esp_wifi_sensing_fsm_create()创建感知状态机句柄添加通道分别添加 AP 通道与两个额外对端通道注册回调注册 ACTIVE / INACTIVE 状态事件回调启动 FSM调用esp_wifi_sensing_fsm_control(..., ESP_WIFI_SENSING_FSM_CTRL_START, NULL)可选保持 CSI 流量调用esp_wifi_sensing_fsm_ping_router_start()让 CSI 数据持续流动。对应到源码demo_init() 的核心片段如下esp_wifi_sensing_fsm_config_t cfg DEFAULT_ESP_WIFI_SENSING_FSM_CONFIG(); cfg.max_channel_num 3; ESP_ERROR_CHECK(esp_wifi_sensing_fsm_create(cfg, s_hms)); /* The demo monitors the connected AP plus two fixed reference peers. */ ESP_ERROR_CHECK(esp_wifi_sensing_fsm_add_channel(s_hms, ap_info.bssid)); ESP_ERROR_CHECK(esp_wifi_sensing_fsm_add_channel(s_hms, CONFIG_CSI_SEND_MAC)); ESP_ERROR_CHECK(esp_wifi_sensing_fsm_add_channel(s_hms, CONFIG_CSI_SEND_MAC_2)); /* Register the same callback for both state transitions to keep logging symmetric. */ ESP_ERROR_CHECK(esp_wifi_sensing_fsm_register_event_cb(s_hms, ESP_WIFI_SENSING_FSM_EVENT_ACTIVE, on_motion_event, NULL)); ESP_ERROR_CHECK(esp_wifi_sensing_fsm_register_event_cb(s_hms, ESP_WIFI_SENSING_FSM_EVENT_INACTIVE, on_motion_event, NULL)); ESP_ERROR_CHECK(esp_wifi_sensing_fsm_control(s_hms, ESP_WIFI_SENSING_FSM_CTRL_START, NULL));几点值得注意的实现细节AP BSSID 的获取在启动 FSM 前示例先调用esp_wifi_sta_get_ap_info()拿到当前所连 AP 的bssid并缓存在s_mac_ap中作为主通道两个固定对端CONFIG_CSI_SEND_MAC与CONFIG_CSI_SEND_MAC_2定义为0x1a:00:00:00:00:00与0x1a:00:00:00:00:01它们是示例约定的 CSI 发送端 MAC详见 app_main.c默认参数日志启动后示例会打印默认通道配置运动检测灵敏度sensitivity、active_jitter_min、active_filter_ms、确认计数CONFIG_ESP_WIFI_SENSING_CONFIRM_COUNT、ping 频率ping_frequency_hz方便与后续 Web 页面读数对照ping 路由器的容错处理esp_wifi_sensing_fsm_ping_router_start()返回ESP_ERR_INVALID_STATE时仅打印告警说明 STA 未连接或没有网关不会中断主流程。此外在 app_main.c 的 app_main() 中示例遵循标准 ESP-IDF bring-up 顺序nvs_flash_init()→esp_netif_init()→esp_event_loop_create_default()→led_init()→ 注册 Wi-Fi/IP 事件 →example_connect()完成配网连接随后调用esp_wifi_set_ps(WIFI_PS_NONE)关闭 Wi-Fi 省电模式——注释明确指出这是为了保证 CSI 采样节奏稳定。之后初始化 ESPNOW 接收与demo_init()最后按需启动 Web Serial 监视器并进入while(1)延时循环。ESPNOW 接收通道虽然感知通道本身基于 CSI示例仍通过esp_now_init()初始化了 ESPNOW 接收见 espnow_rx_init()。其作用是从专用 CSI 发送端接收 ESPNOW 心跳计数便于在日志中确认对端仍在发包仅处理来自CONFIG_CSI_SEND_MAC_2的数据包保持控制台输出聚焦设置 PMK发送端当前关闭 ESPNOW 加密PMK 对接收路径可选且无害添加一个广播对端ff:ff:ff:ff:ff:ffchannel 0跟随当前 STA 信道、不加密提高跨目标与终端工作流的兼容性。目录结构main/app_main.c示例入口与感知 FSM 装配main/led_control.c / main/led_control.hLED 后端与状态映射main/web_serial_monitor.c / main/web_serial_monitor.h面向行的串口协议用于诊断与运行时调参tools/web_serial_monitor.html浏览器 UI提供图表、实时诊断与配置功能main/Kconfig.projbuild示例自身的 menuconfig 选项LED 类型、Web Serial 开关等sdkconfig.defaults默认工程配置见下文。构建与运行将wifi_sensing_demo目录作为 ESP-IDF 工程打开按常规方式构建并烧录idf.py set-target chip idf.py flash monitor其中chip需要替换为实际目标芯片。示例使用protocol_examples_common完成 Wi-Fi 配网参见 CMakeLists.txt 中通过EXTRA_COMPONENT_DIRS引入的protocol_examples_common如果本地工作流需要请在烧录前通过idf.py menuconfig配置好 Wi-Fi 凭据SSID / 密码。默认配置要点sdkconfig.defaultsexamples/esp-radar/wifi_sensing_demo/sdkconfig.defaults 给出了开箱即用的关键配置配置项值说明CONFIG_ESP_CONSOLE_UART_BAUDRATE921600控制台串口波特率保证 Web Serial 大数据量传输不丢行CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM128加大 Wi-Fi 动态接收缓冲适配 CSI 高频采样CONFIG_ESP_WIFI_CSI_ENABLED/CONFIG_ESP32_WIFI_CSI_ENABLEDy打开 Wi-Fi CSI 采集开关CSI 是感知的数据源CONFIG_ESP_WIFI_AMPDU_TX_ENABLEDn关闭 TX AMPDU保证采样节奏稳定CONFIG_ESP_TASK_WDT_TIMEOUT_S30放宽任务看门狗超时CONFIG_ESP_WIFI_SENSING_DEFAULT_PRESENCE_SENSITIVITY250存在检测默认灵敏度Web Serial 监视器HMS 协议与浏览器调参当CONFIG_ESP_WIFI_SENSING_WEB_SERIAL_ENABLEy默认开启见 Kconfig.projbuild时固件通过标准串口控制台输出以HMS:为前缀的、按行分隔的 JSON 消息并接受以HMSCMD为前缀的命令。这样普通 ESP 日志与结构化诊断数据可以共用一个串口端口而互不干扰。从实现上看web_serial_monitor.c 的后台任务会连接后立即发送一次初始快照hello runtime 全部通道配置随后以stream_period_ms默认 50ms可配置范围 20~1000ms见 Kconfig.projbuild为周期对每个已注册通道调用esp_wifi_sensing_fsm_get_channel_diag()与esp_wifi_sensing_fsm_get_state()组装sample消息同时轮询标准输入与 USB Serial/JTAG 输入按换行符切分命令并执行。浏览器 UI 关注的诊断字段浏览器 UI 目前聚焦于组件导出的最小公开诊断集合jitter_value抖动值运动检测的核心输入smooth_scaled平滑后的缩放值图表中的绿线enter_level_scaled进入 ACTIVE 的触发电平橙线exit_level_scaled退出到 INACTIVE 的电平红线stateFSM 过程状态IDLE/DEBOUNCE_ACTIVE/ACTIVE/DEBOUNCE_INACTIVE字符串与数值均有导出init_stage初始化阶段START/GOLD_FOUND/STABLE。页面还展示存在检测presence与训练train相关的扩展字段例如wander_value、presence_someone_threshold、train_status、train_sample_count、train_background_count等。图中曲线的判读逻辑在页面内也有说明smooth_scaled持续高于橙色enter_level_scaled趋向 ACTIVE持续低于红色exit_level_scaled趋向 INACTIVE。串口命令集串口监视器暴露了演示用到的主要运行时控制命令均可从普通终端直接敲入命令作用HMSCMD HELLO请求设备返回 hello 元数据、运行时状态与全部通道配置HMSCMD START_STREAM/HMSCMD STOP_STREAM开启 / 停止周期性的通道诊断数据流HMSCMD FSM_START/HMSCMD FSM_STOP启动 / 停止感知 FSM对应ESP_WIFI_SENSING_FSM_CTRL_START/STOPHMSCMD RESET_BASELINE重置基线对应ESP_WIFI_SENSING_FSM_CTRL_RESET_BASELINEHMSCMD GET_CFG ALL获取全部通道配置HMSCMD GET_CFG peer获取指定通道配置HMSCMD GET_RUNTIME获取运行时状态如amplitude_log_enabledHMSCMD SET_AMPLITUDE_LOG on/off开启 / 关闭幅度日志HMSCMD SET_CFG peer motion_sensitivityfloat active_jitter_minfloat active_filter_msms在线修改指定通道参数其中peer可以是演示名称AP、MAC_1、MAC_2或对端 MAC 字符串大小写不敏感二者均可被 find_peer_by_name_or_mac() 识别。SET_CFG的可写参数除 README 列出的三个外实现还额外支持presence_sensitivity见 apply_cfg_value()修改成功后设备会回ack并附带最新的通道配置 JSON。除了上述命令实现还支持TRAIN_START/TRAIN_STOP/TRAIN_REMOVE对应esp_wifi_sensing_fsm_train_start/stop/remove用于存在检测的阈值训练。协议上的一个细节所有输出都经write_line()统一加上HMS:前缀web_serial_monitor.c命令则在换行分隔的输入流中解析\r被直接忽略因此终端回车与浏览器发送均兼容。使用浏览器监视器构建并运行固件用 Chromium 内核浏览器Chrome / Edge打开 tools/web_serial_monitor.html通过 Web Serial 连接开发板串口在页面查看各通道实时诊断或直接修改通道参数。如果浏览器阻止file://方式访问 Web Serial可以在本地起一个静态服务cd tools python3 -m http.server然后访问http://127.0.0.1:8000/web_serial_monitor.html。页面本身是单文件应用内置中英文切换中文 / English按钮提供通道列表Channels、事件日志Event Log、运动检测/存在检测双图表、配置表单运动灵敏度、存在灵敏度、active_jitter_min、active_filter_ms以及Amplitude Log开关训练区支持“延迟开始 定时结束”的自动化流程方便先让人离开房间再采集背景数据。Demo 行为与 LED 状态机README 明确列出了演示的整体行为这些行为在 led_control.c 中有完整的实现支撑AP BSSID 通道是 LED 反馈的主通道只有 AP 通道的 ACTIVE/INACTIVE 事件会驱动 LED 状态变化见 on_motion_event() 中is_ap_channel判断Wi-Fi 断开时 LED 闪烁以 500ms 周期、50% 占空比闪烁提示设备仍在连接中AP 通道进入 ACTIVE 时 LED 常亮led_notify_ap_active()将状态机置为LED_MOTION_ACTIVEGPIO 版本输出满占空比WS2812 版本点亮绿色AP 通道回到 INACTIVE 时 LED 渐灭led_notify_ap_inactive()进入LED_MOTION_FADING在 1000ms 内从全亮线性衰减到熄灭避免短暂的不活动间隙造成视觉跳变两个固定对端通道作为额外感知参考它们始终出现在日志与浏览器监视器中但不参与 LED 反馈。LED 后端支持两种类型由 Kconfig.projbuild 的ESP_WIFI_SENSING_DEMO_LED_TYPE选择默认 GPIOGPIO LED基于 LEDC 定时器5kHz、8bit 分辨率输出 PWM引脚由CONFIG_ESP_WIFI_SENSING_DEMO_LED_GPIO指定默认 GPIO 2WS2812 LED单颗可编程灯珠后端可选 RMT默认或 SPIESP_WIFI_SENSING_DEMO_WS2812_BACKENDGPIO 作为数据引脚。LED 状态由独立的 FreeRTOS 任务栈 3072B、优先级 4以 20ms 周期刷新事件侧通过xTaskNotifyGive()唤醒状态字段用临界区保护避免多任务竞争。小结与延伸阅读wifi_sensing_demo是一个结构清晰的“最小可跑通”参考实现把esp_wifi_sensing组件的 FSM 工作流、多通道监听、状态回调、LED 反馈与串口调参能力完整串在了一起。如果你需要在此基础上继续深入想了解整个 esp-csi 仓库的定位与更多示例室内定位、人体检测等可阅读根目录 README.md想对比其他基于 CSI 的应用形态雷达评估工具、Wi-Fi 感知演示等可查看 examples/esp-radar/console_test 与 examples/esp-radar/connect_rainmaker想理解 CSI 原始数据的含义与获取方式可参考 docs/zh_CN/Wireless-indicators-CSI-and-RSSI.md 与 examples/get-started/csi_recv。在接入真实环境时请根据现场调整对端 MAC、Wi-Fi 凭据、LED 引脚与采样周期并以idf.py monitor或浏览器监视器中的实测曲线为准进行灵敏度标定。【免费下载链接】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),仅供参考
返回列表