16100|26

147

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

Zigbee 最新优化,节点加入指定协调器不需要任何配置。 [复制链接]

 
z-stack版本:2.6.1
适合Z-stack Home 1.2.0
优化后的特点:
1,在有多个协调器并存的环境中,只需要在协调器上输入对应节点的MAC地址,节点就能加入到该协调器的网络中,不用对节点进行任何配置,节点上也不需要有任何配置接口,方便连接。建议在第一次为节点烧写程序时,就把节点的MAC地址读出来,打印成条码,然后通过连接协调器上位机的条码读取设备进行组网。
2,应用层可以判断节点当前是否处于有Zigbee网络的范围内,是否掉网,是否无法入网等多种异常情况。节点可以在不能入网的情况下进入低功耗。原版z-stack的原则是“节点必须加入一个网络,哪怕这个网络是未经认证”,而优化后的协议,则是“未经认证的协调器,不能加入其网络”
3,节点带有黑名单功能,能够把未经认证的协调器PANID录入到黑名单中。
使用方法:
1,删除原Z-stack中的zdo文件夹,并用此文件夹替换原来的文件夹。
2,原工程中workspace中,删除ZDO条目下所有内容,并把该文件夹下所有文件拖到原ZDO条目下。
3,如果需要使用MAC地址过滤,在原工程的tasksArr中,添加ZDE_event_loop,并且在osalInitTasks中添加ZDE_Init。
4,调用函数ZDE_RegisterJoinDeniedCB(位于ZDEnhanced.h中)注册一个回调函数,该回调函数可以显示被MAC地址过滤掉的节点信息,参数parent为过滤的父节点,pDenied为被过滤掉的节点的信息,为结构体ZDE_JoinDenied_t组成的数组,count为被过滤掉的节点的个数。如果一个或多个节点都通过某一个父节点(协调器或者任意路由)入网,如果这些节点的MAC地址未有被预先录入父节点的白名单中,就会被父节点过滤掉,父节点会将过滤掉的这些节点的信息广播给其它路由节点和协调器,协调器可以通过向父节点白名单输入被允许入网的节点的MAC地址,父节点可以解除该节点的过滤拦截,准许其入网。
5,调用函数ZDE_WhiteListInput,可以把节点的MAC地址添加到本地白名单。函数ZDE_JoinAcceptReq则用于把白名单发送至其它路由节点,该命令支持广播发送,建议广播时使用0xFFFC,只对协调器和路由器广播。
6,强化了ZDO_STATE_CHANGE状态机功能,节点在入网失败,掉网后不能重新入网时,都会最终返回到DEV_INIT状态。应用层可以结合当前状态与上次状态,判断当前节点的情况。如果希望节点能在搜索不到网络时进入休眠模式,当前模式为DEV_INIT而上一次状态为DEV_NWK_DISC,说明节点未有搜索到可以加入的网络。应用层可以调用ZDApp_StopJoiningCycle停止下一次入网。调用ZDApp_StartJoiningCycle则可以唤醒下一次入网。
7,结构体说明:
设备过滤
typedef struct
{
  uint8 extAddr[Z_EXTADDR_LEN]; - 被过滤的MAC地址
  uint8 capability; - 被过滤的设备类型,见NLMEDE.h中的定义
  uint8 rejoin; - 是否为rejoin模式加入,可以忽略掉该字节
}ZDE_JoinDenied_t;
定义如下
#define CAPINFO_ALTPANCOORD           0x01
#define CAPINFO_DEVICETYPE_FFD        0x02
#define CAPINFO_DEVICETYPE_RFD        0x00
#define CAPINFO_POWER_AC              0x04
#define CAPINFO_RCVR_ON_IDLE          0x08
#define CAPINFO_SECURITY_CAPABLE      0x40
#define CAPINFO_ALLOC_ADDR            0x80

添加白名单
typedef struct
{
  sAddrExt_t  extAddrs; - 白名单的MAC地址
  uint8 life; - 该条白名单记录的超时时间,单位(秒),在该时间内,对应的设备才能加入网络
}ZDE_JoinAcceptReq_t;



z-stack 2.6.1 ZDO优化.zip

1.45 MB, 下载次数: 203

售价: 2 分芯积分  [记录]

此帖出自无线连接论坛

最新回复

学习看   详情 回复 发表于 2020-3-12 15:52

赞赏

3

查看全部赞赏

点赞 关注(5)
 

回复
举报

147

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
关于未入网或者掉线节点实现低功耗,只需要在你的宏定义中,把NWK_START_DELAY值加大。
此帖出自无线连接论坛
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

板凳
 
不错,继续加油。
此帖出自无线连接论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

6105

帖子

4

TA的资源

版主

4
 
支持,学习了!
此帖出自无线连接论坛
 
 
 

