6787|3

11

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

信道、PANID动态更换,beacon request次数与速率控制 [复制链接]

大家好,上一次写了一个【ZigBee白名单方案】,私下有很多小伙伴找我再做一个关于信道和PANID以及网络方面相关的模块,现在具体的功能如下几点(如有需要可以QQ联系我 326575140):
  • 信道和PANID设置
    在某些手动划分网络的情况下,可以使用此功能改变设备的信道和PANID,例如一些工业使用场景中,有外部配置设备,可以对设备的网络进行有效管理。或者一些其他应用场景。
  • Beacon次数限制
    对于某些低功耗设备来说,掉线后一直发送beacon是一个非常浪费电池电量的事情,通过调用我写的文件中的API函数,可以有效的,实时的控制设备beacon的次数,例如设置成为6次,那么设备beacon次数达到6次后自动停止搜索网络,等待下次开启搜索。
  • Beacon频率设置
    在某些情况下,我们需要设备能够以更快的速度beacon加入网络,或者刚开始的时候快速加入,掉网后以更慢一点的速度进行beacon,通过调用文件的API可以有效的设置设备的beacon速率,已达到相关应用的目的。


下面是具体的实现步骤介绍:
  • 在工程的ZDO文件夹中添加 ZDNwkConfig.h 和 ZDNwkConfig.lib两个文件:


  • ZDApp.c中的ZDApp_Init函数中添加ZDNwkConfigUpdateRequest函数,记得包含ZDNwkConfig.h头文件。
  • ZDApp.c中的ZDApp_event_loop函数中下图位置添加ZDONwkConfigSearchNwk函数,并注释掉
    ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,
    DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );函数。
  • 预编译使能NV_RESTORE。
  • 调用提供的API接口与你自己的应用层相结合就可以使用了。


下面给大家讲解下API的使用方法,接口函数在ZDNwkConfig.h中,如下图:
如果要配置信道为15信道,PANID为1234的话,直接在你的程序中调用
ZDNwkConfigSaveRequest函数,如:
如果需要配置设备的beacon次数或者beacon之间的速率,可以调用ZDNwkConfigStartBeacon进行设置,具体的速率请参考NLMEDE.h

假如现在我们有个终端节点,我想让他beacon10次之后就不发beacon request了,并且每次beacon request的速率是480ms ,那么我们只需要简单调用ZDNwkConfigStartBeacon(10,5);通过抓包你会发现,10次beacon request之后设备不再发送,如果传递的次数是0xFFFF,那么beacon request的次数将不会受到限制。
如果要停止beacon request只需要调用ZDNwkConfigStopBeacon函数即可。

后面还会另做一个关于PM2,PM3模式的切换和电源稳定的管理,包括支持串口唤醒,PM2或PM3模式下稳定串口传输或者外设采集等支持。

此帖出自RF/无线论坛

最新回复

这个如果你直接这么重启,可能会因为extendedPANID的原因连不上,最好把这个extendedPANID给写了~  详情 回复 发表于 2017-7-17 20:20
点赞 关注
 

回复
举报

27

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
ZDNwkConfig.h 和 ZDNwkConfig.lib这两个文件定义是什么样子的呀?
您看我这有可以修改panid么?
  1. void Set_Panid(uint16 u16NewPanid)
  2. {
  3.   uint8 u8BackCode;
  4.   _NIB.nwkPanId = u16NewPanid;
  5.   uint16 pan_id;

  6.   pan_id = u16NewPanid;//你想要的ID

  7.   //zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16),  &pan_id) ;
  8.   osal_nv_item_init(ZCD_NV_PANID , sizeof(uint16) , NULL);
  9.   
  10.   u8BackCode = osal_nv_write( ZCD_NV_PANID , 0 , sizeof(uint16) , &pan_id);   //写Flash中和PANID存储有关的部分
  11.   NLME_RestoreFromNV();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据。
  12.   if(u8BackCode == ZSUCCESS)
  13.   {
  14.     NLME_UpdateNV(0x01);    //指示将网络的相关信息写入Flash中
  15.     HAL_SYSTEM_RESET();     //重启系统
  16.   }
  17. }
复制代码
此帖出自RF/无线论坛

点评

这个如果你直接这么重启,可能会因为extendedPANID的原因连不上,最好把这个extendedPANID给写了~  详情 回复 发表于 2017-7-17 20:20
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
谢谢~
此帖出自RF/无线论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

4
 
mocai 发表于 2017-5-25 22:07
ZDNwkConfig.h 和 ZDNwkConfig.lib这两个文件定义是什么样子的呀?
您看我这有可以修改panid么?
[mw_shl ...

这个如果你直接这么重启,可能会因为extendedPANID的原因连不上,最好把这个extendedPANID给写了~
此帖出自RF/无线论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表