开发者学堂课程【嵌入式之RFID开发与应用2020版:Zigbee通信总结】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/665/detail/11142
Zigbee通信总结
内容介绍:
一、组播
二、绑定通信
一、组播
首先先看组播,我们没有讲到组播的东西,但是官方给的那个例子已经包含:
其中有一种通讯方式是需要设置组播的名称、ID。整个的地址就是短地址,它只是设了一个组ID,并没有真正的通信。ID如果是点对点通信,点拨这个地方的类型,选Addr16Bit.如果是组播,地址模式就应该选择 AddrGroup。
当选择这个模式之后,端点不变,短地址就变成ID=0*0001,组播的ID。除此之外没有什么区别,关键是有个函数要调一下,把当前这个节点aps_AddGroup添加到组里面去,只要是添加到组里面去的设备,往组发消息的时候,所有的节点都会收到组播的消息。
如果收不到的话,有一个问题你要去检查一下,这个文件(f8Config.cfg)这个里面有一个宏,是ALWAYS。要把 FALSE改成TRUE就可以了。
二、绑定通信
绑定通信主要的意义是方便。也就是说完成绑定后的通信过程可以不用短地址,是绑定一个非常重要的意义,所以说经常都知道在节点与节点之间通信的时候,有这么一个问题,地址由于是动态分配的, A节点不知道b节点是多少,但是可以通过绑定的方式建立起ab之间通讯关系。
即使不知道地址是多少,因为每次入网这个地址可能会变化,一旦变了之后,还是用那个地址,数据是发不发不过去的,但是有个东西是不变的,叫MAC地址。
手册里面找绑定的那个函数,应该是APS管理层bind,搜一下取消勾选全字匹配,就这个接口APSME_BindRequest。
绑定其实主要的目的就是为了方便,而且在动态分配地址的时候,不知道对方地址,通过MAC地址可以绑定去跟人家进行通信。
绑定通信它是一种本地行为,很多同学以为调用某个函数,如刚才那个函数BindRequest去绑定的时候,我是不是就给对方发了个什么东西,不是。调函数绑定,其实是完成了本节点建立绑定地址映射表,将来发数据的时候,就会从映射表里面去寻找绑定的端点和MAC地址。
如果去给绑定的对象发数据怎么办?比如把 b端节点绑定了,首先会去发送 MAC地址,其实具体原理不太清楚,是协议站去做的,有可能是有点像网络通讯里面 ARP,通过麦克地址广播出去,然后跟自己MAC地相同,再回一个短地址过来,回过来之后就可以通过短地址通信,就整个通信过程是底层去完成的,上层不用管,这就是组播,绑定,点对点东西用的要多一点简单一点。
具体更深入的东西,包括内部的实现的机制,需要通过不断的去做实验,或者是看代码,整个协议站的东西其实也不是特别多,因为它把大量的东西都放到了 library里面做成了库,就是一些无法看到的二进制文件里面,它在components,因为components是我们的组件,跟硬件相关。也没有多少代码,头文件就不用看了,这个里面就是跟我们的单片机相关的全都在这个里面,跟MAC相关代码也很少,还有具体的一些应用,对网络串口ZDO的一些应用,还有操作系统相关的osal的,东西不算是特别多,操作系统非常精简。还有一些services,协议站基本上就是按照分层af层、网络层还有系统层,还有ZDO,应用层最上层的那些东西。它生成的目标,里面是编译之后工程生成的东西,Source是经常写的这些应用程序,写的Mapp、温湿度传感器就在这里,如果要增加传感器,就往source里SampieApp里面放,ZMain是入口函数。在bin里面叫library。