内容概要:
功能要求
实现过程
功能需求:
• 协调器通过串口向终端发送控制命令.
• 发送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:
实验结果: