🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[success] 导师视频讲解:[去听课](https://www.bilibili.com/video/BV1k34y1D7Vz?p=34) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> >[warning] 本节课讲解的多个理论知识,理解起来并不容易,如果大家暂时不理解也没关系,随着后续的学习,相信大家会逐步加深理解! <br/> Commissioning 可以直译为“调试”或“尝试运作”,这有点奇怪,所以本文暂不做翻译。读者可以笼统地把其理解为“组建网络”的意思,因此“Commissioning Modes”可笼统地理解为“组网模式”,但为了严谨性,本文仍使用Commissioning。 ### BDB提供了4种主要的Commissioning模式给开发者使用,分别是Network Steering、Network Formation、Finding and Binding(F & B)和Touchlink。 <br/> ## **Network Steering**  定义了设备如何加入到ZigBee网络中,具体方式如下: * 如果设备还没有在ZigBee网络中,那么它们会寻找一个合适的ZigBee网络并加入到其中。 * 特别地,对于路由器类型的设备,在入网成功后,允许其它设备通过本设备来加入到这个ZigBee网络中。 ### 所有需要加入到ZigBee网络中的设备都必须要支持Network Steering。 <br/> ## **Network Formation** Network Formation 规定协调器类型的设备需要去建立一个中心信任的安全网络。这种网络的特点是所有需要加入到网络中的设备都需要经过信任中心的同意才能加入,而协调器本身就是这个信任中心。 ### 类似地,对于路由器类型的设备,如果条件允许的话会创建一个分布式安全网络。这里暂时不展开讲解这种网络了。 ### 所有的协调器类型设备都必须要支持 Network Formation ,而对于路由器类型的设备来说,这是可选的模式。 <br/> ## **Finding and Binding(F & B)** 顾名思义,Finding and Binding的意思就是发现与绑定,那么发现与绑定什么呢? ### ZigBee 3.0是使用Cluster(集群)来描述设备的功能的。每种设备都有各自的功能,都有各自的一系列Cluster。这里的发现与绑定是指ZigBee设备的Cluster之间的相互发现、相互绑定。随着后续章节对Cluster深入地讲解,读者将会更深入地了解到其中的原理。 ### 所有的ZigBee设备都必须要支持Finding and Binding(F & B)。 <br/> ## **Touchlink**  一般用于两个ZigBee设备之间直接进行通信,举个例子说明其原理。 ### 假设现在有两个支持Toucklink的ZigBee设备: * 一个是无线按钮,支持通过Touchlink的方式发送一个恢复出厂设置的指令; * 另一个是灯,支持接收通过Touchlink方式发来的恢复出厂设置指令并执行相应的处理。 用户可以拿着这个按钮靠近这个灯,**让两者相距约2cm**,然后按下按钮发送指令,这个灯会收到指令并执行相应处理。 如果用户**把按钮拿远一些测试**,会发现灯收不到这个指令。如果用户把这个按钮拿去靠近**一个新买的相同的灯**测试,会发现这个灯也会收到这个指令。 ### 从这个例子中可以总结出Touchlink具有下面这些特点: * 通信距离短,约2cm。按钮向灯发送指令时,灯会通过检测按钮的网络信号强度来判断按钮的距离,从而决定是否处理该指令。 * 设备之间可以直接通信,可以把这个按钮拿去直接跟一个新买的相同的灯通信。 Touchlink用得相对比较少,ZigBee设备并不一定都需要支持Touchlink,开发者可以让自己开发的设备支持或不支持这个功能。 <br/> ## **BDB Commissioning Modes API简介** 虽然上述的Commissioning模式比较复杂,但是得益于Z-Stack 3.0 ,ZigBee设备的组网代码非常简单,只需要调用1个API就可以了。 ### 打开配套的工程代码,可以在bdb_interface.h文件中找到BDB Commissioning Modes的API,如图所示。 ![](https://img.kancloud.cn/dc/f9/dcf9b4228fe9f2c91d6468468dbe94bc_830x280.png =600x) ### 这个函数需要传入一个模式参数,可以在bdb.h中找到由协议栈定义好的模式,如图所示。 ![](https://img.kancloud.cn/ac/66/ac662049249817ebf85cd2c08b53770f_830x286.png =600x) <br/> 于是,终于可以组建ZigBee网络了。首先,让协调器创建网络,代码如下: ``` bdb_StartCommissioning(//组建网络 BDB_COMMISSIONING_MODE_NWK_FORMATION | //支持Network Formation BDB_COMMISSIONING_MODE_FINDING_BINDING //支持Finding and Binding(F & B) ); ``` 然后,让路由器或终端设备加入网络中,代码如下: ``` bdb_StartCommissioning(//设备入网 BDB_COMMISSIONING_MODE_NWK_STEERING | //支持Network Steering BDB_COMMISSIONING_MODE_FINDING_BINDING //支持Finding and Binding(F & B) ); ``` 一般地,在实际的开发过程中,开发者只需要使用这个API就基本可以满足网络创建和设备入网的功能需求了。这是BDB的一大优点,使用简单! <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) * 非项目定制**勿扰**,此处**非**技术支持