ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

connectedhomeip Pump 泵示例应用解析:PCC 数据模型、PumpManager 状态机与多平台构建实战

2026/9/16 10:33:33 拓冰建站 浏览量
connectedhomeip Pump 泵示例应用解析:PCC 数据模型、PumpManager 状态机与多平台构建实战 connectedhomeip Pump 泵示例应用解析PCC 数据模型、PumpManager 状态机与多平台构建实战【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip本篇以 connectedhomeipMatter 开源实现仓库中的 Pump 泵示例应用为主体结合 Pump 示例文档入口 及其挂载的各平台 README、共享数据模型配置 和 PumpManager 源码完整讲解 Pump 应用的设备数据模型、启停动作状态机实现、四个硬件平台的构建/烧录流程以及通过 chip-tool 完成 BLE 配网与控制泵设备的实战操作。读完后你可以独立完成 Pump 示例的编译、配网并读懂其 Pump Configuration and ControlPCC簇属性如何被读写。1. 示例定位与仓库结构Pump 示例模拟一台可远程控制的泵pump设备提供基础的 Start/Stop 功能用按钮模拟状态切换、用 LED 显示状态。它由 lock-app 演进而来被官方定位为“探索 Matter 工作机制 作为自研泵类产品的模板”。文档入口 docs/examples/pump.md 本身是 Sphinx toctree 索引页通过pump-app/**/README通配符挂载了各平台的 README实际内容分布在以下平台目录中nRF Connect SDK 平台基于 Nordic nRF52840/nRF5340 ZephyrThread MED 设备Silicon Labs EFR32 平台基于 MG24 系列支持 Thread/Wi-Fi含 LCD 二维码、KVS 与内存调优说明Telink 平台基于 B91/B92/W91 开发板支持 OTA 流程演示TI CC13XX/CC26XX 平台基于 SimpleLink SDK支持 LIT ICD 与 MCUBoot OTA。各平台之外examples/pump-app/pump-common/存放跨平台共享部分pump-app.zap/pump-app.matter数据模型配置文件与 BUILD.gn。2. 数据模型Endpoint 1 与 Pump Configuration and Control 簇从 pump-app.zap 可以看到该示例的数据模型骨架厂商代码0x1002keyValuePairs 中的 manufacturerCodes全局defaultResponsePolicy为always并开启 commandDiscoveryEndpoint 1MA-pump主设备类型为 Root DeviceDevice Type 0x0016Profile 0x0104设备版本 5Endpoint 1 上启用的簇均为 server 侧另 OTA Provider 为 client 侧Descriptor0x001DDeviceTypeList、ServerList、ClientList、PartsList 等Access Control0x001FACL 等属性并启用 AccessControlEntryChanged 事件Basic Information0x0028含 VendorName、ProductLabel、UniqueID、SpecificationVersion 等全量属性与 StartUp/ShutDown/Leave 事件OTA Software Update Provider0x0029client 侧启用 QueryImage、ApplyUpdateRequest、NotifyUpdateApplied 等命令OTA Software Update Requestor0x002Aserver 侧启用 AnnounceOTAProvider 命令及 DefaultOTAProviders、UpdateState、UpdateStateProgress 等属性Pump Configuration and Control文件内约 L3863 处定义PCC 簇代码 0x0078server 侧这是本示例的业务核心包含 PumpStatus约 L4079 处等属性对应的簇定义 XML 可参考 data_model/1.6/clusters 下的 Pump Configuration and Control 规范文件。这一结构意味着Pump 应用对外呈现为一台带 PCC 簇的 Matter 设备控制器可通过标准 Attribute Read/Write 与命令接口读取泵状态、写入 OperationMode 等属性同时具备完整的 OTA Requestor 能力以接收固件更新。3. PumpManager启停动作的状态机实现各平台的业务逻辑高度一致以 Silicon Labs 版为例PumpManager.h 定义了核心状态机enum State_t { kState_StartInitiated 0, kState_StartCompleted, kState_StopInitiated, kState_StopCompleted, } State;从 PumpManager.cpp 的实现看Init()创建 CMSIS-RTOS2 一次性定时器osTimerNew初始状态为kState_StopCompletedInitiateAction(aActor, aAction)是唯一的动作入口做了状态保护只有kState_StartCompleted STOP_ACTION或kState_StopCompleted START_ACTION的组合才会受理避免动作叠加受理后启动 500ms 定时器ACTUATOR_MOVEMENT_PERIOS_MS模拟执行机构的运动耗时并触发mActionInitiated_CB回调定时器到点后TimerEventHandler不直接在 timer 任务上下文处理而是向 AppTask 事件队列投递kEventType_PumpTimer事件由ActuatorMovementTimerEventHandler在应用任务上下文中把状态从Initiated迁移到Completed并触发mActionCompleted_CB回调该回调在各平台实现中通常负责更新 PCC 簇属性、LED 与上报。这个“回调 事件队列”的模式是 Matter 应用层的典型结构外设/定时器上下文只做轻量投递状态变更与簇属性写入统一收敛到应用事件循环避免了跨任务并发问题。4. 各平台构建与烧录4.1 nRF Connect SDKnRF52840/nRF5340该版本自述仅用于对 Nordic 平台 Matter 集成的冒烟测试官方建议量产参考 Nordic 自家的 nRF Connect SDK Matter 样例。关键要点见 nrfconnect/README.md设备以 Thread MEDMinimal End Device运行IPv6 默认禁用需先通过 BLE 完成 Rendez-vous 配网获取网络凭证出于安全考虑BLE 广播需手动触发文档中单独给出 “Bluetooth LE advertising” 小节说明目录内含 prj.conf、prj_release.conf、mcuboot 与 ipc_radio 的 sysbuild 配置以及 nRF52840-DK / nRF5340-DK 的板级 overlay。4.2 Silicon Labs EFR32MG24Silabs README 是四份中最完整的实战指南核心流程构建默认板 BRD4187Ccd ~/connectedhomeip ./scripts/examples/gn_silabs_example.sh ./examples/pump-app/silabs/ ./out/pump-app BRD4187C构建为 ICD间歇连接设备./scripts/examples/gn_silabs_example.sh ./examples/pump-app/silabs/ ./out/pump-app_ICD BRD4187C --icd # 等价于 gn 参数SILABS_BOARDBRD4187C enable_sleepy_devicetrue chip_openthread_ftdfalse烧录cd ~/connectedhomeip/examples/pump-app/silabs python3 out/debug/matter-silabs-pump-example.flash.py所有 EFR32 板需要预置 bootloaderREADME 指向 Simplicity Commander 与预置镜像。日志输出两种方式SEGGER RTT需安装 J-Link 软件包MG24 用JLinkExe -device EFR32MG24AXXXF1536 -if SWD -speed 4000 -autoconnect 1后在第二个终端跑JLinkRTTClient或串口 Console默认 115200、CTS/RTSverbose 模式需 921600可用commander vcom config --baudrate 921600 --handshake rtscts调整。设备交互WSTKLCD 显示配网二维码无 LCD 的板型二维码 URL 会打印在 RTT 日志中LED 0 有四种状态表示配网/连接进度短闪 50ms on/950ms off 为未配网待配快速均闪 100/100ms 为 BLE 已连长亮短灭 950/50ms 为已配网未连网常亮为完全连接按键 0 短按重启 BLE 广播快速广播 30 秒后转慢速15 分钟后停止长按 6 秒发起工厂复位提前松开可取消按键 1 切换泵/灯状态。构建选项通过 gn 参数开关选项作用示例chip_progress_logging/chip_detail_logging/chip_automation_logging关闭各级日志... BRD4164A \chip_detail_loggingfalse chip_automation_loggingfalse chip_progress_loggingfalse\is_debug调试/发布构建... \is_debugfalse\show_qr_code关闭 LCD 二维码... \show_qr_codefalse\kvs_max_entriesNVM 中 KVS 最大条目数默认 75阈值 30~255... kvs_max_entries50内存设置README 特别指出 CHIP 大部分 RAM 为静态分配加密BLE Rendez-vous / CASE 会话与 OpenThread 依赖 HEAPFreeRTOSConfig.h中configTOTAL_HEAP_SIZE小于 13KB 会导致 Mbedtls 失败可设enable_heap_monitoring true在 RTT 控制台打印各任务 RAM 用量与分配/释放次数内存跟踪代码入口在 examples/platform/silabs 的 MemMonitoring.cppREADME 中给出的路径为 examples/platform/silabs/MemMonitoring.cpp。4.3 TelinkB91/B92/W91Telink README 给出支持的板型/构建目标对照表tlsr9518adk80d系列、tlsr9528a、tlsr9118bdk40d等构建烧录流程# 1. 激活构建环境推荐用官方 Docker 容器 chip-build-telink 提供匹配的 Zephyr 版本 source ./scripts/activate.sh -p all,telink # 2. 构建板名替换 build_targetflash 容量非 2MB 时追加 -DFLASH_SIZE1m/4m west build -b build_target # 3. 烧录 west flash --erase板级交互Button1 连按 3 次工厂复位Button2 手动触发泵状态Button3 用静态凭证启动 ThreadButton4 打开 BLE 配网窗口红色 LED 表示 Thread 状态短脉冲未入网密集脉冲入网中宽脉冲已作为 CHILD 入网绿色 LED 响应 Identify 簇的六种特效Blink/Breathe/Okay/ChannelChange/Finish/Stop对应Clusters::Identify::EffectIdentifierEnum白色 LED 指示泵运行/停止。Telink 版还完整给出了OTA 更新流程在prj.conf设CONFIG_CHIP_OTA_REQUESTORy后构建产出merged.bin烧录用需 ≥2MB flash与matter.otaOTA 镜像设CONFIG_CHIP_DEVICE_SOFTWARE_VERSION2使其版本高于基线。用 Linux OTA Provider 配合./scripts/examples/gn_build_example.sh examples/ota-provider-app/linux out/ota-provider-app chip_config_network_layer_blefalse ./chip-ota-provider-app -f matter.ota ./chip-tool pairing onnetwork ${OTA_PROVIDER_NODE_ID} 20202021 ./chip-tool accesscontrol write acl [{fabricIndex: 1, privilege: 5, authMode: 2, subjects: [112233], targets: null}, {fabricIndex: 1, privilege: 3, authMode: 2, subjects: null, targets: null}] ${OTA_PROVIDER_NODE_ID} 0 ./chip-tool otasoftwareupdaterequestor announce-otaprovider ${OTA_PROVIDER_NODE_ID} 0 0 0 ${DEVICE_NODE_ID} 04.4 TI CC13XX/CC26XXTI README 面向 CC1354P10、CC2674P10、CC2674R10 开发板准备安装 SysConfigsysconfig-1.22.0_3893-setup.run执行./scripts/bootstrap.sh与./scripts/checkout_submodules.py --shallow --platform cc13xx_26xx linux --recursiveTI Openthread 参考提交需要递归子模块编译激活source ./scripts/activate.sh后按需修改 args.gni 中ti_simplelink_boardLP_EM_CC2674P10/LP_EM_CC1354P10_1/CC2674R10然后cd ~/connectedhomeip/examples/pump-app/ti/cc13x4_26x4 gn gen out/debug --argsti_sysconfig_root\$HOME/ti/sysconfig_1.22.0\ ninja -C out/debugLinux 默认假定 SDK 与 Sysconfig 位于~/tiWindows 默认为C:\ti烧录CCSproject-less 调试会话加载 ELF或 UniFlash加载out/debug/*.out启用 OTA 后镜像为*-mcuboot.hex由 args.gni 中chip_enable_ota_requestor控制。注意 JTAG 烧录会置 Halt-in-Boot 标志软件复位异常时断电重启即可串口日志Application/User UART115200/8N1无流控。TI 版独有的 LIT ICD 交互当 args.gni 中chip_enable_icd_lit与chip_enable_icd_dsls置真时右按键语义扩展——长按超过 1000ms 触发 User Active ModeLIT 支持的一部分双击1000ms切换动态短/长空闲时间DSLS。这与 PCC 之外 Thread 侧的 LIT 机制配套是该示例作为 ICD 参考实现的亮点。5. 配网与控制chip-tool 实战各平台共同的运行流程是触发 BLE 广播 → 用控制器完成ble-thread配网 → 读写 PCC 簇。配网各平台 README 一致的命令形态PIN 20202021、discriminator 3840 为开发默认值./chip-tool pairing ble-thread nodeID hex:OTBR operational dataset 20202021 3840TI 版给出的成功输出样例控制器侧打印CHIP:CTL: Received CommissioningComplete response, errorCode0与Successfully finished commissioning step SendComplete设备侧打印Commissioning complete, notify platform driver to persist network credentials.。PCC 簇控制TI README 中给出的命令格式# 通用格式 ./chip-tool pumpconfigurationandcontrol write|read attribute-name values destination-id endpoint-id # 写入正常模式 operation-mode 0 ./chip-tool pumpconfigurationandcontrol write operation-mode 0 1 1 # 读取当前生效模式 ./chip-tool pumpconfigurationandcontrol read effective-operation-mode 1 1Silabs 版 README 还给出用 OnOff 簇驱动模拟“灯”状态的示例chip-tool onoff on 1 1因为该平台版本沿用了 lock 示例的 UI 语义。Silabs 版另说明可利用 chip-tool 文档 的 Group Commands 能力向多台泵设备组播命令。网络排障提示Silabs README 的 Notes若路由器不提供原生 IPv6需在 Border Router 与 PC 上分别添加静态地址如sudo ip addr add dev if 2002::2/64与2002::1/64并在 PC 上加经2002::2指向 Thread 全局前缀的路由。6. 小结与延伸阅读Pump 示例的价值在于“小而全”一个 Root PCC 簇的端点模型pump-app.zap、一个带事件循环的轻量状态机PumpManager.cpp外加 OTA Requestor 能力可直接作为自研泵类 Matter 产品的骨架四个平台覆盖了 Matter 生态的典型集成路径ZephyrNordic/Telink、Gecko SDKSilabs、SimpleLink SDKTI构建脚本、sysbuild/args.gni、Kconfig 的组织方式可作为其他示例的对照样板需要扩展数据模型时改动入口是pump-common/pump-app.matter新式 Matter 配置与pump-app.zapZAP 格式簇与设备类型的规范定义可对照 data_model/1.6 下的 XML平台级细节可继续参考 docs/platforms/nrf 的 nRF Connect 平台总览与 docs/platforms/silabs 的 EFR32 说明含 EFR32 OTA 软件更新指南。【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考