int main()
{
uint8_t IpData[128];
int8_t temp;//检验热点是否连接成功,成功为1,失败为0
uint8_t TryCount=0;
RCC_Configuration(); //系统时钟初始化
TIM2_Init();
USART1_Init(115200);//串口一初始化
printf("init...\r\n");
UART4_Init(115200);//WiFi串口四初始化
for(TryCount=0; TryCount<3; TryCount++)//三次连接
{
printf("start link %d times.\r\n",TryCount+1);
temp=ConnectToServer((char *)MY_DEVICE_ID, (char *)MA_SECRET_KEY);//连接热点和服务器
if(temp != 0)//连接失败 temp = -1:WIFI模式设置错误 -2:WIFI连接错误 -3:端口或地址错误 -4:第一次握手数据发送错误 -5未响应错误
{
printf("Connect To Server ERROR=%d\r\n",temp);
}
else
{
break;
}
}
printf("link success\r\n");
ClrAtRxBuf();//清空AT缓存
//==================以上为WIFI连接函数===========================
while(1)
{
//===================以下为WIFI接收到云平台数据函数==================
if(F_AT_RX_FINISH)//判断是否接收到UART4_RX数据
{ // 接收到数据包
ESP8266_GetIpData((uint8_t *)AT_RX_BUF, (char *)IpData);//获取数据,存入IpData
USER_DataAnalysisProcess((char *)IpData);//分析数据,在这个函数里对数据进行处理
memset(IpData, 0x00, 128);//清空数据
ClrAtRxBuf();
}
///==================已下为WIFI发送单片机数据到云平台函数==================
if(TimeCount >= 1000)//10S发送一次数据 timeCount每计数100次代表1s
{
TimeCount=0;
ESP8266_SendSensor((char *)"wind", (char *)"2020-10-16 14:10:26", GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0));//发送数据函数,参数1标识名 参数二:时间 参数三:数据如温度,低频高低
ClrAtRxBuf();
}
}
}
//=================以下为分析函数具体实现============
void USER_DataAnalysisProcess(char *RxBuf)
{
char *cmdid = NULL;
uint8_t TxetBuf[128];//发送数据
if(strstr((const char *)RxBuf, (const char *)PING_REQ) != NULL)//心跳请求//strstr()查找子串在主串第一次出现的位置,判断是否收到数据
{
if(ESP8266_IpSend((char *)PING_RSP, strlen((const char *)PING_RSP)) < 0)//响应心跳
{//发送失败
printf("发送心跳包失败!\r\n");
}
else
{
printf("心跳包!\r\n");
}
}
else if(strstr((const char *)RxBuf, (const char *)"\"t\":5") != NULL)//命令请求//收到请求
{
if(strstr((const char *)RxBuf, (const char *)"\"apitag\":\"ctrl\"") != NULL)//判断收到的标识名
{
memset(TxetBuf,0x00,128);//清空缓存
///=====================操作代码书写区域=====================
//==============判断收到的数据,在里面执行需要的操作==============
if((strstr((const char *)RxBuf, (const char *)"\"data\":1") != NULL))
{
GPIO_SetBits(GPIOA,GPIO_Pin_0);
cmdid = USER_GetJsonValue((char *)RxBuf, (char *)"cmdid");
sprintf((char *)TxetBuf,"{\"t\":6,\"cmdid\":%s,\"status\":0,\"data\":1}",cmdid);
//printf("%s\r\n",TxetBuf);
if(ESP8266_IpSend((char *)TxetBuf, strlen((char *)TxetBuf)) < 0)
{//发送失败
//printf("发送响应失败!\r\n");
}
}
else if((strstr((const char *)RxBuf, (const char *)"\"data\":0") != NULL))//关灯
{
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
cmdid = USER_GetJsonValue((char *)RxBuf, (char *)"cmdid");
sprintf((char *)TxetBuf,"{\"t\":6,\"cmdid\":%s,\"status\":0,\"data\":0}",cmdid);
//printf("%s\r\n",TxetBuf);
if(ESP8266_IpSend((char *)TxetBuf, strlen((char *)TxetBuf)) < 0)
{//发送失败
printf("发送响应失败!\r\n");
}
}
}
}
}