多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
>[success] 导师视频讲解:[**去听课**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=36) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> Z-Stack 3.0 中利用简单描述符来描述一个设备的某一方面的服务,这种服务也可以称为功能或者应用等。例如,ZigBee温湿度传感器具备温湿度监测的服务,可以利用简单描述来描述这个温湿度监测服务的具体内容。 <br/> ## **结构分析** 简单描述符本质上就是一个结构体,它在Z-Stack 3.0 中的定义是这样的: ``` typedef struct{ uint8 EndPoint;//端点号 uint16 AppProfId;//描述所在应用场景,例如家居自动化 uint16 AppDeviceId;//设备ID uint8 AppDevVer:4;//由开发者自定义,表示版本号 uint8 Reserved:4;//保留字段 uint8 AppNumInClusters;//端点支持的输入簇个数 cId_t *pAppInClusterList;//指向输入簇列表的指针 uint8 AppNumOutClusters;//端点支持的输出簇个数 cId_t *pAppOutClusterList;//指向输出簇列表的指针 }SimpleDescriptionFormat_t; ``` 下面简单讲解一下各个元素的意义。 * **端点号**:EndPoint,可以理解为简单描述符的编号,取值范围是0~255。在同一个ZigBee设备中,每一个简单描述符都有一个不同的端点号,可以利用端点号来找到对应的简单描述符。 * **AppProfId**:Profile ID,表示这个简单描述符所属的应用场景。这个应用场景可以是家居自动化、智能照明和智慧零售等。ZigBee联盟为不同的场景定义了对应的ID值,称为Profile ID。 * **AppDeviceId**:Device ID,表示这个简单描述符所属的设备类型。这个设备类型可以是插座、灯或者传感器等。类似地,ZigBee联盟为不同类型的设备定义了对应的ID值,称为Device ID。 * **AppDevVer**:这个值可以由开发者自定义,用来表示版本号。 * **Reserved**:保留字段,暂时可以忽略。 * **Cluster**:簇,或者集群,可以划分为输入簇(In Cluseter)和输出簇(Out Cluster),用来描述这个服务的具体内容。一个简单描述符中可以包含多个Cluster,这些Cluster共同描述了这个服务的具体内容,后续章节将会详细讲解。 <br/> ## **应用示例** 刚才讲解了简单描述的定义,那么接下来就是为设备创建一个简单描述符。设备的简单描述符在zcl_samplesw_data.c文件中创建,这个文件所在的位置如图所示。 ![](https://img.kancloud.cn/d0/56/d056e6a8184f36e9dd78aa3b0912040b_1440x2131.png =300x) ### 可以在这个文件中找到设备所包含的简单描述符,代码如下: ``` SimpleDescriptionFormat_t zclSampleSw_SimpleDesc = { SAMPLESW_ENDPOINT, // int Endpoint; ZCL_HA_PROFILE_ID, // uint16 AppProfId[2]; ZCL_HA_DEVICEID_ON_OFF_LIGHT_SWITCH,// uint16 AppDeviceId[2]; SAMPLESW_DEVICE_VERSION, // int AppDevVer:4; SAMPLESW_FLAGS, // int AppFlags:4; ZCLSAMPLESW_MAX_INCLUSTERS, // byte AppNumInClusters; (cId_t *)zclSampleSw_InClusterList, // byte *pAppInClusterList; ZCLSAMPLESW_MAX_OUTCLUSTERS, // byte AppNumInClusters; (cId_t *)zclSampleSw_OutClusterList // byte *pAppInClusterList; }; ``` 详细地讲一下各个元素的含义。 * SAMPLESW\_ENDPOINT是在zcl\_samplesw.h文件中定义的端点号,定义如下: ``` #define SAMPLESW\_ENDPOINT 8 ``` ### * ZCL_HA_PROFILE_ID是由ZigBee联盟定义的,表示智能家居领域的Profile ID。 ### * ZCL_HA_DEVICEID_ON_OFF_LIGHT_SWITCH是一个设备类型ID,表示这是一个智能插座,它的值是由ZigBee联盟定义的。不同的公司在开发这个类型的智能插座的时候,必须要使用这个设备类型ID,这是互联互通的基础。 ### * SAMPLESW\_DEVICE\_VERSION是在zcl\_samplesw\_data.c文件中定义的版本号,定义如下: ``` #define SAMPLESW_DEVICE_VERSION 1 ``` ### * SAMPLESW\_FLAGS是在zcl\_samplesw\_data.c文件中定义的保留字段,可以暂时忽略,定义如下: ``` #define SAMPLESW_FLAGS 0 ``` * ZCLSAMPLESW\_MAX\_INCLUSTERS是在zcl\_samplesw\_data.c文件中定义的,表示支持的最大输入簇数量。 ### * (cId_t *)zclSampleSw_InClusterList表示输入簇列表。 ### * ZCLSAMPLESW_MAX_OUTCLUSTERS是在zcl\_samplesw\_data.c文件中定义的,表示支持的最大输出簇数量。 ### * (cId_t *)zclSampleSw_OutClusterList表示输出簇列表。 <br/> <br/> ## **项目定制** * 如需项目定制开发,可扫码添加项目经理好友(注明“**项目定制**”) * 定制范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技术方案 * 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非项目定制**勿扰**,此处**非**技术支持