#author("2019-10-29T14:53:51+08:00","default:Admin","Admin") ZigBee ※This article is based on ZigBee Stack 2.51.a 针对ZigBee模块现有的数据发送方式,主要是Zigbee的单播和广播两种方式。 广播方式 †&ref(): File not found: "ZigBee_广播.png" at page "+ZigBee+广播"; 点播(Unicast) †顾名思义就是点对点通信,也就是 2 个设备之间的通讯,不容许有第三个设备收到信息。 在单播方式下,数据由源设备发出,直接或者经过几级中转后,发送至目的地址。加入zigbee网络的所有设备之间都可以进行单播传输。具体路由关系由协调节点/路由节点进行维护、查询。 做一个点对点的通信,向协调器发数据,则dstAddr应该这样实例化: afAddrType_t Point_To_Point_DstAddr;//点对点通信 Point_To_Point_DstAddr.addrMode = (afAddrMode_t)afAddr16Bit;//点播 Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; Point_To_Point_DstAddr.addr.shortAddr = 0x0000;//发送给协调器,0x0000是协调器的地址 要使协调器向子节点发送数据,只需要知道子节点的地址即可。 组播 †就是把网络中的节点分组,每一个组员发出的信息只有相同组号的组员才能收到。 广播(broadcast) †发送模块发出数据,这个网络里面所有节点都可以收到数据。“广播”可以理解为一个人通过广播喇叭对在场的全体说话,这样做的好处是效率高,信息一下子就可以传递给所有人。 在广播方式下,数据由一个设备发送信息直接或者经过路由中转,发送到整个zigbee网络的所有设备,其目标地址使用16进账的FFFF。在为那的设备中只有协调器才支持广播方式。 afAddrType_t Point_To_Point_DstAddr; Point_To_Point_DstAddr.addrMode = (afAddrMode_t)afAddrBroadcast;//广播 Point_To_Point_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; Point_To_Point_DstAddr.addr.shortAddr = //下面
数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父亲节点直到查询到它,或者消息超时(NWK_INDIRECT_MSG_TIMEOUT 在f8wConifg.cfg 中)。
数据包将被传送到网络上的所有在空闲时打开接收的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。
数据包发送给所有的路由器,包括协调器。 优缺点 †采用16bit网络地址可以降低功耗问题。 如果采用64bit IEEE地址发送数据,首先其数据发送的最佳路径难以求得,势必会增加多次发送的功耗 其二 如果该数据接收设备离开网络(当机),发送之时也就不知道。 采用网络地址发送数据,可以采用路由算法 找到最佳路径减其功耗。[摘自fjxsos] 协议栈介绍 †通过AF_DataRequest函数发送下面的struct typedef struct { union { uint16 shortAddr; ZLongAddr_t extAddr; } addr; byte addrMode; } zAddrType_t; 目的地址模式可以设置为以下的几个值: typedef enum { afAddrNotPresent = AddrNotPresent, afAddr16Bit = Addr16Bit, afAddr64Bit = Addr64Bit, afAddrGroup = AddrGroup, afAddrBroadcast = AddrBroadcast } afAddrMode_t; ★月額105円~/容量最大30GB/機能満載! ロリポップ!レンタルサーバー ★ コメント: |