使用 K32W061 DK6 在照明应用 Matter 应用程序中集成门锁集群
此示例演示介绍了在恩智浦 K32W061 DK6 开发套件上运行的现有 Matter 照明应用中添加和执行门锁集群的过程。它重点介绍了对 Matter 照明应用所做的更改,同时还展示了使用 ZAP 平台所需的集群配置。这两个示例均基于 Connectedhomeip 存储库,因此用户需要按照原始 README 中的说明完成克隆和环境设置的整个过程。此演示仅包含必须替换照明应用示例中原始文件夹和文件的部分。
主板:IOTZTB-DK006
类别:无线连接
外围设备:蓝牙、USB
工具链:GCC
目录
1.软件
本次开发基于 Connectedhomeip (CHIP) 开源项目 v1.4.0.0 版本,并针对 NXP K32W061 SDK 开发套件。此代码库包含来自原始Connectedhomeip/examples/lighting-app/nxp/代码库的照明应用示例文件夹,以及添加门锁集群所需的所有修改文件。
构建和开发所需的环境是 Ubuntu 20.04 或 Ubuntu 22.04 版本。构建系统使用 gn 和 ninja 来构建项目。Ubuntu 环境的必要先决条件可以按照本README中的步骤安装。
为了在 K32W061 板上刷新应用程序,可以使用MCUXpresso IDE或 DK6Programmer 工具。
2.硬件
此演示需要以下硬件设置:
- 带有通用扩展板 OM15082-2 的K32W061 DK6开发套件
- 用于调试和控制设备的控制器。本演示使用 Raspberry Pi 4 作为控制器实现。
- 用于 Raspberry Pi 的 SD 卡,带有 Matter 特定图像和 OTBR 实现
- NORDIC Dongle 用于在节点和控制器之间创建 Thread 网络
3. 设置
按照以下步骤设置环境。如果在激活 Matter 虚拟环境时遇到问题,可以在此处找到与 Matter 仓库相关的所有要求。
克隆connectedhomeip存储库后,仅需要检出NXP特定的子模块:
shell
user@ubuntu: ~/connectedhomeip$ scripts/checkout_submodules.py --shallow --platform nxp --recursive
要激活环境:
shell
user@ubuntu: ~/connectedhomeip$ source scripts/activate.sh
初始化/更新 NXP SDK:
shell
user@ubuntu: ~/connectedhomeip$ third_party/nxp/nxp_matter_support/scripts/update_nxp_sdk.py --platform k32w0
上述所有步骤均直接取自照明应用程序的README文件。
3.1 解决方案概述
开源 Matter 标准允许将集群和端点用于不同的应用。本例中,以 Lighting App 为例。如下图所示,除了前两个端点(设备类型为Matter Root Node 的端点 0和设备类型为Matter On/Off Light 的端点 1,最初来自 Lighting App)之外,还添加了第三个端点——设备类型为Matter Door Lock 的端点 2。这两个应用均基于 Project CHIP 和 NXP K32W SDK,并支持通过低功耗 802.15.4 Thread 网络远程访问和控制灯泡或门锁。
3.2 使用 ZAP 配置集群
ZAP平台概述
ZAP 平台是一个基于 Zigbee 集群库的应用程序和库的通用引擎和用户界面。它用于配置和创建 Matter 集群,因为它为 Matter 应用程序和 SDK 提供了一些功能,例如:配置端点、集群和属性;创建可自动生成数据模型定义和 Matter 源代码的模板。
有关如何安装 ZAP 的更多信息和步骤请参见此处。
添加门锁集群
此演示使用了照明应用示例中的原始 .zap 文件,该文件不包含门锁组件。此代码库附带的 zap 文件夹包含已修改的 .zap 文件,该文件应在执行以下步骤后生成。
启动ZAP平台后,第一步是加载lighting-on-off.zap文件。
- 文件 -> 打开文件 -> 从下载的 Matter 存储库中选择 lights-on-off.zap 文件。
下一步是添加一个新的端点并将其配置为门锁应用程序。
- 添加端点 -> 在“创建新端点”弹出框中选择设备类型“Matter Door Lock” -> 创建
创建新端点后,主要关注点是门锁集群。需要检查其属性、命令和事件,以确保所有内容都已正确配置,适合应用程序。
- 搜索“门锁”集群
- 配置 -> 命令 -> 检查 LockDoor 和 UnlockDoor 命令是否已启用
- 最后,新文件需要保存在connectedhomeip存储库中,路径为:/connectedhomeip/examples/lighting-app/nxp/zap。
3.3 实施方面的变化
Matter 示例使用的源文件和头文件位于 Matter 主存储库的以下路径:connectedhomeip/examples/lighting-app/nxp/k32w0。用户必须将原始存储库中的文件替换为以下内容:
- main/文件夹(替换connectedhomeip/examples/lighting-app/nxp/k32w0/main/)
- zap/文件夹(替换connectedhomeip/examples/lighting-app/nxp/zap/)
- args.gni文件(替换ConnectedHomeIP/Examples/Lighting-app/nxp/k32w0/args.gni)
- BUILD.gn文件(替换ConnectedHomeIP/Examples/Lighting-App/nxp/k32w0/BUILD.gn)
main/目录的结构如下图所示。
ZCLCallback.cpp 文件与 AppTask.cpp 文件共同负责创建程序的工作流程。LightingManager 文件包含特定于照明应用集群的结构和函数的声明和实现。
最初,所有文件仅包含与照明应用相关的函数。我们的目标是通过添加新的实现和功能,将这些文件转换为一个能够接受并响应门锁操作和命令的应用程序。
与 LightingManager 文件类似,该演示也需要一个 LockManager 实现来处理门锁集群和命令。该实现包含 SetLockState、ExecuteCallback 和 GetLockState 等函数。
AppTask.cpp 文件代表应用程序的主体部分。它实现了涉及照明和锁定应用的函数和操作,从一些初始化开始,一直到 LED 闪烁、根据命令打开或关闭。主要关注的是 LockManagerCallback 函数,它接收事件——LockStarted、LockComplete、UnlockStarted、UnlockComplete,并控制扩展板上的 LED D2。
有关新功能的更多详细信息请参阅此存储库中的源文件。
3.4 建筑
修改源文件后,可以按照以下步骤生成新的二进制文件。
shell
user@ubuntu: ~/connectedhomeip$ cd examples/lighting-app/nxp/k32w0
user@ubuntu: ~/connectedhomeip/examples/lighting-app/nxp/k32w0$ gn gen out/debug/
user@ubuntu: ~/connectedhomeip/examples/lighting-app/nxp/k32w0$ ninja -C out/debug
chip_enable_ota_requestor
请注意,由于闪存大小限制,文件 args.gni 中的选项已被禁用。
生成的输出文件可以在out/debug/chip-k32w0x-light-example中找到。
3.5 烧写开发板
要烧录chip-k32w0x-light-example.bin二进制文件,请按照README中的说明进行操作。如果选择 DK6Programmer 替代方案,则必须考虑到 chipenableota_requestor 设置为 false,因此烧录时地址偏移量需要从 0x0 开始。
3.6 调试设备
假设在 K32W061 DK6 板上构建和刷新成功,下一步就是调试部分。
使用 Raspberry Pi 控制器时,建议使用 Ubuntu 20.04 或 Ubuntu 22.04 版本。可以通过从connectedhomeip/examples/chip-tool构建 chip-tool 应用程序来获取 chip-tool 二进制文件。可以使用命令 从根文件夹构建示例scripts/examples/gn_build_example.sh examples/chip-tool FULL-PATH/
,该命令将二进制文件放在FULL-PATH/chip-tool中。需要将 FULL-PATH 替换为所需的路径。之后,需要将生成的 chip-tool 二进制文件复制到 Raspberry Pi 设备上。它将用于调试和向节点发送命令。
- 执行 OTBR 脚本
- 该脚本将输出一个数据集字符串
- 将 K32W061 板委托给 Matter 控制器
- 在此步骤之前,必须将电路板置于广告模式,在本例中,可以通过按下用户界面按钮来完成
shell
user@ubuntu: ~$ sudo ./chip-tool pairing ble-thread node_id hex:dataset 20202021 3840
- node_id需要用户指定
- dataset表示执行 OTBR 脚本后得到的数据集哈希值
现在K32W061板和Raspberry Pi控制器已调试完毕,可以在网络中通信。
4.结果
调试完成后,用户可以使用以下命令从同一节点控制这两个应用程序。命令的效果将反映在 LED D2(用于 Lock App 示例)和 D3(用于 Lighting App 示例)上。这些命令将在 Matter 控制器(Raspberry Pi)上运行。
照明应用程序的切换命令:
shell
user@ubuntu: ~$ sudo ./chip-tool onoff toggle node_id endpoint_id
- node_id - 使用调试步骤中给出的那个
- 端点 ID为 1
除了切换命令之外,还可以使用开启或关闭命令。
门锁应用程序的命令:
- 锁门动作
shell
user@ubuntu: ~$ sudo ./chip-tool doorlock lock-door node_id endpoint_id --timedInteractionTimeoutMs 100
- 开锁动作
shell
user@ubuntu: ~$ sudo ./chip-tool doorlock unlock-door node_id endpoint_id --timedInteractionTimeoutMs 100
- node_id - 使用调试步骤中给出的节点(也用于照明命令)
- 端点 ID为 2
5. 支持
在此提供帮助的 URL。
项目元数据
有关此示例的内容/正确性的问题可以作为此 GitHub 存储库中的问题输入。
警告:有关 NXP 微控制器和预期功能差异的更多常规技术问题,请在NXP 社区论坛上输入您的问题
来源:恩智浦appcodehub