ZigBee TI ZStack CC2530 4.18 绑定通信02-实验验证

简介: (配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 上一节中,我们简要介绍了ZigBee的第四种无线通信方式——绑定的基本概念;本节中,我们将对ZigBee的绑定通信(握手绑定)进行实验验证。

(配套源码软件开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911


上一节中,我们简要介绍了ZigBee的第四种无线通信方式——绑定的基本概念;本节中,我们将对ZigBee的绑定通信(握手绑定)进行实验验证。


本节中实现的功能为:组建由一个ZigBee协调器和两个以上ZigBee终端设备组成的ZigBee网络。无需对ZigBee协调器做任何操作,仅由其负责创建ZigBee网络和处理绑定请求;其余ZigBee设备在建立绑定关系之前,不能进行无线数据的收发,建立绑定关系之后,可以成功地进行无线数据的收发。

1、绑定请求函数

上一节中我们讲过,握手绑定(Hand Binding)可以通过调用Z-Stack协议栈中的ZDP_EndDeviceBindReq()函数来实现,其函数定义和声明分别在ZDProfile.c和ZDProfile.h两个文件中,此处就不再赘述。

另外,上一节中也提到,“允许绑定的时间”——APS_DEFAULT_MAXBINDING_TIME的默认值为16秒,其定义在ZGlobals.h文件中。可直接在定义处更改其值,也可以在f8wConfig.cfg文件中或在预编译选项中对进行定义,实现覆盖更改。

2、ZDO消息注册函数(绑定消息)

我们可以为设备绑定状态改变的消息(End_Device_Bind_rsp)指定一个接收处理的任务,当设备的绑定状态发生改变时,被指定的任务就会做相应的处理。为了实现这一功能,我们需要调用ZDO_RegisterForZDOMsg()函数对End_Device_Bind_rsp进行注册,该函数的定义在ZDProfile.c文件中:

/*********************************************************************
 * @fn          ZDO_RegisterForZDOMsg
 *
 * @brief       Call this function to register of an incoming over
 *              the air ZDO message - probably a response message
 *              but requests can also be received.
 *              Messages are delivered to the task with ZDO_CB_MSG
 *              as the message ID.
 *
 * @param       taskID - Where you would like the message delivered
 * @param       clusterID - What message?
 *
 * @return      ZSuccess - successful, ZMemError if not
 */
ZStatus_t ZDO_RegisterForZDOMsg( uint8 taskID, uint16 clusterID )

3、注册“绑定消息”并定义处理函数

为实现注册“绑定消息”,为设备绑定状态改变的消息(End_Device_Bind_rsp)指定一个接收处理的任务(ProjectApp_TaskID),在ProjectApp_Init( )函数最后,加入如下代码:

ZDO_RegisterForZDOMsg( ProjectApp_TaskID, End_Device_Bind_rsp );

如果对“绑定消息”指定了接收处理的任务,当设备的绑定状态发生改变时,被指定的任务就会做相应的处理,这里我们需要在ProjectApp.c文件中定义一个处理函数,我们给其取名为ProjectApp_ProcessZDOMsgs(),其函数声明和定义如下:

......
static void ProjectApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg );
......

static void ProjectApp_ProcessZDOMsgs( zdoIncomingMsg_t *inMsg )//每次“绑定”状态发生改变,均会调用此函数
{
  switch ( inMsg->clusterID )
  {
    case End_Device_Bind_rsp:
      if ( ZDO_ParseBindRsp( inMsg ) == ZSuccess )
      {
        printf("Bind success!\r\n");
      }
      else
      {
        printf("Bind failure!\r\n");
      }
      break;
  }
}

当设备的绑定状态发生改变时,被指定的任务(ProjectApp_TaskID)会收到SYS_EVENT_MSG事件下的ZDO_CB_MSG事件,我们刚刚定义的ProjectApp_ProcessZDOMsgs()函数自然就是在这里被调用的了。所以,我们在ProjectApp_ProcessEvent()函数中的switch语句中加入如下case分支:

case ZDO_CB_MSG         : ProjectApp_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );                            break;//每次“绑定”状态发生改变,均会调用此函数

4、绑定发送函数,声明及定义如下:

......
static void ProjectApp_SendBindcast( void );
......
static void ProjectApp_SendBindcast( void )
{
  char theMessageData[ ] = "Bind data\r\n";

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

  AF_DataRequest( &ProjectApp_DstAddr,
                  &ProjectApp_epDesc,
                  PROJECTAPP_CLUSTERID,
                  (byte)osal_strlen( theMessageData ) + 1,
                  (byte *)&theMessageData,
                  &ProjectApp_TransID,
                  AF_DISCV_ROUTE,
                  AF_DEFAULT_RADIUS
                );
}
其中需要注意的是,目的地址的地址模式(ProjectApp_DstAddr.addrMode)部分,需要指定为AddrNotPresent;相信这个函数的定义大家也是一眼就能看明白~
5、实验验证

(1)发起绑定请求

static void ProjectApp_HandleKeys( uint8 shift, uint8 keys )
{
......
  if ( keys & HAL_KEY_SW_2 )
  {
    ......
    // Initiate an End Device Bind Request for the mandatory endpoint
    printf("Bind start!\r\n");
    zAddrType_t dstAddr;
    dstAddr.addrMode = Addr16Bit;
    dstAddr.addr.shortAddr = 0x0000; // Coordinator
    ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
                          ProjectApp_epDesc.endPoint,
                          PROJECTAPP_PROFID,
                          PROJECTAPP_MAX_CLUSTERS, (cId_t *)ProjectApp_ClusterList,
                          PROJECTAPP_MAX_CLUSTERS, (cId_t *)ProjectApp_ClusterList,
                          FALSE );
  }
