大家好,最近收到很多用户的反馈,在学习使用TI的Zigbee 3.0协议栈Z-Stack 3.0.1过程中,需要花较长的时间来了解和熟悉协议栈例程中UI的操作,而这个UI在将来的实际产品中,又不会使用到,反而给Zigbee 3.0的学习和入门增加的难度。
TI设计这个UI的初衷其实很简单,为了让大家能够在下载安装协议栈以后,能够使用例程在TI开发板上快速演示Zigbee 3.0的所有feature。 另外一个原因大家都知道,在Zigbee 3.0里面增加BDB(Base Device Behavior)功能,简单来说他是一个从设备上电开始,初始化,建网,加网,发现其他应用匹配的设备,绑定,到最后能够使用的一些过程的集合,内容包含很多状态机的转换。这个BDB好处在用户不需要太关注设备怎么家网,怎么匹配,怎么绑定,都是有这个BDB完成。之所有他有了这么强大的功能,往往就会有很多可以配置的参数,比方说设备是做建网还是加网,设备在哪个信道或者哪组信道上建网加网,设备是否需要支持touchlink 功能,设备是否在加网完成以后启动匹配绑定过程,设备加网是否使用install code还是默认的key。这些东西如果通过UI界面的方式,通过菜单选择会使得更加简单,这个也是设计UI的另一个目的。当然这些东西抛开UI, 直接使用代码都可以实现.....
接下来,我们可以看如何把UI部分删除掉,使用代码,直接开发Zigbee 3.0产品。
1) 在TI官网,下载最新的Zigbee3.0协议栈,Z-Stack3.0. http://www.ti.com/tool/Z-STACK?keyMatch=Z-Stack&tisearch=Search-EN-Everything
2) 将协议栈安装到默认路径,位于C:\Texas Instruments\Z-Stack 3.0.1
3) 使用IAR打开工程,以CC2530上面的SampleSwitch工程为例,C:\Texas Instruments\Z-Stack 3.0.1\Projects\zstack\HomeAutomation\SampleSwitch\CC2530DB
4) 删除跟UI相关的文件,zcl_sampleapps_ui.c和zcl_sampleapps_ui.h
5)在zcl_samplesw.c文件中删除跟UI相关的代码,具体如下面的文件,只要搜索NO_UI宏定义就可以了。在IAR工程里面可以加入宏定义NO_UI或者,或者跟UI相关的代码直接删除。
6)在去掉了UI功能以后,就可以编译整个工程,没有报错就可以了。
7)如何让协调器建网,如何在建网以后去绑定设备(在上面的附件文件中通过按键实现了)
可以通过调用 bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_FINDING_BINDING); 函数选择合适的模式。
8)如何让路由或者终端设备进行加网,如何在加网以后去绑定设备
可以通过调用bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);
9)如果加网成功了,或者不成功在哪里可以知道状态?
在zclSampleSw_ProcessCommissioningStatus函数里面知道相关的状态。比方说下
case BDB_COMMISSIONING_NWK_STEERING:
if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS)
{
//YOUR JOB:
//We are on the nwk, what now?
此处表示加网成功,可以做应用上的使用,最简单的比方说LED指示,UART打印。
}
else
{
//See the possible errors for nwk steering procedure
//No suitable networks found
//Want to try other channels?
//try with bdb_setChannelAttribute
如果代码运行到这里说明加网失败了,可以在这里再次调用bdb_StartCommissioning函数进行新的加网,如果为了节省功耗,可以在这里触发一个timer事件,在timer事件触发的时候可以再调用bdb_StartCommissioning函数进行加网。
}
zclSampleSw_ProcessCommissioningStatus中除了加网的状态以外,还有建网,绑定,断网等状态的指示。
10) 设备需要在指定的信道上进行搜网,加网,需要在哪里修改?
在bdb_interface.h文件的
#define BDB_DEFAULT_PRIMARY_CHANNEL_SET DEFAULT_CHANLIST //BDB specification default is: 0x02108800
#define BDB_DEFAULT_SECONDARY_CHANNEL_SET (DEFAULT_CHANLIST ^ 0x07FFF800) //BDB specification default is: (0x07FFF800 ^ 0x02108800)
11)需要使用install code进行加网,
也是在bdb_interface.h文件的
#define BDB_DEFAULT_JOIN_USES_INSTALL_CODE_KEY FALSE
基本上使用BDB的接口可以方便的完成一个设备从上电初始化,到网络里面正常工作的整个过程。具体关于BDB的工作流程,状态机的转换,请参考BDB Specification。
谢谢!