回复

45

帖子

0

TA的资源

一粒金砂(中级)

5
 
Z-Stack-Home 1.2.1已经发布了,对应ZStack核心代码为2.6.2.楼主提供的代码能否用在最新协议栈工程内?
此帖出自无线连接论坛

点评

不能,不过2.6.2的优化库我已经做好了。  详情 回复 发表于 2014-9-22 11:13
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

6
 
学习中
此帖出自无线连接论坛
 
 
 

回复

147

帖子

0

TA的资源

一粒金砂(高级)

7
 
Zigbee_App 发表于 2014-9-18 09:20
Z-Stack-Home 1.2.1已经发布了,对应ZStack核心代码为2.6.2.楼主提供的代码能否用在最新协议栈工程内?

不能,不过2.6.2的优化库我已经做好了。
此帖出自无线连接论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

8
 
此帖出自无线连接论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

9
 
支持,学习了~~~
----------------------------------------------------
了解智慧城市,关注智慧照明,掌握无线通信(ZigBee、Wi-Fi),顺舟科技,聪明之选!
此帖出自无线连接论坛
 
 
 

回复

57

帖子

1

TA的资源

一粒金砂(中级)

10
 
不错!!顶一个
此帖出自无线连接论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

11
 
00000
此帖出自无线连接论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

12
 
楼主,我想问下zdo层那几个.c文件在哪里?怎么只有.h文件?是在那几个.lib文件中吗?应该怎么调用?谢谢
此帖出自无线连接论坛

点评

就在lib里面 首先在你的任务里面添加ZDE_event_loop和ZDE_Init,再注册回调函数ZDE_RegisterJoinDeniedCB,回调函数务必符合void(*ZDE_JoinDeniedCb_t)(uint16 parent,ZDE_JoinDenied_t* pDenied,uint8 count)的结  详情 回复 发表于 2014-11-10 13:40
 
 
 

回复

147

帖子

0

TA的资源

一粒金砂(高级)

13
 
kelaosi 发表于 2014-11-7 17:55
楼主,我想问下zdo层那几个.c文件在哪里?怎么只有.h文件?是在那几个.lib文件中吗?应该怎么调用?谢谢

就在lib里面
首先在你的任务里面添加ZDE_event_loop和ZDE_Init,再注册回调函数ZDE_RegisterJoinDeniedCB,回调函数务必符合void(*ZDE_JoinDeniedCb_t)(uint16 parent,ZDE_JoinDenied_t* pDenied,uint8 count)的结构,这个回调函数中,你能看到那些节点正在入网,由你程序来决定要不要这些节点入网。
此帖出自无线连接论坛

点评

是不是把原zstack中的ZDO_Init和ZDO_event_loop改为ZDE_Init和ZDE_event_loop就能使用了?不需要对.lib文件进行一些如添加到工程配置中的操作吗?  详情 回复 发表于 2014-11-10 17:36
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

14
 
罗菜鸟 发表于 2014-11-10 13:40
就在lib里面
首先在你的任务里面添加ZDE_event_loop和ZDE_Init,再注册回调函数ZDE_RegisterJoinDeniedC ...

是不是把原zstack中的ZDO_Init和ZDO_event_loop改为ZDE_Init和ZDE_event_loop就能使用了?不需要对.lib文件进行一些如添加到工程配置中的操作吗?
此帖出自无线连接论坛

点评

不是替代,而是跟在后面  详情 回复 发表于 2014-11-12 23:29
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

15
 
留爪
此帖出自无线连接论坛
 
 
 

回复

147

帖子

0

TA的资源

一粒金砂(高级)

16
 
kelaosi 发表于 2014-11-10 17:36
是不是把原zstack中的ZDO_Init和ZDO_event_loop改为ZDE_Init和ZDE_event_loop就能使用了?不需要对.lib文 ...

不是替代,而是跟在后面
此帖出自无线连接论坛

点评

哦哦,那ZDApp.c和ZDApp.h文件是需要自己添加吗?要不然没ZDOApp_Init()和ZDOApp_event_loop()函数噢...本人新手,希望楼主能多多提点,谢谢  详情 回复 发表于 2014-11-13 17:25
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

17
 
罗菜鸟 发表于 2014-11-12 23:29
不是替代,而是跟在后面

哦哦,那ZDApp.c和ZDApp.h文件是需要自己添加吗?要不然没ZDOApp_Init()和ZDOApp_event_loop()函数噢...本人新手,希望楼主能多多提点,谢谢
此帖出自无线连接论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 
先收藏了
此帖出自无线连接论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

19
 
2.6.2版本的楼主可开放出来下载吗?我的所有项目用的都是2.6.2的
此帖出自无线连接论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

20
 
支持,学习了~~~
此帖出自无线连接论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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