415 lines
22 KiB
Markdown
415 lines
22 KiB
Markdown
|
|
# ESP32-C6 Matter + ESP-NOW 混合固件开发进度(单色灯 + 双色温灯)
|
|||
|
|
|
|||
|
|
## 1. 项目目标(来自《项目制作需求》)
|
|||
|
|
|
|||
|
|
- 基于 ESP32(候选:C3/C6),开发 Matter + ESP-NOW 混合固件。
|
|||
|
|
- 支持两类灯:
|
|||
|
|
- 单色灯:开关 + 调光(白光)。
|
|||
|
|
- 双色温灯:开关 + 调光 + 调色温(暖/冷)。
|
|||
|
|
- 开发阶段:Wi-Fi commissioning(通过 Wi-Fi 完成配网)。
|
|||
|
|
- 最终目标:Wi-Fi 完成配网、Thread 实现本地 mesh 控制(混合网络模式)。
|
|||
|
|
- 需要 OTA、QR 码生成、VID/PID/DAC 相关出厂数据与认证准备支持。
|
|||
|
|
- 交付:双版本(或可配置)源码仓库 + Factory/OTA 固件 + 烧录/QR 脚本 + 测试报告 + 技术文档。
|
|||
|
|
|
|||
|
|
## 1.1 关键硬性约束与解决方案
|
|||
|
|
|
|||
|
|
- 量产遥控器固件不变,且 ESP-NOW 固定信道为 `channel=1`。
|
|||
|
|
- **问题**:若使用 Matter-over-Wi-Fi,Wi-Fi STA 信道会被路由器决定,与 ESP-NOW 固定 ch1 冲突。
|
|||
|
|
- **解决方案**:利用 ESP32-C6 的**双射频**能力:
|
|||
|
|
- **Wi-Fi 2.4GHz 射频**:专用于 ESP-NOW(固定 channel 1,不连接路由器做 STA)
|
|||
|
|
- **802.15.4 射频**:专用于 Matter over Thread(与 Wi-Fi 射频完全独立)
|
|||
|
|
- **BLE**:用于 Matter commissioning(配网阶段)
|
|||
|
|
- 结论:单芯片 ESP32-C6 可实现 ESP-NOW + Matter 共存,无需依赖路由器信道。
|
|||
|
|
|
|||
|
|
## 1.2 需求对齐清单(当前工程状态)
|
|||
|
|
|
|||
|
|
| 需求项 | 状态 | 备注 |
|
|||
|
|
| --- | --- | --- |
|
|||
|
|
| ESP-NOW 代码功能 100% 保持 | 部分 | 已按遥控器协议实现 RX/配对/命令映射,但信道冲突仍未解决为“量产可用”方案 |
|
|||
|
|
| Matter clusters: OnOff / LevelControl | 已完成 | 双 endpoint 已跑通 |
|
|||
|
|
| Matter clusters: Groups / Scenes | 已完成(已验证) | 已在 App 上验证可创建/应用场景 |
|
|||
|
|
| ColorControl(双色温) | 已完成(开发态) | 当前实现为 ColorTemperature;已确认硬件为 SK6812 RGBW 模块,调色温方向正常 |
|
|||
|
|
| ESP-NOW 组播/广播组命令→所有控制器同步→Matter 状态更新 | 已完成(已稳定) | 控制器能处理 cmd 并更新 Matter 属性;组控一致性/延迟表现正常,无需再测试 |
|
|||
|
|
| QR 码配网(Apple/Google/Alexa/RainMaker) | 部分 | iOS Home 已验证;Google/Alexa/RainMaker 未做系统性验证 |
|
|||
|
|
| OTA(HTTP 远程服务器) | 已完成 | 已实现 HTTP OTA(从远程服务器下载固件),可通过 Matter shell 命令触发,已验证升级后 App version 变更 |
|
|||
|
|
| Matter 标准 OTA | 暂停 | 采用 HTTP OTA(远程服务器)方案,不再推进标准 Matter OTA |
|
|||
|
|
| 断电重置(如 3 次开关机) | 已完成(已稳定) | 已实现并验证:3 次重启触发 Matter 工厂重置(含 5 秒确认窗);已测试稳定,无需再测 |
|
|||
|
|
| 交付:源码/编译说明/bin/脚本/测试报告 | 进行中 | 文档与脚本需要补齐并固化 |
|
|||
|
|
|
|||
|
|
## 1.4 当前进度总览(已完成 vs 未完成)
|
|||
|
|
|
|||
|
|
### 1.4.1 已完成
|
|||
|
|
|
|||
|
|
- HTTP OTA(远程服务器下载固件,shell 命令触发),并验证升级成功后 `App version` 变更(2.0 → 2.1)
|
|||
|
|
- Matter clusters: Groups / Scenes 已在 App 上验证可创建/应用场景
|
|||
|
|
- 分区表调整为双 OTA(`ota_0`/`ota_1`/`otadata`),固件大小可容纳 OTA 升级
|
|||
|
|
- OTA 触发命令已接入 Matter shell(`matter esp ota <http://url>`)
|
|||
|
|
- 已可在 Windows 上稳定完成 build/flash/monitor(含 GN/Pigweed 环境)
|
|||
|
|
- 断电重置(工厂重置):已实现并验证 3 次重启触发 factory reset(含 5 秒确认窗),重置后进入可重新配网状态
|
|||
|
|
- 修复断电计数不生效问题:将 NVS key 缩短到 15 字符以内并加入兼容读取逻辑
|
|||
|
|
- ESP-NOW 配对与多设备联调:已支持“单遥控器(Zone1/Zone2)+ APP”控制两台 ESP32-C6 灯具;并修复“电源重启触发配对时未及时广播配对 beacon”的问题,提升遥控器绑定成功率
|
|||
|
|
|
|||
|
|
### 1.4.2 未完成(待办)
|
|||
|
|
|
|||
|
|
- 多生态验证:Google Home / Alexa / RainMaker 的 commissioning + 控制验证
|
|||
|
|
- 交付物固化:一键环境初始化/构建脚本、烧录脚本、测试报告与完整技术文档
|
|||
|
|
|
|||
|
|
## 3. 已完成的关键里程碑
|
|||
|
|
|
|||
|
|
### 3.1 构建与烧录链路打通(Windows)
|
|||
|
|
|
|||
|
|
- 已实现:`idf.py build` 成功、可 `flash` 到 COM4、可 `monitor` 观察启动日志。
|
|||
|
|
- 已解决的关键构建问题(历史记录):
|
|||
|
|
- `gn command not found`:定位 `gn.exe` 并加入 PATH。
|
|||
|
|
- Pigweed 环境变量缺失:补齐 `_PW_ACTUAL_ENVIRONMENT_ROOT`。
|
|||
|
|
- 链接错误 `undefined reference to mbedtls_hkdf`:启用 `CONFIG_MBEDTLS_HKDF_C=y`。
|
|||
|
|
- app 分区过小:切换到自定义分区表 `partitions.csv`(双 OTA),并设置 flash size=16MB(与硬件一致),最小 app 分区 `0x1E0000`。
|
|||
|
|
- Windows 反斜杠路径导致 CMake `Invalid character escape`:CMakeLists 里将 env path 转为 CMake path。
|
|||
|
|
|
|||
|
|
补充:构建该工程的关键环境变量(PowerShell 会话级别):
|
|||
|
|
|
|||
|
|
- `ESP_MATTER_PATH=D:\ESP-LED\esp-matter-gh`
|
|||
|
|
- `ESP_MATTER_DEVICE_PATH=D:\ESP-LED\esp-matter-gh\device_hal\device\esp32c6_devkit_c`
|
|||
|
|
- `_PW_ACTUAL_ENVIRONMENT_ROOT=D:\ESP-LED\esp-matter-gh\connectedhomeip\connectedhomeip\third_party\pigweed\repo\environment`
|
|||
|
|
- GN 工具路径(将目录加入 PATH):
|
|||
|
|
- `...\third_party\pigweed\repo\environment\cipd\packages\pigweed`(包含 `gn.exe`)
|
|||
|
|
|
|||
|
|
### 3.2 Matter 双 endpoint 架构(已运行验证)
|
|||
|
|
|
|||
|
|
- 当前固件创建两个 endpoint:
|
|||
|
|
- Endpoint 1:单色灯(OnOff + LevelControl)。
|
|||
|
|
- Endpoint 2:双色温灯(OnOff + LevelControl + ColorControl(ColorTemperature))。
|
|||
|
|
- 串口日志已确认:
|
|||
|
|
- `RGB light created with endpoint_id 1`
|
|||
|
|
- `CCT light created with endpoint_id 2`
|
|||
|
|
|
|||
|
|
### 3.3 驱动层对接(已跑通)
|
|||
|
|
|
|||
|
|
- Endpoint 1(单色灯):LEDC PWM 驱动(GPIO4/5/6)。
|
|||
|
|
- Endpoint 2(双色温灯):RMT 驱动 SK6812(GPIO2)。
|
|||
|
|
|
|||
|
|
### 3.4 日志报错修复
|
|||
|
|
|
|||
|
|
- 修复启动时 `E data_model: Cluster cannot be NULL.`:
|
|||
|
|
- 原因:对不含 ColorControl 的 endpoint 调用 `attribute::get(endpoint, ColorControl...)`。
|
|||
|
|
- 处理:先检查 `cluster::get(endpoint, ColorControl::Id)` 是否存在,再读取 ColorMode / Hue / Temp 等属性。
|
|||
|
|
|
|||
|
|
### 3.5 iOS Home / Matter Commissioning + 控制验证(已完成)
|
|||
|
|
|
|||
|
|
- 现状:手机端已完成配网,Home App 可同时控制两个灯的开关/亮度/(CCT 灯)色温。
|
|||
|
|
- 关键修复:为满足 iOS Home 的发现/配网流程,已启用 BLE commissioning:
|
|||
|
|
- `CONFIG_BT_ENABLED=y`
|
|||
|
|
- `CONFIG_BT_NIMBLE_ENABLED=y`
|
|||
|
|
- `CONFIG_ENABLE_CHIPOBLE=y`
|
|||
|
|
- 串口日志关键特征(表示 BLE commissioning 正常):
|
|||
|
|
- `Configuring CHIPoBLE advertising ...`
|
|||
|
|
- `CHIPoBLE advertising started`
|
|||
|
|
- `Commissioning window opened`
|
|||
|
|
- 设备启动时可打印 Onboarding Codes(用于手动输入/生成二维码):
|
|||
|
|
- MT 串(SetupQRCode):`MT:Y.K9042C00KA0648G00`
|
|||
|
|
- 11 位码(Manual pairing code):`34970112332`
|
|||
|
|
- 注意:上述二维码/手动码为开发阶段示例/测试参数(默认 VID/PID 等),量产需替换正式 VID/PID、DAC/CD/工厂数据与每台唯一的 onboarding 信息。
|
|||
|
|
|
|||
|
|
### 3.6 单芯片双射频方案验证成功(2026-01-07)
|
|||
|
|
|
|||
|
|
- **架构**:ESP32-C6 单芯片同时运行:
|
|||
|
|
- **Thread (802.15.4)**:Matter 网络层
|
|||
|
|
- **Wi-Fi (channel 1)**:ESP-NOW 接收(不连接路由器)
|
|||
|
|
- **BLE**:Matter commissioning
|
|||
|
|
- **关键配置**:
|
|||
|
|
- `CONFIG_ENABLE_WIFI_STATION=n`:禁用 Matter Wi-Fi STA
|
|||
|
|
- `CONFIG_ENABLE_THREAD=y`:启用 Matter over Thread
|
|||
|
|
- 独立初始化 Wi-Fi 用于 ESP-NOW,固定 channel 1
|
|||
|
|
- **验证通过的日志特征**:
|
|||
|
|
- `OpenThread started: OK`
|
|||
|
|
- `Wi-Fi channel fixed to 1 for ESP-NOW`
|
|||
|
|
- `ESP-NOW RX initialized`
|
|||
|
|
- `CHIPoBLE advertising started`
|
|||
|
|
- `Server Listening...`
|
|||
|
|
- **固件大小**:~2MB(含 Thread + Wi-Fi + BLE + ESP-NOW)
|
|||
|
|
- **状态**:设备稳定启动,无崩溃
|
|||
|
|
|
|||
|
|
### 3.7 HTTP OTA(远程服务器)验证成功(2026-01-15)
|
|||
|
|
|
|||
|
|
- **目标**:支持“远程服务器方式”OTA(HTTP),不依赖 HTTPS/TLS,固件体积可控。
|
|||
|
|
- **实现概览**:
|
|||
|
|
- 使用 `esp_http_client` + `esp_ota_*` 实现分段下载与写入 OTA 分区。
|
|||
|
|
- 提供 Matter shell 命令触发:`matter esp ota <http://url>`。
|
|||
|
|
- 仅支持 `http://`,拒绝 `https://` 以减小固件体积。
|
|||
|
|
- **验证结果(串口日志特征)**:
|
|||
|
|
- `HTTP OTA progress: ... 100%`
|
|||
|
|
- `HTTP OTA upgrade successful! Rebooting in 3 seconds...`
|
|||
|
|
- 重启后:`Loaded app from partition at offset 0x210000`(切换到 ota_1)
|
|||
|
|
- 重启后:`App version: 2.1`(已确认版本号随固件更新)
|
|||
|
|
|
|||
|
|
### 3.8 多设备控制联调进展(APP + ESP-NOW 遥控器)(2026-01-15)
|
|||
|
|
|
|||
|
|
- **目标**:一台遥控器 + 手机 App 同时控制两台 ESP32-C6 灯具(两块开发板)。
|
|||
|
|
- **实现状态**:
|
|||
|
|
- App 侧(iOS Home)已可同时添加两台设备并分别控制。
|
|||
|
|
- 遥控器侧支持 Zone1/Zone2 独立绑定不同灯具(通过 ESP-NOW 配对流程完成)。
|
|||
|
|
- **配对机制(开发态)**:
|
|||
|
|
- 3 次重启:触发 Matter factory reset(5 秒确认窗)。
|
|||
|
|
- 5 次重启:进入 ESP-NOW pairing mode(5 秒确认窗)。
|
|||
|
|
- 遥控器在目标 Zone 下长按配对键,设备收到 `0xA5` 后退出配对模式。
|
|||
|
|
- **关键修复**:
|
|||
|
|
- 修复“电源重启触发配对模式后,因 Wi-Fi 连接状态导致配对 beacon 未及时广播”的问题:进入配对后将主动启动配对 beacon 广播,确保遥控器可发现并完成绑定。
|
|||
|
|
|
|||
|
|
## 4. 当前仍在进行中的问题/待验证点
|
|||
|
|
|
|||
|
|
### 4.1 单色灯输出"白光"的定义与实现(已确定:RGB 三路混白)
|
|||
|
|
|
|||
|
|
- 当前单色灯硬件接法为 RGB 三路 PWM(GPIO4/5/6)。
|
|||
|
|
- 已做的软件调整:将 RGB 三路占空比设置为 1:1:1(同亮度混色)以尽量呈现白光。
|
|||
|
|
- 已确认:单色灯即 RGB 三路混白方案(不做单通道白灯条改造)。
|
|||
|
|
- 注意:RGB 分立灯珠近距离仍可能看到“三色点”,属于物理结构;可通过扩散罩/导光改善。
|
|||
|
|
|
|||
|
|
### 4.2 双色温灯的“暖/冷”实现(已确认:SK6812 RGBW)
|
|||
|
|
|
|||
|
|
- 已确认:双色温灯硬件为 SK6812 RGBW 模块,采用 RMT 单线驱动。
|
|||
|
|
- 当前实现:Matter ColorTemperature(mireds)→ 颜色映射 → SK6812 输出;调色温方向已验证正确。
|
|||
|
|
- 注意:SK6812 RGBW 的“色温”属于近似实现(需要 RGB 参与补色),效果取决于映射/校准策略。
|
|||
|
|
- 状态:当前效果表现正常,无需再做专项“色温校准/一致性测试”。
|
|||
|
|
|
|||
|
|
### 4.3 Flash 容量提示告警(已解决)
|
|||
|
|
|
|||
|
|
- 现象:启动时提示检测到 16MB,但固件镜像头标记为 4MB:
|
|||
|
|
- `Detected size(16384k) larger than the size in the binary image header(4096k)`
|
|||
|
|
- 影响:通常可运行,但不利于后续分区与 OTA 风险控制。
|
|||
|
|
- 已处理并确认:将工程 Flash size 配置调整为 16MB(`CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y`),已复测确认告警消失。
|
|||
|
|
|
|||
|
|
## 5. 控制器/遥控器(ESP-NOW)现状梳理(已读源码)
|
|||
|
|
|
|||
|
|
- 控制器原码路径:`D:\ESP-LED\控制器原码\Ecolight\...`
|
|||
|
|
- 协议:ESP-NOW(channel=1)
|
|||
|
|
- Pairing beacon magic:`0xABCDEF01`(4字节)
|
|||
|
|
- 命令(1字节):
|
|||
|
|
- `0x01` Toggle
|
|||
|
|
- `0x02` On
|
|||
|
|
- `0x03` Brightness Up
|
|||
|
|
- `0x04` Brightness Down
|
|||
|
|
- `0x05` Off
|
|||
|
|
- `0xA5` Pairing Confirm
|
|||
|
|
|
|||
|
|
结论:控制器原码与甲方提供的遥控器一致,且该 ESP-NOW 遥控协议可接入当前 Matter 灯固件(C6 端作为 ESPNOW 接收端),收到命令后同步更新 Matter 属性。
|
|||
|
|
|
|||
|
|
## 6. VID/PID/DAC/QR 码阶段性策略
|
|||
|
|
|
|||
|
|
- 开发阶段可以使用示例/测试用的 VID/PID/证书链推进开发。
|
|||
|
|
- 后续拿到正式 VID/PID/DAC 后:
|
|||
|
|
- 替换证书与出厂数据。
|
|||
|
|
- 重新生成 QR。
|
|||
|
|
- 通常需要恢复出厂并重新配网(属正常流程)。
|
|||
|
|
|
|||
|
|
## 7. 下一步开发路线图(按阶段)
|
|||
|
|
|
|||
|
|
### 阶段 A:功能验证与参数固化(短期)
|
|||
|
|
|
|||
|
|
- 单色灯:明确硬件定义(RGB 混白 vs 单路白灯条),固化白光方案。
|
|||
|
|
- 双色温:已确认 SK6812 RGBW,固化色温映射与效果参数(端点/曲线/gamma/限幅),并确认通道顺序与供电/信号稳定性。
|
|||
|
|
- 建立功能测试用例并记录:
|
|||
|
|
- endpoint 1:开/关、亮度
|
|||
|
|
- endpoint 2:开/关、亮度、色温
|
|||
|
|
|
|||
|
|
### 阶段 B:ESP-NOW + Matter 共存(核心)
|
|||
|
|
|
|||
|
|
- 在 C6 Matter 固件中加入 ESPNOW RX:
|
|||
|
|
- 接收 1-byte 命令并映射到 endpoint 1/2 的 Matter 属性更新。
|
|||
|
|
- 目标:遥控器控制灯,Matter 侧状态同步。
|
|||
|
|
- 解决 Wi-Fi channel 与 ESPNOW channel=1 的冲突(以“遥控器固件不变”为前提):
|
|||
|
|
- 方案 1(最小改动,但依赖环境):路由器/热点 2.4G 固定 `channel=1`。
|
|||
|
|
- 方案 2(推荐量产架构):双芯片/双射频解耦(ESP-NOW 固定 ch1 与 Matter Wi-Fi 任意信道互不影响)。
|
|||
|
|
- 方案 3(与 Addendum 对齐):Wi-Fi 用于 commissioning,日常控制走 Thread(需要 Thread Border Router 环境),从而避免 Wi-Fi 信道对 ESP-NOW 的牵制。
|
|||
|
|
- 性能目标:端到端延迟 < 20ms(需要定义测量方法和基准)。
|
|||
|
|
|
|||
|
|
### 7.2 芯片选型建议(C3 vs C6)
|
|||
|
|
|
|||
|
|
- 若坚持单芯片承载 Matter(含 Groups/Scenes/OTA/多生态)+ 应用逻辑 + ESPNOW:更推荐 ESP32-C6。
|
|||
|
|
- 原因:内存与资源更充足,Matter 生态适配与稳定性更优,且可扩展 Thread(满足 Addendum)。
|
|||
|
|
- 若控制器仍使用 ESP32-C3:需要评估以下风险项:
|
|||
|
|
- Matter + BLE commissioning + OTA + Groups/Scenes 的 RAM/Flash 压力。
|
|||
|
|
- 与 ESPNOW 同时运行的峰值内存/任务栈/队列占用。
|
|||
|
|
- 当路由器信道不可控且遥控器固件不变时:
|
|||
|
|
- 单芯片方案存在先天信道冲突。
|
|||
|
|
- 需要硬件/架构调整(例如额外加一颗 C3 专做 ESPNOW 固定 ch1,C6 专做 Matter/Wi-Fi/Thread,通过 UART/SPI 同步状态)。
|
|||
|
|
|
|||
|
|
### 7.3 方案 A(双芯片解耦)系统架构(量产推荐)
|
|||
|
|
|
|||
|
|
#### 7.3.1 总体思路
|
|||
|
|
|
|||
|
|
- MCU1(ESP-NOW 控制器,建议 ESP32-C3):
|
|||
|
|
- 只负责:ESP-NOW(固定 ch1)、遥控器配对/命令接收、组控广播一致性、驱动输出(PWM/RMT/恒流等)。
|
|||
|
|
- 不连接路由器(或不承担 Matter Wi-Fi)。
|
|||
|
|
- MCU2(Matter 控制器,建议 ESP32-C6):
|
|||
|
|
- 只负责:Matter over Wi-Fi(commissioning/长久在线/多生态)、(可选)Thread、Matter OTA、Groups/Scenes/状态机。
|
|||
|
|
- 通过 UART/SPI 与 MCU1 交换“控制命令/状态变化/诊断”。
|
|||
|
|
|
|||
|
|
补充确认:本项目采用 UART 作为 MCU1↔MCU2 通信方式。
|
|||
|
|
|
|||
|
|
#### 7.3.2 数据流与一致性目标
|
|||
|
|
|
|||
|
|
- 遥控器 → MCU1(ESP-NOW RX)→
|
|||
|
|
- MCU1 先本地执行灯控(保证延迟与体验不变)
|
|||
|
|
- MCU1 同步上报事件给 MCU2(用于 Matter 属性更新与组/场景一致性)
|
|||
|
|
- App/Matter → MCU2(属性更新/命令)→ MCU2 下发到 MCU1 → MCU1 执行驱动输出 → MCU1 回报最终状态给 MCU2(闭环)
|
|||
|
|
|
|||
|
|
#### 7.3.3 量产可测的关键指标
|
|||
|
|
|
|||
|
|
- 遥控器端到端延迟(按键到灯输出):目标 < 20 ms(以 MCU1 本地执行为准)
|
|||
|
|
- Matter 状态同步延迟(灯输出到 Matter 属性更新可见):给出目标与测量方法(建议 < 200 ms)
|
|||
|
|
- 长期稳定性:Wi-Fi/Matter 长久在线,不影响 MCU1 的 ESP-NOW 实时性
|
|||
|
|
|
|||
|
|
#### 7.3.4 PCB/硬件接口建议(小改动范围)
|
|||
|
|
|
|||
|
|
- UART:
|
|||
|
|
- MCU1_TX -> MCU2_RX(GPIO 待定:MCU1=____ / MCU2=____)
|
|||
|
|
- MCU1_RX <- MCU2_TX(GPIO 待定:MCU1=____ / MCU2=____)
|
|||
|
|
- 可选硬件流控(建议预留焊盘,量产可按稳定性决定是否启用):
|
|||
|
|
- MCU2->MCU1 `RESET_REQ`(请求 MCU1 执行:清码/恢复出厂/重新配对/进入测试)
|
|||
|
|
- MCU1->MCU2 `IRQ_EVT`(有新事件/状态上报,降低轮询开销)
|
|||
|
|
- 电平:两者均为 3.3V TTL(无需电平转换)
|
|||
|
|
- 调试:建议预留测试点(TX/RX/GND)便于产线与现场抓包
|
|||
|
|
|
|||
|
|
## 8. 测试计划(面向交付物)
|
|||
|
|
|
|||
|
|
### 8.1 遥控器 + ESP-NOW(不改固件)
|
|||
|
|
|
|||
|
|
- 工厂重置:三次断电/复位触发工厂重置(含 5 秒确认窗)
|
|||
|
|
- 配对:五次断电/复位进入配对模式;遥控器 slot 长按配对
|
|||
|
|
- 单控:0x01..0x05 全命令覆盖,重复按键/长按/连发
|
|||
|
|
- 组控:遥控器广播组命令,多个控制器同步输出一致
|
|||
|
|
- 延迟:示波器/逻辑分析仪测量(按键触发到 GPIO/PWM 变化),记录 P50/P95
|
|||
|
|
|
|||
|
|
### 8.2 Matter 多生态(MCU2)
|
|||
|
|
|
|||
|
|
- Apple Home / Google Home / Alexa(至少两项)commissioning 演示
|
|||
|
|
- Clusters:OnOff/LevelControl/Groups/Scenes(双色温含 ColorControl)
|
|||
|
|
- OTA:升级演示 + 回滚验证
|
|||
|
|
|
|||
|
|
### 8.3 共存与稳定性
|
|||
|
|
|
|||
|
|
- Wi-Fi 长久在线(24h/72h)期间,遥控器控制无明显延迟/无丢包异常
|
|||
|
|
- 异常恢复:
|
|||
|
|
- MCU1 重启不影响 MCU2(Matter 仍在线;状态恢复后同步)
|
|||
|
|
- MCU2 重启不影响 MCU1(遥控器控制不中断;MCU2 恢复后重新拉取状态)
|
|||
|
|
|
|||
|
|
## 9. Matter 功能测试用例(建议用 chip-tool 记录)
|
|||
|
|
|
|||
|
|
### Endpoint 1(单色灯:开关/调光)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
chip-tool onoff on 1 1
|
|||
|
|
chip-tool onoff off 1 1
|
|||
|
|
chip-tool levelcontrol movetolevelwithonoff 1 1 10 0 0
|
|||
|
|
chip-tool levelcontrol movetolevelwithonoff 1 1 200 0 0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Endpoint 2(双色温灯:开关/调光/色温)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
chip-tool onoff on 1 2
|
|||
|
|
chip-tool onoff off 1 2
|
|||
|
|
chip-tool levelcontrol movetolevelwithonoff 1 2 20 0 0
|
|||
|
|
chip-tool levelcontrol movetolevelwithonoff 1 2 220 0 0
|
|||
|
|
chip-tool colorcontrol movetocolortemperature 1 2 153 0 0
|
|||
|
|
chip-tool colorcontrol movetocolortemperature 1 2 450 0 0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 10. 风险与注意事项
|
|||
|
|
|
|||
|
|
- ESPNOW channel 固定为 1:当路由器信道不可固定到 1 且遥控器固件不可改时,单芯片方案存在先天冲突,需要改架构。
|
|||
|
|
- 单色灯“白光”体验可能受硬件(RGB 三色灯珠)限制,软件无法消除近距离三色颗粒。
|
|||
|
|
- 双色温(SK6812 RGBW)“色温”为近似实现:不同亮度下可能存在色偏;需要通过端点/曲线/gamma 与 RGB/W 分配进行校准。
|
|||
|
|
- Thread + Wi-Fi 混合网络模式需要明确最终产品拓扑与测试方法。
|
|||
|
|
|
|||
|
|
## 11. MCU 间通信协议草案(方案 A)
|
|||
|
|
|
|||
|
|
### 11.1 物理层与链路建议
|
|||
|
|
|
|||
|
|
- UART:建议 921600 或 1Mbps,8N1
|
|||
|
|
- 帧格式:固定 header + version + flags + type + seq + len + payload + CRC32
|
|||
|
|
- 可靠性建议:
|
|||
|
|
- 带 `seq` 与 `ACK`(至少对“状态设置/模式切换/工厂重置”等关键命令)
|
|||
|
|
- 对“按键事件上报”可不必 ACK,但需要丢包容忍(MCU2 以 MCU1 的最终状态为准)
|
|||
|
|
|
|||
|
|
### 11.1.1 帧格式(建议稿,可直接实现)
|
|||
|
|
|
|||
|
|
- `SOF`:2 bytes,固定 `0x55 0xAA`
|
|||
|
|
- `VER`:1 byte,协议版本(初版 `0x01`)
|
|||
|
|
- `FLAGS`:1 byte
|
|||
|
|
- bit0:是否需要 ACK
|
|||
|
|
- bit1:是否为 ACK 包
|
|||
|
|
- bit2:错误包
|
|||
|
|
- bit3..7:预留
|
|||
|
|
- `TYPE`:1 byte,消息类型
|
|||
|
|
- `SEQ`:2 bytes,递增序号(小端)
|
|||
|
|
- `LEN`:2 bytes,payload 长度(小端,0..1024 建议上限)
|
|||
|
|
- `PAYLOAD`:LEN bytes
|
|||
|
|
- `CRC32`:4 bytes(对从 `VER` 到 `PAYLOAD` 的 CRC32,小端)
|
|||
|
|
|
|||
|
|
### 11.1.2 ACK/重试/超时(建议稿)
|
|||
|
|
|
|||
|
|
- 对 `FLAGS.need_ack=1` 的包:
|
|||
|
|
- 接收方在成功处理后回 `ACK` 包(`FLAGS.is_ack=1`,`SEQ` 原样回显,`TYPE`=原 TYPE 或 `TYPE=ACK(0x7F)` 二选一)
|
|||
|
|
- 发送方超时 `T_ACK=50ms` 未收到 ACK:重发,最多 `N_RETRY=3`
|
|||
|
|
- 连续失败后进入降级策略:记录错误计数并上报 `EVT_DIAG`(或触发重新握手)
|
|||
|
|
- 对 `EVT_KEY_CMD`:可 `need_ack=0`(允许丢);但要求 MCU1 后续用 `EVT_LOCAL_STATE` 做闭环状态同步
|
|||
|
|
|
|||
|
|
### 11.1.3 上电/复位握手(建议稿)
|
|||
|
|
|
|||
|
|
- MCU2 启动后发送 `HELLO`(包含 MCU2 fw_ver/proto_ver/boot_reason)
|
|||
|
|
- MCU1 回 `HELLO_RSP`(包含 MCU1 fw_ver/proto_ver、灯型/能力、当前输出状态摘要)
|
|||
|
|
- MCU2 收到后发送 `GET_STATE`(拉取完整状态),并以此刷新 Matter 属性(避免 MCU2 重启后状态漂移)
|
|||
|
|
|
|||
|
|
### 11.2 消息类型(最小集)
|
|||
|
|
|
|||
|
|
- `EVT_KEY_CMD`(MCU1→MCU2):遥控器命令事件
|
|||
|
|
- 字段:cmd(0x01..0x05/扩展)、src_mac、timestamp、group_mode/slot
|
|||
|
|
- `EVT_LOCAL_STATE`(MCU1→MCU2):MCU1 本地执行后的最终状态
|
|||
|
|
- 字段:endpoint/light_id、onoff、level、cct(如有)、transition_time
|
|||
|
|
- `SET_STATE`(MCU2→MCU1):来自 Matter 的控制请求
|
|||
|
|
- 字段:目标灯/组、onoff/level/cct、期望渐变时间
|
|||
|
|
- `SET_MODE`(MCU2→MCU1):模式切换(配对、清码、恢复出厂、进入测试模式)
|
|||
|
|
- `HEARTBEAT`(双向):存活与版本信息(fw_ver、proto_ver、uptime、heap)
|
|||
|
|
|
|||
|
|
建议补充类型:
|
|||
|
|
|
|||
|
|
- `GET_STATE`(MCU2→MCU1):请求 MCU1 上报完整状态
|
|||
|
|
- `EVT_DIAG`(双向):错误码/计数器(CRC 错、丢包、重试次数、WDT、重启原因)
|
|||
|
|
|
|||
|
|
### 11.2.1 字段定义建议(便于落地与调试)
|
|||
|
|
|
|||
|
|
- `light_id`:1 byte
|
|||
|
|
- `0x01` 单色灯
|
|||
|
|
- `0x02` 双色温灯
|
|||
|
|
- `onoff`:1 byte(0/1)
|
|||
|
|
- `level`:1 byte(0..254,按 Matter 约定)
|
|||
|
|
- `cct_mireds`:2 bytes(小端,按 Matter ColorTemperatureMireds)
|
|||
|
|
- `transition_ms`:2 bytes(小端)
|
|||
|
|
- `timestamp_ms`:4 bytes(小端,MCU1 uptime 毫秒)
|
|||
|
|
|
|||
|
|
### 11.3 一致性原则(避免双写打架)
|
|||
|
|
|
|||
|
|
- MCU1 为“灯输出唯一权威”(source of truth for physical output)。
|
|||
|
|
- MCU2 为“ Matter 属性权威”(source of truth for ecosystem state)。
|
|||
|
|
- MCU2 更新 Matter 属性应以 `EVT_LOCAL_STATE` 为准,而不是以 `EVT_KEY_CMD` 直接推导(防止执行失败/限幅/场景叠加导致不一致)。
|
|||
|
|
|
|||
|
|
## 11.4 PCB 连线清单(方案 A,UART)
|
|||
|
|
|
|||
|
|
- UART:
|
|||
|
|
- MCU1_TX -> MCU2_RX(GPIO 待定:MCU1=____ / MCU2=____)
|
|||
|
|
- MCU1_RX <- MCU2_TX(GPIO 待定:MCU1=____ / MCU2=____)
|
|||
|
|
- 可选硬件流控(建议预留焊盘,量产可按稳定性决定是否启用):
|
|||
|
|
- MCU1_RTS / MCU1_CTS
|
|||
|
|
- MCU2_RTS / MCU2_CTS
|
|||
|
|
- 额外控制/中断线(建议预留):
|
|||
|
|
- MCU2->MCU1 `RESET_REQ`(请求 MCU1 执行:清码/恢复出厂/重新配对/进入测试)
|
|||
|
|
- MCU1->MCU2 `IRQ_EVT`(有新事件/状态上报,降低轮询开销)
|
|||
|
|
- 电平:两者均为 3.3V TTL(无需电平转换)
|
|||
|
|
- 调试:建议预留测试点(TX/RX/GND)便于产线与现场抓包
|
|||
|
|
|
|||
|
|
## 13. 可对外汇报摘要(可直接发甲方)
|
|||
|
|
|
|||
|
|
本阶段已完成 ESP32-C6 Matter + ESP-NOW 混合固件的核心功能联调:固件已实现双 endpoint(单色灯 + 双色温灯)并通过 iOS Home 完成 Matter commissioning 与控制验证;同时接入甲方量产遥控器的 ESP-NOW 协议(channel=1、命令 0x01..0x05/0xA5),可通过“5 次重启进入配对模式 + 遥控器 Zone 配对”实现一台遥控器(Zone1/Zone2)分别绑定两台 ESP32-C6 灯具。当前 APP(iOS Home)与遥控器均可对两台设备进行控制;设备支持 HTTP OTA(远程服务器下载升级,支持双 OTA 分区切换),已验证升级后版本号变化。下一步将推进 Google Home/Alexa/RainMaker 等生态兼容性测试,并固化交付脚本、测试报告与完整技术文档。
|
|||
|
|
|