总体方案说明

方案介绍

智能灯演示系统由一个wifi开发板,一个ARM开发板(含一个LED灯)组成。它具备如下几个功能:

(1)该设备接收云端的控制,打开和关闭LED灯。

(2)提供机械开关进行手动开关功能。

(3)支持云端查询当前状态。

实现方案

总体方案介绍

wifi开发板和Arm开发板之间通过串口相连,wifi开发板上由一个wifi模块,负责和云端交互,并将云端的数据通过串口转发给ARM开发板。

ARM开发板上主体部分是一个MCU和一个LED,其余部分是一个一些按键和指示灯。主控MCU采用TI的ARM Cortex M4芯片。主控MCU和LED灯之间采用GPIO控制。

交互流程图

interaction

实现说明

  1. 设备控制消息接口处理

函数定义

void AC_DealEvent (AC_MessageHead *pstruMsg, AC_OptList *pstruOptList, u8 *pu8Playload)

函数实现

void AC_DealEvent(AC_MessageHead *pstruMsg, AC_OptList *pstruOptList, u8 *pu8Playload)
{   
    u16 u16DataLen;

    switch(pstruMsg->MsgCode)
    {
        case MSG_SERVER_CLIENT_SET_LED_ONOFF_REQ:
        {
            AC_DealLed(pstruMsg, pstruOptList, pu8Playload);
        }
        break;
    }
    AC_BuildMessage(CLIENT_SERVER_OK,pstruMsg->MsgId,
                    (u8*)test, sizeof(test),
                    pstruOptList, 
                    g_u8MsgBuildBuffer, &u16DataLen);
    AC_SendMessage(g_u8MsgBuildBuffer, u16DataLen);
}

说明:该函数接口是处理云端的控制消息,根据消息类型进行不同处理。 该系统只有一个LED灯控制流程。

  1. 通知类型消息接口处理

函数定义

void AC_DealNotifyMessage (AC_MessageHead *pstruMsg, AC_OptList *pstruOptList, u8 *pu8Playload)

函数实现

void AC_DealNotifyMessage(AC_MessageHead *pstruMsg, AC_OptList *pstruOptList, u8 *pu8Playload)
{

    switch(pstruMsg->MsgCode)
    {
        case AC_CODE_EQ_DONE:
        AC_StoreStatus(WIFIPOWERSTATUS , WIFIPOWERON);
        UARTprintf("Wifi Power On!\n");
        break;
        case AC_CODE_WIFI_CONNECTED:
        AC_SendDeviceRegsiter(NULL, g_u8EqVersion,g_u8ModuleKey,g_u64Domain,g_u8DeviceId);
        UARTprintf("Wifi Connect!\n");
        break;
        case AC_CODE_CLOUD_CONNECTED:
        AC_StoreStatus(CLOUDSTATUS,CLOUDCONNECT);
        UARTprintf("Cloud Connect!\n");
        break;
        case AC_CODE_CLOUD_DISCONNECTED:
        AC_StoreStatus(CLOUDSTATUS,CLOUDDISCONNECT);
        UARTprintf("Cloud DisConnect!\n");
        break;
    }
}

说明:该函数实现通知类消息的处理,当接收到wifi链接成功消息后,调用API接口发送注册通知消息给wifi模块,触发云端接入。 注意:进行注册时,需要发送当前版本,模块秘钥,域名信息,设备ID,这些消息用户需要自行存储。

  1. 串口数据发送接口实现

函数定义

void AC_SendMessage(u8 *pu8Msg, u16 u16DataLen)

函数实现

void AC_SendMessage(u8 *pu8Msg, u16 u16DataLen)
{
    u8 u8MagicHead[4] = {0x02,0x03,0x04,0x05};
    IntMasterDisable();
    UartSend ( u8MagicHead,  sizeof(u8MagicHead));
    UartSend ( pu8Msg,  u16DataLen);
    IntMasterEnable();
}

说明:该函数实现串口的数据发送,在串口发送时,需要首先发送magic flag{0x02, 0x03, 0x04, 0x05}