Matter - nordic 自定义开发(4)

nRF Connect SDK 和 Matter SDK 的 matter 协议版本

  1. nRF Connect SDK(NCS)是 Nordic 官方维护的,里面包含某个版本的 Matter SDK。
  2. Matter SDK 为 CSA 联盟维护的,里面包含各平台的SDK,其中包含了某个版本的 NCS。

需要探索最新标准 matter 协议,使用最新 Matter SDK ,去配置需要使用的 NCS 版本。

需要 Nordic 最新维护发布的稳定版本,直接使用 NCS 即可。

NCS 适配的 Matter 协议版本:

ZAP Tool 

        Matter开发主要包括两方面的工作:一是Matter应用本身的开发,二是非Matter应用开发。Matter应用开发本质上就是cluster/endpoint/node的添加、编辑、删除以及相关回调事件处理等,如前所述,这个需要通过 zcl 编辑工具 zap 来生成ember层的代码,以及手动添加或者修改其他c++文件来实现。

保证 zap 版本一致性:

NCS 安装:

~/ncs/v2.5.2/modules/lib/matter/scripts/setup/nrfconnect/get_zap.py -l ~/Nordic/Tools/zap_tool -o

Matter SDK 安装:

查看 ~/connectedhomeip/scripts/setup/zap.version,文件确认版本

到 https://github.com/project-chip/zap/releases,下载对应版本:

下载解压完成后,如:~/Nordic/Tools/zap_tool,将 zap_tool 文件夹添加到环境变量。

已经安装了的旧版或者其他版本,Linux 系统下将 ~/.zap 这个文件夹删除,windows 下位于 C:\Users\${username}\.zap

添加 Cluster

创建 Matter Template 工程

使用命令行打开 template.zap 文件,(windows 下路径默认用的是 '\',输入要换成 '/',否则出现乱码不兼容

zap ~/template/src/template.zap --zcl ~/ncs/v2.5.2/modules/lib/matter/src/app/zap-templates/zcl/zcl.json --gen ~/ncs/v2.5.2/modules/lib/matter/src/app/zap-templates/app-templates.json

 弹出ZCL窗口:

        例子目前只有Endpoint 0,选择Endpoint 0,并选择“Enabled Clusters”,我们可以看到这个Endpoint使能了哪些cluster,比如 Descriptor cluster。
        下面我们添加一个Endpoint以支持Matter On/Off Light设备,选择“ADD ENDPOINT”,如下添加:

       

 

完成添加后保存,点击 generate 生成代码到 template/src/zap-generated 文件夹中。或者使用python 脚本:

python ~/ncs/v2.5.0/modules/lib/matter/scripts/tools/zap/generate.py ~/template/src/template.zap -t src/app/zap-templates/app-templates.json -o ~/template/src/zap-generated

修改项目代码

        添加 Matter stack 回调函数,以处理 controller 发送过来的命令,比如开灯。这个主要通过覆盖 MatterPostAttributeChangeCallback() 来实现更新 attribute 数值,以让 Matter stack 可以将最新的状态或者 event 同步给 controller。这个主要通过Clusters::OnOff::Attributes::OnOff::Set()之类的函数实现。

        如 light_hulb 工程中的 zcl_callback.cpp:

/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

#include <lib/support/logging/CHIPLogging.h>

#include "app_task.h"

#include <app-common/zap-generated/attributes/Accessors.h>
#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>
#include <app/ConcreteAttributePath.h>

using namespace ::chip;
using namespace ::chip::app::Clusters;
using namespace ::chip::app::Clusters::OnOff;

void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath &attributePath, uint8_t type,
				       uint16_t size, uint8_t *value)
{
	ClusterId clusterId = attributePath.mClusterId;
	AttributeId attributeId = attributePath.mAttributeId;

	if (clusterId == OnOff::Id && attributeId == OnOff::Attributes::OnOff::Id) {
		ChipLogProgress(Zcl, "Cluster OnOff: attribute OnOff set to %" PRIu8 "", *value);
		AppTask::Instance().GetPWMDevice().InitiateAction(*value ? PWMDevice::ON_ACTION : PWMDevice::OFF_ACTION,
								  static_cast<int32_t>(AppEventType::Lighting), value);
	} else if (clusterId == LevelControl::Id && attributeId == LevelControl::Attributes::CurrentLevel::Id) {
		ChipLogProgress(Zcl, "Cluster LevelControl: attribute CurrentLevel set to %" PRIu8 "", *value);
		if (AppTask::Instance().GetPWMDevice().IsTurnedOn()) {
			AppTask::Instance().GetPWMDevice().InitiateAction(
				PWMDevice::LEVEL_ACTION, static_cast<int32_t>(AppEventType::Lighting), value);
		} else {
			ChipLogDetail(Zcl, "LED is off. Try to use move-to-level-with-on-off instead of move-to-level");
		}
	}
}

