TI中文支持网
TI专业的中文技术问题搜集分享网站

删除UI,使用TI Zigbee 3.0协议栈快速进入产品开发模式

大家好,最近收到很多用户的反馈,在学习使用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。 

http://www.zigbee.org/wp-content/uploads/2014/10/docs-13-0402-13-00zi-Base-Device-Behavior-Specification-2.pdf

谢谢!

Susan Yang:

谢谢VV的分享!

miffy:

回复 Susan Yang:

3.0刚出来大概是去年底今年初的时候,我一拿到就着手干掉里面的UI相关的东西了,话说这玩意需要LCD来显示,我们设备没有任何显示,怎么弄呢,放在那反而碍事,就统统删掉了。

现在跑的好好的,只是不用install code这种费劲的方式入网(虽然后面用户扫码入网方便快捷,但是给开发带来麻烦)

qingquan chen:

最近发现《Z-Stack 3.0.1》新出了个demo——《GenericApp》

不知道这个demo是否可以当做 “纯净版” demo(没有UI的)。

document里面没有提到这个demo。

@VV 

VV:

回复 qingquan chen:

qingquan chen

最近发现《Z-Stack 3.0.1》新出了个demo——《GenericApp》

不知道这个demo是否可以当做 “纯净版” demo(没有UI的)。

document里面没有提到这个demo。

@VV 

qingquan chen:

回复 VV:

"对的,可以的。你可以拿这个例程开发自己私有的应用。但是BDB还是需要的。"

不能拿这个demo做标准产品吗?协议底层没有剪裁吧?

VV:

回复 qingquan chen:

qingquan chen

"对的,可以的。你可以拿这个例程开发自己私有的应用。但是BDB还是需要的。"

不能拿这个demo做标准产品吗?协议底层没有剪裁吧?

juson wu:

感谢分享!另,请问下Z-satck 是用AF_DataRequest()函数发送的, Z-satck 3.0 测试不用直接使用这个函数了.请问有BDB的发送函数来替代它吗?
协调器掉电离网后,如果回到掉电前的网络?

VV:

回复 juson wu:

juson wu 也是可以使用的,BDB只是负责设备从上电开始搜网,入网,这一系列的过程,如果是做私有应用的话,通信方面还是用户可以自己实现。你可以参考GenericApp例程,适合开发私有的应用。

juson wu:

回复 VV:

VV  你好

我用AF_DataRequest 发送一次后,回复成功,但  osal_start_timerEx就结束了.

抓包看是有一个错误.(在最后一个);

3620[1].psd

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 );

请指点下.

VV:

回复 juson wu:

juson wu 能否重新发个帖子,谢谢!如果在这个事件的处理里面,不加发送的函数,这个事件可以周期性的触发吗?

赞(0)
未经允许不得转载:TI中文支持网 » 删除UI,使用TI Zigbee 3.0协议栈快速进入产品开发模式
分享到: 更多 (0)