微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 信道、PANID动态更换,beacon request次数与速率控制

信道、PANID动态更换,beacon request次数与速率控制

时间:10-02 整理:3721RD 点击:

大家好,上一次写了一个【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模式下稳定串口传输或者外设采集等支持。

ZDNwkConfig.h 和 ZDNwkConfig.lib这两个文件定义是什么样子的呀?
您看我这有可以修改panid么?

[C] 纯文本查看 复制代码

void Set_Panid(uint16 u16NewPanid){ uint8 u8BackCode; _NIB.nwkPanId = u16NewPanid; uint16 pan_id; pan_id = u16NewPanid;//你想要的ID //zb_WriteConfiguration(ZCD_NV_PANID, sizeof(uint16), &pan_id) ; osal_nv_item_init(ZCD_NV_PANID , sizeof(uint16) , NULL); u8BackCode = osal_nv_write( ZCD_NV_PANID , 0 , sizeof(uint16) , &pan_id); //写Flash中和PANID存储有关的部分 NLME_RestoreFromNV();//重启后才会启用新的PAN_ID,不然只是修改了NV里面的数据。 if(u8BackCode == ZSUCCESS) { NLME_UpdateNV(0x01); //指示将网络的相关信息写入Flash中 HAL_SYSTEM_RESET(); //重启系统 }}

谢谢

这个如果你直接这么重启,可能会因为extendedPANID的原因连不上,最好把这个extendedPANID给写了

牛逼啊,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top