Matter 连接标准之 Bouffalolab RPC 控制台:从固件构建到远程灯光控制的完整实战指南
【免费下载链接】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(原 Project CHIP)在 Bouffalolab(博流智能)平台上的 Pigweed RPC 控制台方案。通过本文,你将掌握如何为 BL602、BL704L、BL706 系列开发板构建带 RPC 服务的 lighting 固件,如何编译安装chip-console交互式控制台,并通过串口远程调用rpcs.chip.rpc.Lighting服务实现灯具状态的读取与设置,从而获得一条可直接复制的设备调试与验证路径。
一、Bouffalolab 平台的 RPC 控制台概述
RPC(Remote Procedure Call)控制台是 Matter SDK 中基于 Pigweed 生态构建的一套设备端交互工具链。它允许开发者在主机(PC)上通过 UART 串口与运行 Matter 固件的嵌入式设备建立通信,实时调用设备端注册的 gRPC 风格服务(如灯控、设备信息、按键、Thread 等),而无需依赖完整的 Matter 网络配对流程。
在 Bouffalolab 平台中,RPC 服务与设备日志共用一个 UART 通道:日志以 HDLC 帧封装发送(地址为 1),RPC 通信则使用同一物理链路的其他 HDLC 地址,二者互不干扰。这一设计使得开发者既能通过chip-console下发控制指令,又能同时观察设备日志,极大提升了调测效率。相关的平台实现可参考 Rpc.cpp 与 PigweedLogger.cpp。
二、支持的开发板与固件构建
本指南对应的示例程序为 lighting-app(灯控应用)。以下三个目标(target)分别对应三种 Bouffalolab 官方开发板,其中-rpc后缀表示固件中包含 RPC 服务:
| 开发板 | 连接方式 | 构建目标 |
|---|---|---|
| BL602DK | Wi-Fi | bouffalolab-bl602dk-light-wifi-littlefs-rpc |
| BL704LDK | Thread | bouffalolab-bl704ldk-light-thread-littlefs-rpc |
| BL706DK | Thread | bouffalolab-bl706dk-light-thread-littlefs-rpc |
构建命令统一通过 SDK 的build_examples.py脚本完成,例如 BL602DK 的构建命令为:
./scripts/build/build_examples.py --target bouffalolab-bl602dk-light-wifi-littlefs-rpc buildBL704LDK 与 BL706DK 的 Thread 版本对应命令为:
./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light-thread-littlefs-rpc build ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-thread-littlefs-rpc build说明:
littlefs表示文件系统采用 littlefs 实现(用于持久化存储),wifi/thread则标明设备的底层连接协议。构建前需先完成 SDK 环境的引导(见下文 console 构建部分的bootstrap.sh),并确保已检出 Bouffalolab SDK 相关依赖。平台侧的构建入口与 Flash 分区配置位于 examples/platform/bouffalolab,其中 BL602 的分区表可参考 partition_cfg_4M.toml。
三、RPC 服务的设备端实现剖析
理解设备端如何承载 RPC 服务,有助于更高效地使用控制台。Bouffalolab 平台的 RPC 服务注册集中在 Rpc.cpp,其核心流程如下:
- 服务实例化:在匿名命名空间中创建各服务对象,例如
Lighting lighting_service、BouffaloDevice device_service、BouffaloButton button_service、Thread thread、OtCli ot_cli_service等(见 Rpc.cpp)。 - 服务注册:
RegisterServices()将上述服务逐一挂载到pw::rpc::Server上(见 Rpc.cpp),控制台端调用rpcs.chip.rpc.*命名空间下的方法,即对应这些注册项。 - 服务启用开关:所有服务均受编译宏控制(如
PW_RPC_LIGHTING_SERVICE、PW_RPC_DEVICE_SERVICE、PW_RPC_THREAD_SERVICE、PW_RPC_TRACING_SERVICE等)。-rpc后缀的构建目标会开启相应开关,从而把对应 RPC 服务编入固件。 - RPC 任务:
Init()使用 FreeRTOS 静态任务创建 RPC 服务线程(栈 1536 字、优先级 1),任务主体调用Start(RegisterServices, &logger_mutex)启动服务端(见 Rpc.cpp)。
此外,BouffaloDevice 提供了Reboot(可指定延时毫秒数,默认 1000ms,最终调用bl_sys_reset_por()软复位)与FactoryReset(默认 1 秒后触发ConfigurationMgr().InitiateFactoryReset())两个设备级方法,它们会在控制台中以rpcs.chip.rpc.Device.Reboot(...)、rpcs.chip.rpc.Device.FactoryReset()的形式暴露。设备日志则通过 PigweedLogger.cpp 以 HDLC UI 帧(地址 1、写缓冲 128 字节)发送,配合互斥量保证多线程日志不交错。
四、构建 chip-console 交互控制台
chip-console是基于 Pigweedpw_console定制的 Python 交互式控制台,已内置 CHIP 所需的全部 RPC proto 定义。完整说明见 examples/common/pigweed/rpc_console/README.md。
4.1 环境准备
首次使用本仓库时,需要先引导环境以安装所有依赖:
source <project_root>/scripts/bootstrap.sh若此前已执行过 bootstrap,则只需激活环境:
source <project_root>/scripts/activate.sh4.2 编译安装
进入 rpc_console 目录,用 GN 生成构建文件并编译:
cd <project_root>/examples/common/pigweed/rpc_console gn gen out/debug ninja -C out/debug该目录的 BUILD.gn 定义了一个pw_python_distribution("chip_rpc_distribution")目标,会将 Pigweed 与 Matter 的 Python 依赖合并打包成名为chip_rpc的 wheel(输出位于out/debug/obj/chip_rpc_distribution下),并支持 editable 模式安装,方便源码调试。
编译完成后,输出目录中还会生成chip_rpc_console_wheels文件夹,内含该工具所需的全部 wheel 包。若在无 SDK 的环境中,只需安装这些 wheel 即可使用控制台:
cd <project_root>/examples/common/pigweed/rpc_console/out/debug pip install chip_rpc_console_wheels/*.whl五、启动 RPC Console 并控制灯光
5.1 启动控制台
将设备通过 USB 串口连接主机后,以设备串口节点为参数启动控制台。Bouffalolab 文档给出的启动命令为(适用于以/dev/ttyACM0枚举的开发板):
$ chip-console -d /dev/ttyACM0 -b 115200其中-d指定串口设备路径,-b指定波特率(此处为 115200)。通用场景下也可使用长选项形式:
$ chip-console --device /dev/ttyUSB0提示:
chip-console是chip_rpc.console包的入口点,也可通过python -m chip_rpc.console直接运行。若设备枚举为ttyUSB0而非ttyACM0,请按实际节点调整-d参数;部分平台还可能需要在系统层配置串口读写权限。
5.2 读取灯光状态
控制台启动后会进入交互式 Python REPL 环境。查询当前灯光开关状态与亮度,执行:
rpcs.chip.rpc.Lighting.Get()5.3 设置灯光状态
将灯光点亮并设置亮度等级为 128,执行:
rpcs.chip.rpc.Lighting.Set(on=True, level=128)Lighting.Set()的两个参数分别对应开关状态(on)与亮度值(level,取值范围视固件实现而定,lighting 示例中通常为 0~255)。该方法最终由设备端注册的LightingRPC 服务接收,并映射到 Matter 应用层执行实际的灯控逻辑。
作为对照,chip-console的通用 RPC 调用示例还包括设备信息查询:
rpcs.chip.rpc.Device.GetDeviceInfo()结合前文设备端实现可知,凡是RegisterServices()中注册过的服务(如rpcs.chip.rpc.Device、rpcs.chip.rpc.Button、rpcs.chip.rpc.Thread等),均可在控制台中以rpcs.chip.rpc.<Service>.<Method>()的形式调用。
六、典型调测工作流总结
综合以上内容,Bouffalolab 平台使用 RPC 控制台的标准工作流可归纳为四步:
- 构建固件:按第二节命令构建对应开发板的
-rpc目标镜像并烧录; - 准备控制台:执行
bootstrap.sh/activate.sh,在examples/common/pigweed/rpc_console下gn gen+ninja编译并安装chip-console; - 连接设备:确认串口节点(如
/dev/ttyACM0),以 115200 波特率启动chip-console; - 调用 RPC:通过
rpcs.chip.rpc.*接口读取/设置灯光状态,或调用Device.Reboot、Device.FactoryReset等设备级操作辅助调试。
该方案让开发者无需完整走一遍 Matter 配网流程,即可快速验证硬件外设与业务逻辑,是 Bouffalolab 系列开发板日常开发与自动化测试中非常实用的调测手段。
【免费下载链接】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),仅供参考