物联网之Zigbee系统开发五(ZigBee项目实战)

一个协调器控制多个终端

内容概要

功能要求

实现过程

功能需求

• 协调器通过串口向终端发送控制命令.

• 发送1则终端1的D8灯开启,发送2则终端2的D8灯开启,发送0,则两个终端都将D8灯关闭

实现过程

• 将串口透传实验的代码拷贝一份并重命名

• 当网络状态发生改变时,通过串口打印一串信息用以分辨串口调试串口对应的是哪种类型的zigbee.

if(zgDeviceLogicalType = ZG_DEVICETYPE_COORDINATOR)
{
    HalUARTWrite( 0, "I am coorinator\n", strlen("I am coorinator\n") );//如果是协调器,则向串口发送数据"I am coorinator"
}
else if(zgDeviceLogicalType = ZG_DEVICETYPE_ENDDEVICE)
{
    HalUARTWrite( 0, "I am enddevice\n", strlen("I am enddevice\n") );//如果是终端,则向串口发送数据"I am enddevice"
}

• 在hal_board_cfg.h中,协议栈已经封装好了控制灯光的函数接口:

#define HAL_TURN_OFF_LED1()       st( LED1_SBIT = LED1_POLARITY (0); )
#define HAL_TURN_OFF_LED2()       st( LED2_SBIT = LED2_POLARITY (0); )
#define HAL_TURN_OFF_LED3()       st( LED3_SBIT = LED3_POLARITY (0); )
#define HAL_TURN_OFF_LED4()       HAL_TURN_OFF_LED1()

#define HAL_TURN_ON_LED1()        st( LED1_SBIT = LED1_POLARITY (1); )
#define HAL_TURN_ON_LED2()        st( LED2_SBIT = LED2_POLARITY (1); )
#define HAL_TURN_ON_LED3()        st( LED3_SBIT = LED3_POLARITY (1); )
#define HAL_TURN_ON_LED4()        HAL_TURN_ON_LED1()

• 本课程配套的套件与TI官方套件的LED端口一致,所以不用再修改驱动代码.

• 但是我们的套件是低电平开灯,高电平关灯所以修改代码为

#define HAL_TURN_OFF_LED1()       st( LED1_SBIT = LED1_POLARITY (1); )
#define HAL_TURN_OFF_LED2()       st( LED2_SBIT = LED2_POLARITY (1); )
#define HAL_TURN_OFF_LED3()       st( LED3_SBIT = LED3_POLARITY (1); )
#define HAL_TURN_OFF_LED4()       HAL_TURN_OFF_LED1()
	
#define HAL_TURN_ON_LED1()        st( LED1_SBIT = LED1_POLARITY (0); )
#define HAL_TURN_ON_LED2()        st( LED2_SBIT = LED2_POLARITY (0); )
#define HAL_TURN_ON_LED3()        st( LED3_SBIT = LED3_POLARITY (0); )
#define HAL_TURN_ON_LED4()        HAL_TURN_ON_LED1()

• 终端编程:

   当接收到无线信息到达后,对信息进行判断,

   1.终端1如果信息的第一个数据是1,则点亮D8,是0则关闭D8.

   2.终端2如果信息的第一个数据是2,则点亮D8,是0则关闭D8

 

 

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
  switch ( pkt->clusterId )
  {
    case SAMPLEAPP_PERIODIC_CLUSTERID:/*如果是这个命令号,则将接收到的数据通过串口打印出来。因
                                     为对方使用AF_DataRequest函数发送数据时填写的命令号为            
                                 SAMPLEAPP_PERIODIC_CLUSTERID,故接收数据时也是这个命令号*/
      HalUARTWrite ( 0, pkt->cmd.Data, pkt->cmd.DataLength );//向串口发送数据,打印到电脑上来。
      if('1' == pkt->cmd.Data[0])//如果接收到的无线数据第一个字符为‘1’,则打开终端设备1的D8
      {
        HAL_TURN_ON_LED2();
      }
     /* if('2' == pkt->cmd.Data[0])//如果接收到的无线数据第一个字符为‘2’,则打开终端设备2的D8
      {
        HAL_TURN_ON_LED2();
      }*/
      else if('0' ==pkt->cmd.Data[0])//如果接收到的无线数据第一个字符为‘0’,则关闭所有终端设备的D8
      {
        HAL_TURN_OFF_LED2();
      }
      break;

    case SAMPLEAPP_FLASH_CLUSTERID:
      break;
  }
}

烧写和编译:

协调器:

终端1:

终端2:

实验结果:

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值