11 单播初体验

1、刚开始,我们确实需要借助官方模板,添加简单的代码,做出通信基本收发实验,建立感性的认识。

2、然后,在官方代码基本实验基础上,了解相关的概念,掌握通信过程中原理,结合自己的理解,自己动手做一个个性化实验,验证我们的理解。

单播

在Zigbee网络里,模块之间要进行通信,发射模块非常明确知道接收模块的网络地址,以这个地址发送数据给接收模块,叫单播。

Zigbee模块的地址特点:

模块在入网的时候,父节点随机分配网络地址给子节点。但是协调器模块在网络里的地址永远是0x0000.

在同一个工程里面通过选项卡控制不同的文件的编译细节!复制SimonAPP.c文件作为Enddevice.c文件,然后选择不同选项卡,通过文件的option设置,利用Exclude from build选项设置某个文件在某个选项卡下是否参与编译!!!

发送单个字符

发送模块—终端节点

在Enddevice.c文件里的SimonApp_MY_EVT事件处理中按钮1 按下的相关处理代码:

if ( events & SimonApp_MY_EVT )
  {
    if(0==P1_1)
     {//按钮3按下
        LS164_BYTE(3);


        char theMessageData[] ={8};         
        SimonApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
        SimonApp_DstAddr.addr.shortAddr = 0x0000;
        // Take the first endpoint, Can be changed to search through endpoints
        SimonApp_DstAddr.endPoint =SimonApp_ENDPOINT ;



        AF_DataRequest( &SimonApp_DstAddr, &SimonApp_epDesc,
                 SimonApp_CLUSTERID,
                 1,//(byte)osal_strlen( theMessageData ) + 1,
                 (byte *)&theMessageData,
                 &SimonApp_TransID,
                 AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );


        P1SEL &=0Xfe;// 翻转LED
        P1DIR |=0X01;
        P1_0 ^=1;
     }
     if(0==P2_0)
     {//按钮4按下
        LS164_BYTE(4);
     }
     if(0==P0_5)
     {//按钮5按下
        LS164_BYTE(5);
     }
    return (events ^ SimonApp_MY_EVT);
  }

接收模块—协调器

接收的大概过程是,当终端模块发送数据时候,协调器模块底层任务拿到这个无线数据,给我们应用层任务发送一个AF_INCOMING_MSG_CMD在消息处理里,我们把有用数据拿出来在数码管上显示。

SimonAPP.c里面:

void SimonApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  switch ( pkt->clusterId )
  {
    case SimonApp_CLUSTERID:
      // "the" message
#if defined( LCD_SUPPORTED )
      HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
#elif defined( WIN32 )
      WPRINTSTR( pkt->cmd.Data );
#endif

      LS164_BYTE(pkt->cmd.Data[0]);
      break;
  }
}

发送字符串

发送模块

在Enddevice.c文件里的SimonApp_MY_EVT事件处理中按钮1 按下的相关处理代码:

if ( events & SimonApp_MY_EVT )
  {
    if(0==P1_1)
     {//按钮3按下
        LS164_BYTE(3);


        char theMessageData[] ="Hello Simon";         
        SimonApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
        SimonApp_DstAddr.addr.shortAddr = 0x0000;
        // Take the first endpoint, Can be changed to search through endpoints
        SimonApp_DstAddr.endPoint =SimonApp_ENDPOINT ;



        AF_DataRequest( &SimonApp_DstAddr, &SimonApp_epDesc,
                 SimonApp_CLUSTERID,
                 (byte)osal_strlen( theMessageData ) + 1,
                 (byte *)&theMessageData,
                 &SimonApp_TransID,
                 AF_DISCV_ROUTE, AF_DEFAULT_RADIUS );


        P1SEL &=0Xfe;// 翻转LED
        P1DIR |=0X01;
        P1_0 ^=1;
     }
     if(0==P2_0)
     {//按钮4按下
        LS164_BYTE(4);
     }
     if(0==P0_5)
     {//按钮5按下
        LS164_BYTE(5);
     }
    return (events ^ SimonApp_MY_EVT);
  }

接收模块

1.因为要接收字符串,移植串口模块化文件,添加UART.C UART.h头文件到 工程源文件目录!!!

2.在ZMain.c文件的main 靠近模块void InitUart();初始化串口!!!

3.取消TI默认对串口的配置,在main函数找到 HalDriverInit函数,通过该函数修该宏定义:
把宏#define HAL_UART FALSE

4.在ZMain,c添加UART.h头文件初始化算完成了

5.在SimonApp_MessageMSGCB函数中添加:
Uart_Send_String(pkt->cmd.Data,pkt->cmd.DataLength);
记得在SDApp.c文件添加UART.h头文件

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值