欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验

程序员文章站 2022-06-09 14:39:32
...

ZStack版本:ZStack-CC2530-2.5.1a
下载和调试器:SmartRF04EB
IDE开发软件:IAR Embedded Workbench IDE - 8051 10.20.1
开发平台:基于TI-CC2530的任意厂家的
一、实验简介
本实验在上个单播实验的基础上,仍然使用2个CC2530模块,一个模块作为协调器,一个模块作为终端设备。实验目的是实现终端设备和协调器的点对点无线通信,并且每隔5s,终端设备通过16位网络单播给协调器发送一个字符串信息"i am enddevice!\r\n",协调器收到该信息后,通过串口打印出该信息。协调器每隔5s,使用广播模式给终端设备发送一个字符串信息"i am coordination!\r\n",终端设备收到该信息,使用printf函数,在串口打印该信息。
二、协调器端的代码修改
将工程配置修改为协调器配置模式:
2.1 修改Coordination.c文件中的发送目的地址配置信息代码:
原代码如下:

GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
  GenericApp_DstAddr.endPoint = 0;
  GenericApp_DstAddr.addr.shortAddr = 0;

修改为:

GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;
  GenericApp_DstAddr.endPoint = GENERICAPP_ENDPOINT;
  GenericApp_DstAddr.addr.shortAddr = 0xFFFF;

第一个参数是地址模式使用广播模式。
第二个参数是目的地址的端点号。
第三个参数是目的地址网络地址,广播模式下,该地址为0xFFFF。
2.2 修改消息发送函数GenericApp_SendTheMessage:
原代码如下:

static void GenericApp_SendTheMessage( void )
{
  char theMessageData[] = "Hello World";

  if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
                       GENERICAPP_CLUSTERID,
                       (byte)osal_strlen( theMessageData ) + 1,
                       (byte *)&theMessageData,
                       &GenericApp_TransID,
                       AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
    // Successfully requested to be sent.
  }
  else
  {
    // Error occurred in request to send.
  }
}

修改后代码如下:

static void GenericApp_SendTheMessage( void )
{
  char theMessageData[] = "i am coordination!\r\n";

  if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,
                       GENERICAPP_CLUSTERID,
                       (byte)osal_strlen( theMessageData ) + 1,
                       (byte *)&theMessageData,
                       &GenericApp_TransID,
                       AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
  {
    // Successfully requested to be sent.
    HalUARTWrite(0,"uart0 send success!\r\n",strlen("uart0 send success!\r\n"));
  }
  else
  {
    // Error occurred in request to send.
    HalUARTWrite(0,"uart0 send failer!\r\n",strlen("uart0 send failer!\r\n"));
  }
}

三、终端设备代码的修改
将工程配置切换为终端设备模式:
修改EndDevice.c文件的消息处理函数:
原代码如下:

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

修改后代码如下:

static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  switch ( pkt->clusterId )
  {
    case GENERICAPP_CLUSTERID:
      // "the" message
      /*
#if defined( LCD_SUPPORTED )
      HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );
#elif defined( WIN32 )
      WPRINTSTR( pkt->cmd.Data );
#endif
*/    
      printf("%s\r\n",pkt->cmd.Data);
      break;
  }
}

四、编译下载测试:
ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验
ZStack-CC2530-2.5.1a开发(六)16位网络地址_广播实验
实验成功!

相关标签: Zigbee