ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Telink 平台 All Devices App 指南:基于 Zephyr 的动态 Matter 设备类型运行时切换与持久化

Telink 平台 All Devices App 指南:基于 Zephyr 的动态 Matter 设备类型运行时切换与持久化 Telink 平台 All Devices App 指南基于 Zephyr 的动态 Matter 设备类型运行时切换与持久化【免费下载链接】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导读本文档是 Matter SDKconnectedhomeip仓库中all-devices-app示例在 Telink 平台上的完整使用指南。该示例采用 Matter 推荐的全新Code-Driven 范式不依赖 ZAP 生成的全局实例与数据模型让同一份固件可以在运行时通过设备 shell 命令切换为不同类型的 Matter 设备如contact-sensor、on-off-light、temperature-sensor等并将所选设备类型持久化保存重启后自动恢复。阅读本文后你将掌握在 Telink TLSR9518 开发板上完成环境初始化、编译、烧录与串口交互的完整流程使用devtype/telink/mattershell 命令管理设备类型生命周期以及通过chip-tool以 BLE 方式将设备配对commissioning到 Wi-Fi 或 Thread 网络的实战方法。应用概述一颗固件多种 Matter 设备all-devices-app的核心设计思想是动态数据模型设备类型不是在编译期由.zap/.matter文件固定而是在运行时通过 shell 命令选择并通过持久化存储在下次启动时自动恢复。在 Telink 平台上这一能力通过devtype set device-type命令暴露给开发者。从源码结构看Telink 版本的实现由以下关键文件组成示例入口与 shell 命令注册devtypeshell 命令负责校验设备类型并调度服务器启动应用主任务初始化公共组件并绑定 LED 状态指示服务器启动与持久化逻辑负责设备类型的存储读取、Root Node 注册、Code-Driven 数据模型装配设备工厂注册表集中维护设备类型字符串 → C 设备实现的运行时注册映射。这套架构将平台无关的核心逻辑放在all-devices-common/而 Telink 平台相关代码Zephyr shell、LED、PWM、按键放在examples/platform/telink/与examples/all-devices-app/telink/中保证核心逻辑可跨平台复用。构建与烧录初始化构建环境在仓库根目录执行以下命令激活包含all与telink依赖的 Python 虚拟环境与编译工具链source ./scripts/activate.sh -p all,telink-p参数指定需要安装的依赖分组package groupall拉取完整构建依赖telink额外准备 Zephyr/West 相关的 Telink 工具链。编译目标./scripts/build/build_examples.py --target telink-tlsr9518adk80d-all-devices buildbuild_examples.py是仓库统一的示例构建脚本--target指定目标板卡与示例组合。telink-tlsr9518adk80d-all-devices表示TLSR9518ADK80D 开发板 all-devices-app。构建完成后产物位于out/telink-tlsr9518adk80d-all-devices/其中 Zephyr 生成的合并固件含 bootloader 与应用为out/telink-tlsr9518adk80d-all-devices/zephyr/merged.bin烧录固件Telink 平台使用 Zephyr 的west工具链烧录west flash --erase--erase会在烧录前擦除目标 Flash确保旧数据包括可能残留的设备类型持久化键不会干扰首次启动行为。需要说明的是该命令需在已正确配置了west与目标板卡连接的工作环境中执行例如已通过scripts/activate.sh激活并安装好 JLink 或 Telink 烧录驱动。串口调试固件烧录并上电后通过 USB 转串口连接开发板使用screen打开 115200 波特率的终端screen /dev/ttyUSB0 115200实际串口设备节点可能因接入顺序不同而为/dev/ttyACM0或ttyUSB1可用ls /dev/tty*确认。在该终端中即可输入下文介绍的全部 shell 命令并观察日志输出。设备类型的运行时切换核心功能首次启动选择设备类型设备首次上电时由于持久化存储中尚不存在设备类型记录Matter 服务器不会自动启动日志会提示No stored device type found; use devtype set device-type to select one此时在 shell 终端中执行devtype set device-type例如选择接触传感器devtype set contact-sensor命令执行成功后Matter 服务器才随之启动日志可见All-devices server started with device type contact-sensor并打印 BLE 方式的 onboarding 二维码/手动配对码。devtype命令的底层实现在 DeviceTypeShell.cpp 中其行为逻辑是参数校验argc ! 2时打印用法Usage: devtype set device-type状态检查若服务器已启动或启动已排程返回-EALREADY提示必须先恢复出厂设置才能更换设备类型合法性校验通过NoHooksDeviceFactory::GetInstance().IsValidDevice(deviceType)检查该字符串是否在设备工厂注册表中若非法则列出所有受支持的设备类型异步启动将设备类型暂存到gRequestedDeviceType再通过chip::DeviceLayer::PlatformMgr().ScheduleWork(StartAllDevicesServerWork, 0)把实际启动工作投递到 Matter 平台线程执行避免在 shell 上下文直接启动服务器。受支持的设备类型Telink 版本通过 CMake 构建见 telink/CMakeLists.txt默认启用device-factory/enabled_devices.cmake中的全部设备类型。从 DeviceFactory.h 的注册表看可用的设备类型键即devtype set可传的值包括类别设备类型键照明on-off-light、dimmable-light、color-temperature-light、extended-color-light、on-off-light-switch传感器contact-sensor、occupancy-sensor、temperature-sensor、humidity-sensor、pressure-sensor、flow-sensor、light-sensor、soil-sensor、rain-sensor、water-leak-detector、water-freeze-detector家电dishwasher、laundry-washer、laundry-dryer、microwave-oven、oven、oven-2、refrigerator、refrigerator-2、air-purifier、extractor-hood、cooktop、mode-select能源/安防power-source、electrical-sensor、device-energy-management、smoke-co-alarm、water-valve、chime、speaker网络/控制aggregator、bridged-node、network-infrastructure-manager、generic-switch、mounted-on-off-control、mounted-dimmable-load-control、proximity-ranger、robotic-vacuum-cleaner、air-quality-sensor、ambient-context-sensor说明上述完整列表以 POSIX/GN 构建的 enabled_devices.gni 为准其中all_devices_enabled_devices为空列表表示全部启用。Telink CMake 构建对应的配置为enabled_devices.cmake两者保持一致实际可用的类型以目标固件编译进设备工厂的集合为准。若输入不支持的设备类型shell 会打印Invalid device type: type并列出全部有效选项。设备类型与具体实现的映射关系可以在 DeviceFactory.h 中看到例如contact-sensor→BooleanStateSensor以kContactSensor设备类型注册到数据模型on-off-light→LoggingOnOffLighttemperature-sensor→IncreasingTemperatureSensordishwasher→EmulatedDishwasherfan→LoggingFan含 OnOff 集群fan-no-onoff则不带 OnOff 集群。这些设备大多采用模拟/日志型实现无需真实外设即可演示 Matter 集群交互。服务器启动的底层流程devtype set命令最终通过 AllDevicesServer.cpp 中的StartAllDevicesServer()启动整个 Matter 服务器其核心链路为DoStartAllDevicesServer(deviceType, persistDeviceTypetrue)检查服务器未启动、参数非空PopulateAllDevicesDataModelProvider()完成初始化初始化属性持久化提供者、GroupDataProvider、创建CodeDrivenDataModelProvider并先注册Root NodeEndpoint 0NoHooksDeviceFactory::GetInstance().Init(...)注入服务器上下文FabricTable、TimerDelegate、Binding 表等通过deviceFactory.Create(gDeviceType)实例化所选设备用ConsecutiveEndpointIdAllocator(kDeviceEndpointId)将其注册到Endpoint 1Server::GetInstance().Init(*gInitParams)正式启动 Matter 服务器用SyncSetKeyValue(kDeviceStorageKey, ...)将设备类型写入持久化存储存储键为all-devices/dev-type并打印 onboarding 信息。持久化机制重启后自动恢复设备类型设备类型在选择后通过持久化存储接口PersistentStorageDelegate写入非易失存储键名为all-devices/dev-type。后续每次启动InitAllDevicesServer()会先尝试读取该键若读取成功且长度大于 0则直接以该设备类型调用DoStartAllDevicesServer(deviceType, false)启动服务器注意此时persistDeviceTypefalse不会重复写入日志打印Found stored device type type, starting all-devices server若读取失败键不存在则打印提示等待devtype set选择。这意味着只要选择过一次设备类型后续所有重启断电、复位都会自动恢复为同一设备类型无需再次输入命令。存储键all-devices/dev-type与 64 字节的最大长度限制均定义在 AllDevicesServer.cpp 中。更换设备类型先恢复出厂设置由于设备类型一旦启动服务器便被持久化且同一时刻只允许一种设备类型运行更换设备类型必须执行恢复出厂设置 → 重启 → 重新选择三步流程第一步恢复出厂设置清除持久化存储matter device factoryreset该命令清除包括all-devices/dev-type在内的所有持久化键fabric、commissioning 信息等使设备回到出厂状态。第二步重启设备telink reboottelink是 Telink 平台提供的板级 shell 命令重启后InitAllDevicesServer()因读取不到存储键而进入等待选择状态。第三步选择新的设备类型devtype set device-type此时可自由选择另一种设备类型启动。如果不先执行 factoryresetdevtype set会因服务器已启动而返回错误提示Server already started. Factory reset is required to change device type.这一点在 DeviceTypeShell.cpp 中有明确的状态保护。使用 chip-tool 配对Commissioning设备类型启动后即可使用仓库中的chip-tool控制器通过 BLE 配对方式将设备接入网络Wi-Fi 或 Thread。Wi-Fi 网络配对./chip-tool pairing ble-wifi 1234 ssid password 20202021 3840参数含义1234为本次配对的节点 IDNode IDssid/password为 Wi-Fi 接入点凭据20202021为配对码discriminator/手动配对码对应演示二维码中的 onboarding 信息3840为协商后的端口号。Thread 网络配对./chip-tool pairing ble-thread 1234 hex:${DATASET} 20202021 3840其中${DATASET}是 Thread 网络的 Active Operational Dataset十六进制字符串需要提前从 Thread Border Router如ot-ctl dataset active -x获取。配对成功后设备将自动加入对应的 Wi-Fi 或 Thread 网络后续交互即可通过 IP 网络进行。说明配对前请确认设备端已打印 onboarding 二维码信息PrintOnboardingCodes(RendezvousInformationFlag::kBLE)说明服务器已通过 BLE 处于可发现状态。关于 chip-tool 的更多用法读属性、发命令、批量交互等参见 chip-tool 文档。平台配置要点Telink 版 all-devices-app 的 Zephyr 配置位于 prj.conf其中与本示例直接相关的关键项配置项值作用CONFIG_CHIPy—启用 Matter/CHIP 支持CONFIG_CHIP_LIB_SHELLy—启用 CHIP shell 子系统devtype/matter命令依赖此开关CONFIG_BT_DEVICE_NAMEAllDevicesBLE 广播名称CONFIG_PWMy—启用 PWM用于 LED/亮度模拟CONFIG_CHIP_OTA_REQUESTORn—禁用 Matter OTA本示例不演示升级CONFIG_CHIP_DFU_OVER_BT_SMPn—禁用基于 BLE SMP 的 DFUCONFIG_CHIP_FACTORY_DATAn—禁用工厂数据使用开发版 DAC/PAI 凭据CONFIG_PMn—禁用电源管理特别注意CONFIG_CHIP_LIB_SHELLdevtype命令的实现整体被包裹在#if CONFIG_CHIP_LIB_SHELL条件编译中见 DeviceTypeShell.cpp若关闭该选项设备将失去运行时切换设备类型的能力。CMake 构建方面telink/CMakeLists.txt 揭示了几个实现细节通过${CHIP_ROOT}/config/telink/app/enable-gnu-std.cmake启用 GNU 标准支持直接引入 Code-Driven 数据模型源码CodeDrivenDataModelProvider.cpp、EndpointInterfaceRegistry.cpp、ServerClusterInterfaceRegistry.cpp印证本示例完全基于 Code-Driven 范式不依赖 ZAP 生成代码根据CONFIG_NET_L2_OPENTHREAD/CONFIG_CHIP_WIFI编译开关分别引入ThreadRootNode或WifiRootNode即上文配对流程中Wi-Fi 或 Thread两种根节点形态的编译期来源引入AllDevicesServer.cpp、mainCommon.cpp与设备工厂的ALL_DEVICES_DEVICE_SOURCES将平台无关设备实现链接进固件。快速参考场景命令初始化环境source ./scripts/activate.sh -p all,telink编译./scripts/build/build_examples.py --target telink-tlsr9518adk80d-all-devices build烧录west flash --erase串口screen /dev/ttyUSB0 115200首次选择设备类型devtype set device-type查询/输入非法类型devtype set 无效值自动列出全部有效类型恢复出厂matter device factoryreset重启telink rebootWi-Fi 配对./chip-tool pairing ble-wifi 1234 ssid password 20202021 3840Thread 配对./chip-tool pairing ble-thread 1234 hex:${DATASET} 20202021 3840延伸阅读All Devices App 总览平台无关部分Code-Driven 范式优势、--device参数、多端点/桥接拓扑、设备工厂架构与完整设备列表架构与设计模式Code-Driven 数据模型、DeviceFactory/SingleEndpoint组件层级与平台分离设计启动流程与 CLI 参考应用初始化与端点组合参数新增模拟设备指南如何实现新的 Matter 设备类型并接入设备工厂自定义产品基线指南如何从本模拟器基线迁移到自定义产品应用。【免费下载链接】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),仅供参考
返回列表