This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好,最近收到很多用户的反馈,在学习使用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。
谢谢!
3.0刚出来大概是去年底今年初的时候,我一拿到就着手干掉里面的UI相关的东西了,话说这玩意需要LCD来显示,我们设备没有任何显示,怎么弄呢,放在那反而碍事,就统统删掉了。
现在跑的好好的,只是不用install code这种费劲的方式入网(虽然后面用户扫码入网方便快捷,但是给开发带来麻烦)
最近发现《Z-Stack 3.0.1》新出了个demo——《GenericApp》
不知道这个demo是否可以当做 “纯净版” demo(没有UI的)。
document里面没有提到这个demo。
@VV
qingquan chen 说:"对的,可以的。你可以拿这个例程开发自己私有的应用。但是BDB还是需要的。"
不能拿这个demo做标准产品吗?协议底层没有剪裁吧?
我说的私有,仅仅是指应用层上的私用,比方说你们可以定义自己应用层通信的格式,对于底层来说还是一样的,仍然按照Zigbee标准来做的。
我说的标准是指应用层也是按照Zigbee Cluster Library来开发的,如果是这种的话参考其他的例程更为合适。
VV 你好
我用AF_DataRequest 发送一次后,回复成功,但 osal_start_timerEx就结束了.
抓包看是有一个错误.(在最后一个);
if ( events & SAMPLEAPP_TEST_EVT )
{
P0_0= ~P0_0;
if ( AF_DataRequest( &zclSampleSw_DstAddr, &GenericApp_epDesc,
ZCL_CMD_DISCOVER_ATTRS_RSP,
(byte)osal_strlen( theMessageData ) + 1,
(byte *)&theMessageData,
&zclSampleSw_TaskID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
{
// Successfully requested to be sent.
OLED_ShowString(20,3,"send OK");
}
else OLED_ShowString(50,3,"send False");
osal_start_timerEx( zclSampleSw_TaskID,SAMPLEAPP_TEST_EVT,1500 );
return ( events ^ SAMPLEAPP_TEST_EVT );
请指点下.