zigbee笔记:十四、广播通信原理

一、zigbee四种通讯

        1、单播(略)

        2、广播:发送模块发送数据,这个网络里所有的节点模块都可以拿到这个数据。

        3、组播(略)

        4、绑定(略)

二、广播实验

        本笔记只记录如何实现广播发送端和接收端设置,完整实验参考:

        lesson9 广播通信原理_哔哩哔哩_bilibili

        1、广播的发送端设置(终端发送模块)

        终端发送模块,定义了端点10,并且和应用层任务挂钩。设置发送出去的方式是广播,目标是网络里面所有的节点,并指定接收的模块接收这个数据的端点是10,接收的簇是0x0001。

        (1)定义端点10:在APP目录下的smartHomeApp.c文件中的smartHomeApp_Init函数中对应位置注册端点10,如下图和代码。

 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 
    smartHomeApp_epDesc.endPoint =10;// smartHomeApp_ENDPOINT;
    smartHomeApp_epDesc.task_id = &smartHomeApp_TaskID;
    smartHomeApp_epDesc.simpleDesc
        = ( SimpleDescriptionFormat_t* )&smartHomeApp_SimpleDesc;
    smartHomeApp_epDesc.latencyReq = noLatencyReqs;
    // Register the endpoint description with the AF
    afRegister( &smartHomeApp_epDesc );

    
     //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

(2)设置发送出去的方式是广播,目标是网络里面所有的节点,并指定接收的模块接收这个数据的端点是10,接收的簇是0x0001,发送的代码如下。

char theMessageData[] = "Hello World";
smartHomeApp_DstAddr.addrMode =(afAddrMode_t)AddrBroadcast //修改发送模式
/*
enum
{
  AddrNotPresent = 0,
  AddrGroup = 1,//组播模式
  Addr16Bit = 2,
  Addr64Bit = 3,
  AddrBroadcast = 15 //广播模式
};

typedef enum
{
  afAddrNotPresent = AddrNotPresent,
  afAddr16Bit      = Addr16Bit,
  afAddr64Bit      = Addr64Bit,
  afAddrGroup      = AddrGroup,
  afAddrBroadcast  = AddrBroadcast
} afAddrMode_t;

*/
smartHomeApp_DstAddr.addr.shortAddr = 0xFFFF;  //目标模块的网络地址为0xFFFF,表示发送给网络里的所有节点
smartHomeApp_DstAddr.endPoint = 10; //目标端点为10

AF_DataRequest( &smartHomeApp_DstAddr, &smartHomeApp_epDesc,
                       0x0001, //指定接收模块的簇
                      (byte)osal_strlen( theMessageData ) + 1,  //表示发送字节个数
                     //   1, 
                       (byte *)&theMessageData,//发送的数组的首地址
                       &smartHomeApp_TransID,
                       AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );

        2、广播接收端设置

        定义了端点10,并且和应用层任务挂钩。一旦外部给本模块发数据,就会进入应用层事件处理函数,在函数里外部来数据这个消息里,通过判断簇点值,接收相应的数据并做出反应。

        (1)定义了端点10,并且和应用层任务挂钩。与步骤 二.1.(1)一致。

        (2)外部给本模块发数据,就会进入应用层事件处理函数,在函数里外部来数据这个消息里,通过判断簇点值,接收相应的数据并做出反应。在在APP目录下的smartHomeApp.c文件中的smartHomeApp_MessageMSGCB函数中修改相应内容,代码如下所示。

void smartHomeApp_MessageMSGCB( afIncomingMSGPacket_t* pkt )
{
  //外来数据包投入到10号端点
  if(pkt->endPoint==10){
    //判断接收簇
    switch( pkt->clusterId ){
      
    case  0x0001:
      InformationSend(pkt->cmd.Data,pkt->cmd.DataLength);
      LED1=~LED1;
      break;
      case  0x0002:
        InformationSend(pkt->cmd.Data,pkt->cmd.DataLength);
        LED2=~LED2;
      break;
      
    default:
      break;
    
    }
    
  }

}

三、网络特性补充:

        (1)协调器创建网络之后,就和网络里面的路由器节点在通讯过程中、功能上没有任何区别,只不过网络地址永远是0x0000。

        (2)终端入网后,他和网络里的其他节点数据收和发都要经过他的父节点转发。

        (3)路由器在路网后,虽然网络里有他的父节点,但是他们在发数据时候,不需要父节点转发,入网后,协调器和所有的路由器的通讯地位平等。

        (4)数据源地址和目标地址、网络源地址和目标地址

         (5)广播转发次数。终端入网后,他和网络里的其他节点数据收和发都要经过他的父节点转发,因此一条信息从开始的发送端到目标节点,可能会经过多次的转发,系统有规定转发次数,当转发次数减为零时,不能再转发。

参考链接

(1) lesson9 广播通信原理_哔哩哔哩_bilibili

(2)lesson 9 Zigbee广播通信原理实验_zigbee 广播-CSDN博客

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值