广播可以理解成,发送出来的数据将被同网络的所有节点都收到。
这次实验将用到3块Zigbee板子。
协调器、路由器将作为接收端
终端将作为发送端。
对于接收端而言,并没什么特别的。将串行数码管初始化一下,然后只要在接收函数里显示出接收到的数据包中的数字即可。
针对发送端,唯一的改变也只是在按钮中断事件处理函数中的两句话
if(0==P1_1)
{//按钮3
char theMessageData[] = {3};
GenericApp.addrMode = (afAddrMode_t)AddrBroadcast;//注意这里,发送模式是广播模式
GenericApp.addr.shortAddr = 0xFFFF;//注意这里,表示目标接收模块是网络的所有节点
GenericApp.endPoint = GENERICAPP_ENDPOINT;//默认端点
AF_DataRequest(&GenericApp_DstAddr,
&GenericApp_epDesc,
GenericApp_CLUSTERID,//默认簇
1,//(byte)osal_strlen( theMessageData ) + 1,
(byte *)&theMessageData,
&GenericApp_TransID,
AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );
}
当然广播也支持终端和簇的自定义,这里就不做实验了。
终端模块要收发数据,都会经协调器转发。
在通信中,终端要发广播帧,会先发给0x0000(协调器)
由0x0000发给0xFFFF (全网模块)
发送的帧中可以看到,Dest Address是0xFFFF,Source Address是0x0000。
在该包后面NWK Dest.Address是0xFFFF,NWK Src.Address为0x346F.这意味着这个封包的源头数据,是由0x346F这个节点发出的广播数据帧。
并且在协调器转发过程中,会又转发给到他自己,但此时他不会回复ACK。
路由器在入网时虽然网络中也有父节点,但在他们发数据时,不需要父节点转发。入网后,协调器和所有的路由器通信地位是平等的。
转发帧要注意的是Broadcast Raius.转发次数是有限制的。默认从协调器出发可30次。
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
通讯协议千千万,这可不敢回答你喔
这是硬件机器人之间的通讯吗?