总体方案说明
方案介绍
智能灯演示系统由一个wifi开发板,一个ARM开发板(含一个LED灯)组成。它具备如下几个功能:
(1)该设备接收云端的控制,打开和关闭LED灯。
(2)提供机械开关进行手动开关功能。
(3)支持云端查询当前状态。
实现方案
总体方案介绍
wifi开发板和Arm开发板之间通过串口相连,wifi开发板上由一个wifi模块,负责和云端交互,并将云端的数据通过串口转发给ARM开发板。
ARM开发板上主体部分是一个MCU和一个LED,其余部分是一个一些按键和指示灯。主控MCU采用TI的ARM Cortex M4芯片。主控MCU和LED灯之间采用GPIO控制。
交互流程图
实现说明
- 设备控制消息接口处理
函数定义
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灯控制流程。
- 通知类型消息接口处理
函数定义
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,这些消息用户需要自行存储。
- 串口数据发送接口实现
函数定义
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}