/** @brief OnOff Cluster Init
 *
 * This function is called when a specific cluster is initialized. It gives the
 * application an opportunity to take care of cluster initialization procedures.
 * It is called exactly once for each endpoint where cluster is present.
 *
 * @param endpoint   Ver.: always
 *
 * TODO Issue #3841
 * emberAfOnOffClusterInitCallback happens before the stack initialize the cluster
 * attributes to the default value.
 * The logic here expects something similar to the deprecated Plugins callback
 * emberAfPluginOnOffClusterServerPostInitCallback.
 *
 */
void emberAfOnOffClusterInitCallback(EndpointId endpoint)
{
    // Cluster 初始化后调用,在这里同步最初的 Cluster 状态
    // 在 InitCallback 之前,调用 Attributes 下的方法会返回失败。
	EmberAfStatus status;
	bool storedValue;

	/* Read storedValue on/off value */
	status = Attributes::OnOff::Get(endpoint, &storedValue);
	if (status == EMBER_ZCL_STATUS_SUCCESS) {
		/* Set actual state to the cluster state that was last persisted */
		AppTask::Instance().GetPWMDevice().InitiateAction(
			storedValue ? PWMDevice::ON_ACTION : PWMDevice::OFF_ACTION,
			static_cast<int32_t>(AppEventType::Lighting), reinterpret_cast<uint8_t *>(&storedValue));
	}

	AppTask::Instance().UpdateClusterState();
}

使用 Apple Home Pod 测试 

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: nrf52810开发指南-上册.pdf是一本非常详细的指南,可以帮助人们更好地了解和学习nrf52810无线芯片的开发和使用方法。该指南主要介绍了nrf52810的基本特性、硬件架构、软件开发环境、开发工具、编程语言、开发流程等方面的内容。 该指南以实例讲解的方式,详细介绍了如何使用nrf52810从事无线应用程序的开发。具体而言,该指南介绍了如何使用Keil MDK、IAR Embedded Workbench、SEGGER Embedded Studio等IDE工具,以及nrf5 SDK和nrf5x Command Line Tools等开发工具进行开发。 另外,该指南还分析了nrf52810在无线通讯中的应用场景,包括基于Bluetooth Low Energy(BLE)的智能家居、可穿戴设备等领域。通过实践和案例演示,读者能够深入了解nrf52810芯片的广泛应用前景。 总之,nrf52810开发指南-上册.pdf是一份非常有价值的指南,对于无线产品开发者和爱好者都有非常大的帮助,值得一读。 ### 回答2: nrf52810是Nordic公司最新推出的低功耗蓝牙芯片,它采用ARM Cortex-M4处理器,拥有256KB的闪存和24KB的RAM,非常适合开发低功耗蓝牙设备。该芯片还支持Nordic公司自主开发的S132 SoftDevice协议栈,可以实现BLE4.2和BLE5.0的各种特性,如长包、扫描窗口等。 该开发指南共分为六个章节,第一章介绍了nrf52810芯片的主要特点,第二章讲解了如何使用开发板进行测试与调试,第三章介绍了如何使用nRF5 SDK和nRF5 SoftDevice进行开发,第四章讲解了如何使用Nordic公司的开发工具nRF Connect和Segger J-Link进行开发,第五章讲解了如何进行定制化开发,第六章则是常见问题解答与扩展阅读。 通过阅读该开发指南,开发者可以快速了解nrf52810芯片的各项特性,掌握开发与调试技巧,并且学会如何利用Nordic公司的各种开发工具进行开发。此外,该指南还提供了大量的编程示例和实验框图,可以帮助开发者快速上手并深入理解nrf52810的开发流程。 总之,nrf52810开发指南为开发低功耗蓝牙设备的开发者提供了全面且实用的开发指导,是一本非常优秀的开发书籍,值得大家阅读。 ### 回答3: nRF52810开发指南-上册是针对nRF52810芯片的开发指南,该芯片是由北欧半导体公司推出的低功耗蓝牙SoC芯片。本开发指南针对该芯片的主要功能特点和应用场景,提供了全面的技术说明和具体实践操作指引。 一方面,本开发指南详细介绍了nRF52810芯片的硬件架构和软件框架,包括CPU核心、内存、外设、通信接口等方面的详细说明,同时还介绍了nRF52810芯片的功耗特点和低功耗技术实现方法。这些内容对于硬件工程师和软件工程师来说都是非常重要的,可以帮助他们在设计和开发过程中更好地了解和掌握nRF52810芯片的内部结构和工作原理。 另一方面,本开发指南还提供了丰富的样例程序和实践案例,包括基于SDK的应用程序设计、BLE服务设计、无线OTA升级、传感器数据采集和处理等方面的实现方法和具体代码。这些实践案例不仅可以帮助读者更好地理解nRF52810芯片的使用方法和应用场景,还可以为实际应用开发提供有参考价值的实践经验。 总之,nRF52810开发指南-上册是一份非常优秀的技术文档,对于从事低功耗蓝牙应用开发的工程师和科研人员来说都是非常有价值的。它详细介绍了nRF52810芯片的设计和开发方法、低功耗技术实现方案,并提供了多个实践案例和具体的应用程序设计,为读者提供了全面且实用的技术指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__蚩尤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值