......
}
(2)调用绑定发送函数
static void ProjectApp_HandleKeys( uint8 shift, uint8 keys )
{
  ......
  if ( keys & HAL_KEY_SW_1 )
  {
    ......
    ProjectApp_SendBindcast();
  }
}

(3)编译下载

在IAR左侧的Workspace中,一个ZigBee设备选择CoordinatorEB编译下载,其余所有的ZigBee设备任意选择RouterEB或EndDeviceEB编译下载,如下图所示进行选择;

(4)实验现象

所有的ZigBee设备上电后,不对ZigBee协调器做任何操作,也不对其余ZigBee设备做任何操作,按下除了协调器之外的其余ZigBee设备上的KEY1后,并不能在任何两个ZigBee设备之间进行无线数据的收发。

除协调器之外的其余任意ZigBee设备上,按下KEY2,就可以向ZigBee协调器发送绑定请求;任意ZigBee设备上的KEY1可以触发绑定发送;凡是成功建立绑定关系的ZigBee设备,都能收到发送设备发送的绑定数据包,该设备上的LED1状态会取反,同时串口每次都会打印出“Bind data”:



(配套源码软件开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911

相关文章
|
传感器 物联网
( zigbee)CC2530+BH1750光敏传感器获取光照强度
( zigbee)CC2530+BH1750光敏传感器获取光照强度
778 0
( zigbee)CC2530+BH1750光敏传感器获取光照强度
|
传感器 网络协议 物联网
基于CC2530(ZigBee)设计的景观照明控制系统+配套手机APP
基于CC2530(ZigBee)设计的景观照明控制系统+配套手机APP
525 0
基于CC2530(ZigBee)设计的景观照明控制系统+配套手机APP
|
传感器 网络协议 物联网
基于CC2530(ZigBee)设计的自动照明系统
基于ZigBee的自动照明系统设计,上面连接了光感传感器,ESP8266WIFI模块。通过ESP8266与手机APP之间通信,ESP8266创建热点,配置为TCP服务器模式; 手机APP连接上ESP8266的热点之后,再连接ESP8266创建的服务器,完成通信。 手机APP上通过按钮可以控制B,C开发板上LED灯的开关。
529 0
|
传感器 物联网 Linux
基于CC2530(ZigBee设计)的温度报警器
这是基于CC2530设计的远程温度报警器,通过CC2530终端检测环境温度上传给手机APP实时显示。 一共有两块CC2530开发板,这里就分别称为A板(当做协调器)、B板(当做温度节点),A板上接了ESP8266 WIF模块,用于与手机APP之间通信。B板上接了DS18B20 温度传感器模块,用于给A板传递检测的温度,A板收到DS18B20的温度之后,发送给手机APP显示。APP上位机采用Qt框架设计,支持跨平台,Android、windows、IOS、Linux都可以编译运行安装。
815 0
|
物联网
ZigBee(CC2530)最小系统PCB设计(AD18开发软件)
ZigBee(CC2530)最小系统PCB设计(AD18开发软件
ZigBee(CC2530)最小系统PCB设计(AD18开发软件)
|
物联网
ZigBee TI ZStack CC2530 2.3 协议栈版本
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一、协议栈发展历史 TI的ZigBee 协议栈Z-Stack,从最开始的Z-Stack 0.1到大家熟悉的ZStack-CC2530-2.5.1a,再到几个月前刚刚发布的最新版本——Z-Stack 3.0.1,历经了非常多的版本。
3225 0
|
移动开发 物联网 流计算
ZigBee TI ZStack CC2530 3.12 LED驱动移植及使用
(配套源码、软件、开发板等资源,可移步博客同名QQ群/TB店铺:拿破仑940911) 一、前言 关于Z-Stack协议栈中的LED控制,如果使用协议栈中自带的驱动,很简单就可以实现非常丰富的功能。
2023 0
Adobe XD CC 55.2.12.2 是一款非常专业的矢量图形规划软件Adobe XD 2023版本软件下载安装教程(内含所有版本)
Adobe XD CC 55.2.12.2 是一款非常专业的矢量图形规划软件,全新的桌面端UX原型工具,这是新一代网页与移动应用的UX设计工具。xd能够帮助设计者快速有效的设计图形、建立手机APP以及网站原型等等设计制作,支持设备的尺寸多样。集原型、设计和交互等功能于一体,从网站和移动应用程序到语音交互都可轻松实现,Adobe XD CC带来了响应调整大小、自动动画、语音原型、插件和应用程序集成等新功能,
Adobe Photoshop CC 2019下载中文永久安装和破解教程
Adobe Photoshop CC 2019下载中文永久安装和破解教程
49924 0
Animate CC 2019免费下载丨Adobe Animate CC 2019下载中文完整版永久安装教程
Adobe 提供了一整套可互相配合使用的动画应用程序,助您实现所有创意。使用 Animate CC 创建适用于游戏、应用程序和 Web 的交互式矢量动画。利用 Character Animator CC 将人物实时制成动画。
8380 0