ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

RuView ESP32 CSI 节点实操指南:固件变体选择、烧录偏移与 NVS 配置

RuView ESP32 CSI 节点实操指南:固件变体选择、烧录偏移与 NVS 配置 RuView ESP32 CSI 节点实操指南固件变体选择、烧录偏移与 NVS 配置【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView本文基于 harness/ruview/skills/provision-node.md 编写。它讲述了如何把一块 ESP32-S3/C6 开发板从裸板变成 RuView 无线感知网络中的一个 CSI 节点先按芯片与 Flash 容量选对固件变体用 esptool 按固定偏移烧录再通过provision.py将 WiFi 凭证、聚合服务器地址以及信道/MAC 过滤等运行参数写入 NVS最后用ruview_node_monitor验证 CSI 回调真正流动起来。读完本文你将掌握完整的节点上线四步流程并理解底层 NVS 键值设计与增量合并配置机制避免反复重刷固件的弯路。1. 选对固件变体三种镜像的适用边界RuView 的 ESP32 固件位于 firmware/esp32-csi-node同一份源码编译出三种面向不同硬件的变体。选错变体会导致显示功能、OTA 布局或毫米波探测行为不匹配务必先确认芯片型号与物理 Flash 容量。变体目标硬件关键特性适用场景s3-8mbESP32-S3 N16R8 / 16MB含 8MB 布局显示构建display buildAMOLED 可选带屏面板的展示/演示节点s3-4mbESP32-S3 4MB无显示no-display双 OTA显示禁用无屏裸板追求稳定 CSI 吞吐c6ESP32-C6 Seeed MR60BHA260GHz 毫米波 WiFi CSI 双模态需要毫米波人体存在/呼吸融合的场景三个变体之间有两条容易踩坑的边界源码中有明确证据裸板也要能采 CSI显示检测修复#1000之后s3-8mb构建在无面板的裸板上仍会捕获 CSIMGMTDATA。这由固件端运行时逻辑保证——csi_collector.c 会在检测到无显示时把混杂过滤从 MGMT-only 升级为 MGMTDATA对应 csi_collector.h 中的说明与 RuView#893。因此带屏固件装到裸板不再等于没有 CSI但显示任务与采集任务仍共享资源吞吐会受显示刷新影响。MR60 毫米波探测必须通过校验c6变体的毫米波探测要求先通过 MR60 头部校验#1107空 UART 永远不会被误判为检测到毫米波模块。对应实现位于 main/mmwave_sensor.c 所引用的mmwave_sensor.c状态通过 edge_processing.c 合并进边缘数据包mmwave_present、mmwave_hr_bpm等字段。版本对齐说明预编译二进制随 GitHub releasev0.8.1-esp32发布已在 S3 QFN56 rev v0.2 上完成硬件验证仓库内 README 与发布说明docs/releases/v0.8.8-esp32.md还维护了更新的v0.8.8镜像包命名规则为esp32-csi-node-vX.Y.Z-s3-8mb-flash-bundle.zip、...-s3-4mb-...、...-c6-4mb-...。请以你实际下载的版本为准且绝不可把 S3 镜像烧到 C6 或反之。2. 烧录Windows 子进程流程与四段偏移2.1 环境前提ESP-IDF v5.4 在 Windows 上是子进程专用RuView 的烧录流程绑定 ESP-IDF v5.4且只在 Windows 上以子进程方式运行——Git Bash / MSYS 不被支持必须剥离MSYSTEM*环境变量后再调用。这一点在 Harness 工具层被固化为硬约束ruview_node_flash工具harness/ruview/src/tools.js在非win32平台上直接返回unsupported_platform且必须携带confirm: true才会进入烧录分支。2.2 S3 镜像的标准偏移S3 镜像按以下偏移写入来自关联文档与 firmware/esp32-csi-node/README.md 的partitions_display.csv8MB布局一致esptool --chip esp32s3 -p PORT -b 460800 write_flash \ 0x0 bootloader.bin 0x8000 partition-table.bin \ 0xf000 ota_data_initial.bin 0x20000 esp32-csi-node-s3-8mb.bin四个偏移的含义如下表偏移内容说明0x0bootloader.bin二级引导程序0x8000partition-table.bin分区表决定 NVS/OTA 布局0xf000ota_data_initial.binOTA 初始数据标记首次启动分区0x20000esp32-csi-node-s3-8mb.bin应用镜像OTA 槽 0完整四件套烧录不会覆盖 NVS 分区NVS 在0x9000起因此升级固件时既有的 WiFi 与节点配置得以保留同理若只想应用更新且状态端点确认当前运行在ota_0也可以只写0x20000一个偏移。2.3 ruview_node_flash返回精确命令而非无人值守烧录调用 Harness 工具ruview_node_flash {port, variant, confirm}时它不会替你执行无人值守烧录而是返回与上述一致的精确命令供人工核对源码见 harness/ruview/src/tools.js 中ruview_node_flash的manual_step_required分支这既保证硬件操作可审计也避免在错误平台上盲目刷机。3. 配置provision.py 写入 NVS 而非重编译预编译固件无法用 menuconfig 改 WiFiRuView 的做法是把运行参数写入设备的 NVSNon-Volatile Storage分区固件在启动时读取csi_cfg命名空间覆盖编译期默认值。核心工具是 firmware/esp32-csi-node/provision.py。3.1 最小可用配置WiFi 三件套python firmware/esp32-csi-node/provision.py --port PORT \ --ssid SSID --password secret --target-ip server-ip --target-port 5005--port串口Windows 如COM7Linux 如/dev/ttyUSB0必填--chipauto默认esptool v5 自动探测、esp32s3、esp32c6--baud烧录波特率默认460800--target-port聚合服务器 UDP 端口默认5005。脚本会校验WiFi 三件套--ssid、--password、--target-ip必须齐全否则报错退出除非显式--force-partial仅适用于刻意先烧裸配置的场景。3.2 ADR-060 覆盖项固定信道与 MAC 过滤python firmware/esp32-csi-node/provision.py --port PORT --channel 6 --filter-mac AA:BB:CC:DD:EE:FF--channelCSI 信道2.4GHz 取 1–145GHz 取 36–177会覆盖固件从连接 AP 自动探测的结果越界值会在脚本内直接报错provision.py 中--channel must be 1-14 or 36-177校验。--filter-mac仅捕获指定 MAC 的 CSI 帧格式必须为AA:BB:CC:DD:EE:FF六段十六进制字节脚本逐段校验。3.3 完整参数面从边缘智能到 Swarm 桥接关联文档只展示了最小配置而脚本支持的 NVS 写入面远不止于此对应CONFIG_VALUE_CHECKS与build_nvs_csv的实现CLI 参数NVS 键类型/编码说明--ssid/--password/--target-ip同名stringWiFi 凭证与聚合目标固件 NVS 读取见 nvs_config.c--target-porttarget_portu16聚合 UDP 端口默认 5005--node-idnode_idu8节点 ID 0–255默认 1--tdm-slot/--tdm-totaltdm_slot/tdm_nodesu8TDM 网格时隙两者必须成对给出且 slot total--edge-tieredge_tieru80off原始 CSI、1stats、2vitalsADR-039--pres-threshpres_threshu16×1000存在检测阈值默认 500 自动标定--fall-threshfall_threshu16×1000跌倒检测阈值默认 15000 → 15.0 rad/s²人流密集区可调高降误报--vital-win/--vital-intvital_win/vital_intu16相位历史窗口帧/ 生命体征包间隔 ms默认 300 / 1000--subk-countsubk_countu8Top-K 子载波数默认 32--channelcsi_channelu8ADR-060 固定信道覆盖--filter-macfilter_machex2bin6 字节 blobADR-060 MAC 过滤--hop-channels/--hop-dwellhop_count/chan_list/dwell_msu8 / blob / u32ADR-073 多频跳频如1,6,11驻留时间默认 200ms--seed-url/--seed-token/--zoneseed_url/seed_token/zone_namestringADR-066 Swarm 桥接Cognitum Seed--swarm-hb/--swarm-ingestswarm_hb/swarm_ingestu16Swarm 心跳默认 30s/ 向量摄取默认 5s固件端在 nvs_config.c 的nvs_config_load()中逐键读取并做范围校验如hop_count限制在[1, NVS_CFG_HOP_MAX]、dwell_ms不得小于 10、vital_win需在 32–256、csi_channel需落在合法频段越界值会被忽略并回退到 Kconfig 编译默认值——这意味着配置参数校验在主机脚本与固件两端各执行一次形成双重防线。3.4 增量合并additive-by-default不再每次清空整张 NVS早期版本每次调用都会用 CLI 参数整体替换csi_cfg命名空间任何没传的键都会被抹掉对应 issue #391、#574 phase 1。现版本改为读取本机按端口存储的状态文件位于用户配置目录可用--state-dir覆盖把新的 CLI 参数叠加overlay到旧状态之上CLI 显式传入的值优先从合并后的状态生成 NVS 并烧录把合并结果写回状态文件。效果是局部改配置符合直觉只改信道不会丢 WiFi。调试工具--state打印将要写入的合并状态后退出不改设备--dry-run只生成nvs_provision.bin不烧录并照常持久化状态便于 CI 或人工复查--reset先清掉本机该端口的旧状态再合并适合给回收板做首次配置。已知边界状态文件存在控制机上跨机器配置同一块板会从空状态开始需在该次调用中补齐想保留的键或预置状态文件设备端权威合并依赖未来 USB-CDC NVS dump#574 跟踪。3.5 密钥安全红线关联文档明确要求绝不回显或提交 WiFi 密码。脚本实现也遵循此原则——打印配置摘要时密码只显示(set)/(empty)而不打印明文provision.py 中WiFi Password: {(set) if args.password else (empty)}。生成文章也提醒--seed-token属于同样敏感级凭证不应进入 shell 历史或仓库。4. 确认 CSI 已流动ruview_node_monitor 的 PASS 判据配置完成后用 Harness 工具ruview_node_monitor {port}打开串口并断言 CSI 正在流动源码见 harness/ruview/src/tools.js 中ruview_node_monitor底层以 Python pyserial 抓取串口输出默认捕获窗口 12 秒可用seconds参数调整。PASS 标准缺一不可串口出现CSI cb #...回调计数——代表 CSI 采集回调在递增裸板上还须出现CSI filter upgraded to MGMTDATA——代表无显示构建/无面板检测触发了 RuView#893 的过滤升级混杂模式同时捕获管理帧与数据帧。该日志串与工具判据一一对应工具解析CSI计数与UPGRADE_MGMT_DATA标记只有csi_callbacks 0才返回成功。固件侧对应代码在 csi_collector.c 的WIFI_PROMIS_FILTER_MASK_MGMT | WIFI_PROMIS_FILTER_MASK_DATA分支日志原文CSI filter upgraded to MGMTDATA (no display, RuView#893)。失败处置没有任何回调 节点没有在采集不要进入后续的房间标定流程calibration。此时应依次排查固件变体与芯片是否匹配、NVS 是否成功写入可先--state复查合并状态、AP 是否发送可捕获的帧、串口端口与波特率是否正确。5. 端到端调用链小结一次完整的节点上线可以概括为选变体s3-8mb / s3-4mb / c6 → ruview_node_flash 返回精确 esptool 命令Windows 子进程 confirm 守卫 → provision.py 增量合并并写入 NVScsi_cfg 命名空间 → 固件启动时 nvs_config_load() 读取 NVS 覆盖 Kconfig 默认值 → ruview_node_monitor 断言 CSI cb 计数 0 且裸板过滤已升级为 MGMTDATA每一步都有源码可查主机侧配置逻辑见 firmware/esp32-csi-node/provision.py固件侧运行时读取见 firmware/esp32-csi-node/main/nvs_config.c采集与过滤升级见 firmware/esp32-csi-node/main/csi_collector.cHarness 工具面见 harness/ruview/src/tools.js。相关设计背景可继续阅读 docs/adr/ADR-060-provision-channel-mac-filter.md、docs/adr/ADR-073-multifrequency-mesh-scan.md、docs/adr/ADR-066-esp32-swarm-seed-coordinator.md 与 docs/adr/ADR-039-esp32-edge-intelligence.md。【免费下载链接】RuViewπ RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video.项目地址: https://gitcode.com/GitHub_Trending/wi/RuView创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表