(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911)
一、基本的网络参数配置(参考《Z-Stack Sample Applications.pdf》)
1、Device Types(设备类型)
在ZigBee网络中存在三种逻辑设备类型:Coordinator(协调器)、Router(路由器)和EndDevice(终端设备)。ZigBee网络由一个Coordinator以及多个Router或多个End_Device组成。
2、CHANNEL(信道)
当协调器创建网络时,首先会在已定义的信道上进行扫描,选择能量最低也就是信道质量最好的信道来建立网络;Z-Stack中关于信道的定义,在f8wConfig.cfg文件中,如下:
/* Default channel is Channel 11 - 0x0B */ // Channels are defined in the following: // 0 : 868 MHz 0x00000001 // 1 - 10 : 915 MHz 0x000007FE // 11 - 26 : 2.4 GHz 0x07FFF800 // //-DMAX_CHANNELS_868MHZ 0x00000001 //-DMAX_CHANNELS_915MHZ 0x000007FE //-DMAX_CHANNELS_24GHZ 0x07FFF800 //-DDEFAULT_CHANLIST=0x04000000 // 26 - 0x1A //-DDEFAULT_CHANLIST=0x02000000 // 25 - 0x19 //-DDEFAULT_CHANLIST=0x01000000 // 24 - 0x18 //-DDEFAULT_CHANLIST=0x00800000 // 23 - 0x17 //-DDEFAULT_CHANLIST=0x00400000 // 22 - 0x16 //-DDEFAULT_CHANLIST=0x00200000 // 21 - 0x15 //-DDEFAULT_CHANLIST=0x00100000 // 20 - 0x14 //-DDEFAULT_CHANLIST=0x00080000 // 19 - 0x13 //-DDEFAULT_CHANLIST=0x00040000 // 18 - 0x12 //-DDEFAULT_CHANLIST=0x00020000 // 17 - 0x11 //-DDEFAULT_CHANLIST=0x00010000 // 16 - 0x10 //-DDEFAULT_CHANLIST=0x00008000 // 15 - 0x0F //-DDEFAULT_CHANLIST=0x00004000 // 14 - 0x0E //-DDEFAULT_CHANLIST=0x00002000 // 13 - 0x0D //-DDEFAULT_CHANLIST=0x00001000 // 12 - 0x0C -DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B可见Z-Stack中默认选择的是11号信道,这边我们如果要改到15号信道的话,只需将对应行前面的双斜杠“//”去掉,并在原来那行前面加上双斜杠“//”即可:
...... -DDEFAULT_CHANLIST=0x00008000 // 15 - 0x0F //-DDEFAULT_CHANLIST=0x00004000 // 14 - 0x0E //-DDEFAULT_CHANLIST=0x00002000 // 13 - 0x0D //-DDEFAULT_CHANLIST=0x00001000 // 12 - 0x0C //-DDEFAULT_CHANLIST=0x00000800 // 11 - 0x0B选定信道之后,协调器将在指定信道上创建网络,路由器和终端设备将只能在指定信道上搜索网络!
此此外,仔细看一下,会外CHANLIST是按位定义的,可以选择多个信道,同样的操作即可!
3、PANID(个域网标识符)
协调器创建的网络会有一个PANID;ZStack中关于PANID的定义,在f8wConfig.cfg文件中,如下:
-DZDAPP_CONFIG_PAN_ID=0xFFFF可见Z-Stack中PANID默认配置为0xFFFF,意味着 :协调器创建的网络PANID将是0x0000~0xFFFF之间的随机值,路由器和终端设备将随机加入一个PANID的网络!
若该值不是0xFFFF,比如我们将其改为oxABCD。应更改如下:
-DZDAPP_CONFIG_PAN_ID=0xABCD如果像这样我们给网络指定一个非0xFFFF的PANID值,意味着:
协调器将创建一个PANID值固定为0xABCD的网络,路由器和终端设备将只能加入PANID值为0xABCD的网络!
若在网络覆盖范围内存在两个PANID配置值(如0xABCD)相同的协调器,则只有先创建网络成功的协调器的网络为0xABCD,另一个协调器创建的网络PANID会在配置值的基础上加1,变为0xABCE!(此处建议自己亲自实验验证一下:用两个ZigBee设备,都烧写同样的协调器的代码即可)
4、Network Address(网络地址)
加入到ZigBee网络中的每个节点(协调器、路由器、终端)都会获得在该网络里一个唯一的16位的地址,该地址称为网络(短)地址;协调器的网络地址固定为0x0000,其余节点的网络地址由其父节点随机分配。
二、自组网
1、自组网说明
Z-Stack协议栈中默认配置的是自组网!意味着,各个设备一旦启动,均会默认自动扫描创建或搜寻加入网络,无须我们人为去控制或做任何配置!
关于如何判断设备是否成功创建或者加入了ZigBee网络,以及查看网络中所有设备的网络信息,Z-Stack中提供的相关的库函数可以直接调用,在NLMEDE.h文件中,协议栈中仅提供函数声明,不提供具体函数实现代码(半开源)。我们最常用的几个函数如下所示:
...... extern byte *NLME_GetExtAddr( void ); ...... extern uint16 NLME_GetShortAddr( void ); ...... extern uint16 NLME_GetCoordShortAddr( void ); ...... extern void NLME_GetCoordExtAddr( byte * ); ......分别用于:获取自身MAC地址、获取自身网络短地址、获取父节点网络短地址、获取父节点MAC地址;凭借这4个函数,我们便可非常轻松地得出该网络的拓扑结构!
2、地址查询实现
为了便于我们查看ZigBee设备的网络信息,我们一般在该设备的网络状态稳定之后再对其进行查看;对此,我特意编写了user_api.c和user_api.h文件,结合“强大”的printf( )函数实现了该功能,请大家去统一下载链接下载查看相关文件代码~
协调器从上电,到创建网络成功,网络状态变化及最终网络信息如下图所示:
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911)