谷动谷力

 找回密码
 立即注册
查看: 1256|回复: 0
打印 上一主题 下一主题
收起左侧

【ZigBee 系列】| 如何在 ZigBee 中添加 Cluster

[复制链接]
跳转到指定楼层
楼主
发表于 2022-11-25 23:28:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【ZigBee 系列】| 如何在 ZigBee 中添加 Cluster


一、基本概念
Cluster 由属性(Attribute)以及命令(Command)组成。属性是一个数据集,由设备保存,可以在设备间传递。
例如一个 Thermostat cluster 包含的相关属性如下:
            A. 当前温度
            B. 最小温度
            C. 最大温度
Zigbee 联盟将定义好的标准 Cluster 收录到了 ZCL 库中,每个 Cluster 被分配了一个唯一的 16 位 Cluster ID,从 0xFC00 开始则是厂家自定义的 Cluster ID。

二、Cluster 中的 Server 和 Client

用于通过发送命令来操纵相应 Cluster Server 中的属性。通常使用“write”命令设置属性值,使用“read”命令获取属性值。

              

三、添加 ZCL 的 Cluster

恩智浦的 zigbee 3.0 协议栈中,已经实现了 zigbee 联盟定义的大部分标准 Cluster,用户可以直接使用接口开发。这些标准的 Cluster 可以和其他符合 zigbee 标准的厂商产品直接对接使用。但是有些客户想实现自己私有的 Cluster,NXP 的协议栈预留了相应的接口。
所有以下代码部分说明,均以恩智浦的 zigbee 3.0 协议栈(SDK)在 JN5169 上演示实现,请至恩智浦官网下载 JN-SW-4170 查看详细代码:
        增加 Cluster 的主要步骤如下:

        3.1 定义 Cluster 的相关文件 DemoCluster.c 和 DemoCluster.h

        ① 在 DemoCluster.h 中定义 CLUSTER_ID_Demo 的值为 0xFC00
            #define CLUSTER_ID_Demo  0xFC00

        ② 定义 Demo Cluster,例如:

                  

        ③ 定义需要发送的 Command,例如:

                    

        ④ 自定义发送 Payload 的类型,常见的有字符串,整形。可以是单个,也可以是数组,例如:

                    

        ⑤ 实现 Client 以及 Server 之间的发送和接收函数。

               
        3.2 在 Profile 中的 Endpoint 增加对应的 Cluster

        ① 在 Switch 的 Cluster 实例结构体中增加 Cluster 实例:

                        

        ② 在 dimmer_switch.h 中 Switch 的设备结构体 tsZLO_DimmerSwitchDevice 中增加下面的定义:

                    
        ③ 在 dimmer_switch.c 中的 eZLO_RegisterDimmerSwitchEndPoint 增加以下语句:

                    

        ④ 增加 Cluster 实例到 Coordinator 的 Cluster 实例结构体中:

                      

        ⑤ 在 control_bridge.h 中的设备结构体 tsZLO_ControlBridgeDevice 增加如下定义:

                    

        ⑥ 在 control_bridge.c 中 eZLO_RegisterControlBridgeEndPoint 增加以下语句:

                  

        3.3 在 ZPS Config 中增加 Cluster

               



        在“DimmableSwitch”中右键点击“End Point ‘SWITCH’ (1)”

        (1)右键点击 HOME_AUTOMATION profile

        (2)选择 New Child -> Input Cluster 以及 New Child -> Output Cluster

        (3)选择” undefined “,找到 Properties 一栏,将 Cluster 设置为 Demo

        (4)选择“apduZCL”作为接收的 APDU

        (5)同样在 Coordinator 的“End Point ‘ZLO’ (1)”中也添加 Demo Cluster


        3.4 修改 JN-AN-1216 中的 Coordinator 的 zcl_options.h

        增加宏定义 CLD_DEMO,DEMO_CLIENT,同样在 JN-AN-1219 中的 Switch 中增加 CLD_DEMO,DEMO_SERVER 宏定义,重新编译固件。

四、验证增加的 Cluster

        4.1 Coordinator 发送 Simple Descriptor Request

        通过 ubiqua 抓空中包,可以看到 Simple Descriptor Response 包含了定义的 Demo Cluster(0xFC00)。
           
        在 Sniffer Log 中可以看到,添加的自定义 Cluster 是 0xFC00,分别在 Application Input Clusters List 以及 Application Onput Clusters List 中。

        4.2 验证 Command 的发送和接收

        Coordinator 发送 Command 给 Switch,在 Coordinator 端调用定义好的发送函数 eCLD_DemoCommandClientSend,代码如下:

               

        通过 Sniffer,我们可以看到,Coordinator 发送的 Private Cluster 的包,以及 Switch 发送给 Coordinator 的 Default Response

               
        在 Private Cluster 包中的详细信息可以看到,Coordinator 发送的 Command 的值为 0,与上面定义的发送函数传递的参数一致。


                 

        4.3  Switch 发送带有 Payload 的 command 给 Coordinator

        Switch 发送 Command 给 Coordinator,在 Switch 端调用定义好的发送函数 eCLD_DemoCommandServerSend,另外 Payload 中 u8DemoId 和 u8DemoStatus 的值分别为 1 和 10。
  
                     
        通过 sniffer,我们可以看到,Switch 发送的 Private Cluster 的包,以及 Coordinator 发送给 Switch 的 Default Response。
                  
        在 Private Cluster 包中的详细信息可以看到,Switch 发送的 Command 的值为  2,Payload 包括是 01 和 0A,与上面发送函数传递的参数一致。

               
        至此,添加私有的 Cluster 已经可以实现 Client 和 Server 之间互相通信(发送和接收 Command)。
        另外关于恩智浦实现的 ZCL 库的代码,相当于是开源的,位于 SDK 目录下面。在目录中可以看到 ZCL 库实现的所有代码。
        实际上,不管是私有的,还是标准的 Cluster,NXP 都提供了相关的接口,例如:命令的发送实际上是由 yeZCL_CustomCommandSend 完成的,而命令的接收实际上是由 eZCL_CustomCommandReceive 完成的。
        注释:以上可以用 ON/OFF cluster 实例验证进行验证学习。

五、参考资料

       (1) JN-UG-3115-ZigBee Cluster Library (for ZigBee 3.0).pdf
       (2) ZigBee Cluster Library Specification Revision 6
       (3) JN-SW-4170





+10

本帖被以下淘专辑推荐:

  • · zigbee|主题: 38, 订阅: 0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-7 10:57 , Processed in 0.087971 second(s), 46 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表