- 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");
- }
- }
- }
- }
- }