Zigbee学习日记(十)广播通信
goJhou 发布于2018-01 浏览:3880 回复:2
0
收藏

广播可以理解成,发送出来的数据将被同网络的所有节点都收到。

这次实验将用到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
个赞
共2条回复 最后由用户已被禁言回复于2022-04
#3goJhou回复于2018-07
#2 choleraa回复
这是硬件机器人之间的通讯吗?

通讯协议千千万,这可不敢回答你喔

0
#2choleraa回复于2018-07

这是硬件机器人之间的通讯吗?

0
TOP
切换版块