每一个终端设备的背面都会有标签,写有mac地址,然后通过串口把终端的mac地址转到协调器中,协调器得到这个mac传给路由,路由得到后在怎么做才能让该终端加入网络呢。怎么不让其他终端加入网络呢,而让该终端加入网络?
chen jack2:
其实没看大懂你的意思,什么应用场景才用到终端通过串口给coo传输数据呢?
为什么必须是路由控制终端是否能加入,协调器控制不更好吗?
给你个思路:终端自动加入网络中,加入后周期性给协调器发送数据包,数据包中包含自身mac地址,协调器得到后对比白名单,不在白名单内就把这个节点删除。
bo fu:
回复 chen jack2:
我是这样的情况:我在一个路口有1个协调器,四个路由,协调器下的子节点就只想有四个路由,而不让终端加入协调器而加入指定路由,这样有什么办法吗
Viki Shi:
回复 bo fu:
一般情况下,zigbee是通过网络状况来判断加入途径的,节点跟路由距离如何?
bo fu:
回复 Viki Shi:
就20米以内吧,请问VV大神,有没有路由控制终端加入啊,自组网不能控制加入网络啊
bo fu:
回复 bo fu:
我做了个实验:
1.让终端节点以孤节点方式加入网络;在ZDApp.c中对全局变量devStartMode进行了初始化.
#if ( ZG_BUILD_RTRONLY_TYPE ) || ( ZG_BUILD_ENDDEVICE_TYPE )
// devStartModes_t devStartMode = MODE_JOIN; // Assume joining
devStartModes_t devStartMode = MODE_RESUME; // if already "directly joined"
// to parent. Set to make the device do an Orphan scan.
#else //当设备类型为协调器时
// Set the default to coodinator
devStartModes_t devStartMode = MODE_HARD;
#endif2.先把终端从已经加入的路由上移除:
NLME_LeaveReq_t zaddr; zaddr.extAddr=device_address;
zaddr.removeChildren=true; zaddr.rejoin=true; zaddr.silent=true; ZStatus_t zStatus_t=NLME_LeaveReq((NLME_LeaveReq_t *)&zaddr ); HalUARTWrite ( 0,(uint8 *)&zStatus_t, 1);
3 .终端加入新的路由节点:
uint8 device_address[8]={0x00,0x12,0x4B,0x00,0x03,0xA5,0x4C,0xDC};
byte rfd_type = CAPINFO_DEVICETYPE_RFD; //设置设备类型为精简版设备
……
#if ( ZG_BUILD_COORDINATOR_TYPE )//如果是协调器则将终端加入网络中
NLME_DirectJoinRequest(device_address,rfd_type);
#endif这样的实验结果是:能从路由1上移除该节点,但是就是加不上新的路由节点,这是为什么呢?
请各位大神帮忙看看
VV:
回复 bo fu:
你的路由Permit Join有打开吗
bo fu:
回复 VV:
谢谢VV大神。我的路由Permit Join是打开的。还是加不上呢?
decheng gu:
你好,我最近碰到了你以前碰到过的问题,就是怎么修改扩展panid,请问你最好怎么解决的呢?方便的话,可以加一下qq吗?532306279