协调器控制多个终端
功能要求:
协调器通过串口向终端发送控制命令
发送1 则终端1 的D8灯亮 发送 2 则 终端2 的灯亮 发送 0 则 俩个终端都灭
实现过程:
当网络状态发生改变时,通过串口打印一串消息用来分辨串口调试对应着那种类型的Zigbee
终端编程:
当接收到无线消息到达后,对信息进行判断
终端1 ,第一个数据为 1 ,点亮 D8。 0 关闭 D8
终端2,第一个数据为2,点亮D8。0 关闭 D8
// 添加头文件
#include "hal_board_cfg.h"
void ()
{
if()
{
while()
{
case ZDO_STATE_CHANGE:
SampleApp_NwkState = (devStates_t)(MSGpkt -> hdr.status);
if((SampleApp_NwkState == DEV_ZB_COORD)||
(SampleApp_NwkState == DEV_ROUIER)||
(SampleApp_NwkState == DEV_END_DEVICE))
{
if(zgDeviceLogicalType == ZG_DEVICETYPE_COORDINATOR) // 协调器
{
HalUARTWrite(0, "uart is ok \n", strlen("uart is ok \n"));
}
else if(zgDevicelLogicalType == ZG_DEVICETYPE_ENDDEVICE)
{
HalUARTwrite(0, "I am endevice \n", strlen("I am enddevice \n"));
}
}
else
{
}
break;
}
}
}
void SampleApp_MessageMSGCB (afIncomingMSGPacket_t *pkt)
{
uint16 flashTime;
switch(pkt -> clusterId)
{
case SAMPLEAPP_PERIODIC_CLUSTERID:
HalUARTwrite(0, pkt->cmd.Data, pkt->cmd.DataLength);
if('1' == pkt -> cmd.Data[0])
{
HAL_TURN_ON_LED2();
}
else if('0' == pkt -> cmd.Data[0])
{
HAL_TURN_OFF_LED2();
}
break;
}
}
// ual_board_cfg.h
#if ( defined (HAL_BOARD_CC2503EB_REV17) &&
!defined(HAL_PA_LNA) &&
!defined(HAL_PA_LNA_CC2590))
#define HAL_TURN_OFF_LED2() st(LED2_SBIT = LED2_POLARITY(1);)
#define HAL_TURN_ON_LED2() st(LED2_SBIT = LED2_POLARITY(0);)
void SampleApp_MessageMSGCB (afIncomingMSGPacket_t *pkt) // 第二个终端
{
uint16 flashTime;
switch(pkt -> clusterId)
{
case SAMPLEAPP_PERIODIC_CLUSTERID:
HalUARTwrite(0, pkt->cmd.Data, pkt->cmd.DataLength);
if('2' == pkt -> cmd.Data[0])
{
HAL_TURN_ON_LED2();
}
else if('0' == pkt -> cmd.Data[0])
{
HAL_TURN_OFF_LED2();
}
break;
}
}