Zigbee应用开发 协调器控制多个终端

协调器控制多个终端

      功能要求:

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

           发送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;
    }
}

 

全部评论

相关推荐

Java抽象带篮子:实习经历包装一下,可以看看我的包装贴
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务