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.

Z-Stack Home 1.2.2 ZDO_StartDevice发起Beacon

Other Parts Discussed in Thread: Z-STACK

我在用Z-Stack Home 1.2.2a.44539 开发开关类的设备,如面板开关,插座等。 遇到一个问题:

   ZDO_StartDevice发起Beacon时,只在11号信道发送广播,约每800ms发送一次。

   怎样让程序在每个信道都发送beacon?

  • 这是因为您现在的默认信道是11信道。

    组网时,协调器会先选择一个空闲的信道,如果组网完成进行数据收发的时候,发现存在信道占用,则可以跳频

    协议栈中有针对ED Scan的API函数 NLME_EDScanRequest( MAX_CHANNELS_24GHZ, _NIB.scanDuration )

    您为何要让其在每个信道都发送beacon?

  • 这个简单,可以修改DDEFAULT_CHANLIST的值,使用全2.4G频道就可以了,如果需要在使用的过程中切换指定信道和PANID可以看看我的这篇帖子http://www.kaleidscope.cn:1020/archives/2706

  •  你好:

              因为协调器有可能不在11号信道,所以要在每个信道发送beacon。现在我的解决方法是在ZDO_StartDevice函数中更改如下。

          //ret = NLME_NetworkDiscoveryRequest( runtimeChannel, zgDefaultStartingScanDuration );
          ret = NLME_NetworkDiscoveryRequest( 0x07FFF800, 4 );

           现在,设备可以加入到在任何信道的协调器,但在入网发送beacon时,发送三次beacom会间隔15S(设备重启)。我跟踪代码后发现是产生了ZDO_DEVICE_RESET 事件。

      if ( events & ZDO_DEVICE_RESET )
      {
    #ifdef ZBA_FALLBACK_NWKKEY
        if ( devState == DEV_END_DEVICE_UNAUTH )
        {
          ZDSecMgrFallbackNwkKey();
        }
        else
    #endif
        {
          // Set the NV startup option to force a "new" join.
          zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );
          // The device has been in the UNAUTH state, so reset
          // Note: there will be no return from this call
          SystemResetSoft();
        }
    有什么办法可以避免设备重启吗?就是没有入网,就一直以大约5S的间隔,在每一个信道上发一次beacom request

  • 可以开个5s定时器,调用 ZDApp_StartJoiningCycle  和  ZDApp_StopJoiningCycle,多久都可以控制!

  • 你这里重启是由于设备已经发起了入网请求等待秘钥,可是协调器又没有秘钥给你,导致你的设备超时重启。

     

  • 2.5.1a 里面是10秒倒计时等待传输秘钥,不然重启,恢复一个新的设备!

  • 只要你把等待加密回复的功能关掉就可以了,这样就不会重启设备了。

x 出现错误。请重试或与管理员联系。