cc2530协调器向终端发信息

项目场景:

zigbee cc2530 协调器向终端发信息过程


问题描述:

协调器向终端发信息的过程:
1.终端给协调器发送自己的网络(短)地址
2.协调器接收到地址之后向终端发消息

程序:
1.终端向协调器发自己的短地址:

static void SampleApp_SendTheMessage()
{
 
  uint16 nwkAddr;//本设备地址
  uint16 parentNwkAddr;//父节点地址
  char buff[30] = {0};//发送缓存数组
  afAddrType_t SampleApp_Addr;
  HalLedBlink( HAL_LED_2, 3, 50, (1000 / 4) );
  
  nwkAddr = NLME_GetShortAddr();//获取本设备地址
  parentNwkAddr = NLME_GetCoordShortAddr();//获取父设备地址
  sprintf(buff, "parent:%d   self:%d\r\n", parentNwkAddr, nwkAddr);
  
  SampleApp_Addr.addrMode = (afAddrMode_t)Addr16Bit;
  SampleApp_Addr.endPoint = SAMPLEAPP_ENDPOINT;
  SampleApp_Addr.addr.shortAddr = 0;//因为我这个是发送给协调器的,所以是0,如果是发送给父节点的,用parentNwkAddr ;
  
  buff[0] = HI_UINT16( nwkAddr );
  buff[1] = LO_UINT16( nwkAddr );//因为发送是八位的,所以需要将地址存到数组里
  HalUARTWrite ( 0, (uint8*)buff, strlen(buff));
  if ( AF_DataRequest( &SampleApp_Addr, &SampleApp_epDesc,
                       SAMPLEAPP_CLUSTERID,
                       2,
                       (uint8*)buff,
                       &SampleApp_TransID, 
                       0, 
                       AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
  }
  else
  {
    // Error occurred in request to send.
  }

}

2.协调器接收终端短地址:

static void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
     switch ( pkt->clusterId )//这个就是簇,必须要保证发来的簇与要判断的簇保持一致才可以
     { 

      case SAMPLEAPP_CLUSTERID://收到数据进行解析  终端节点发来消息

        endpointaddr = (pkt->cmd.Data[0]) + (pkt->cmd.Data[1]<<8);//我把endpointaddr设成了全局变量
        HalUARTWrite(0, (uint8*)&endpointaddr , 2);//串口打印到电脑查看
        break;
        
      default:
        break;
     }
}

3.协调器向终端发送消息:

static void SampleApp_SendTheMessage()  
{
  afAddrType_t SampleApp_DstAddr;
  SampleApp_DstAddr.addr.shortAddr = endpointaddr;    //终端短地址(逻辑/网络)地址  
  SampleApp_DstAddr.addrMode = afAddr16Bit;  //通信模式,通过短地址点对点通信
  SampleApp_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; //终端的endpoint


 if (AF_DataRequest(&SampleApp_DstAddr,       //目的地址
                 &SampleApp_epDesc,       //发送端(源)端点号
                 SAMPLEAPP_CLUSTERID,    //命令ID
                 2, //发送数据的长度
                 (uint8 *)Buf,      //指向存放发送数据缓冲区的指针,自行设置
                 &SampleApp_TransID,       //指向发送序列号的指针
                 AF_DISCV_ROUTE,            
                 AF_DEFAULT_RADIUS
                 ) == afStatus_SUCCESS)
    {            
    }
 else
    {      
    }

}

如果哪里解释不对,或者程序不对请指正(手动撒花)

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxx147

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值