国内综合精彩aⅤ无码不卡_日本少妇做爰全过程_欧美性爱在线播放免费_午夜?V日韩一区二区_免费a级毛片无码免费播放_成在人线av无码喷水_亚洲精品网站色视频_国产婷婷精品成人_老师撩起裙子让我桶的视频_秋霞影院国产

STM32F4跑u/cosii 配合AT指令保持在線并控制設(shè)備。

作者:xyy840948307 | 更新時(shí)間:2016-08-02 | 瀏覽量:5305

#include "common.h"
#include "HC74HC.h"
#include "24cxx.h" 
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
//ALIENTEK STM32開(kāi)發(fā)板
//ATK-ESP8266 WIFI模塊 公用驅(qū)動(dòng)代碼   
//正點(diǎn)原子@ALIENTEK
//技術(shù)論壇:www.openedv.com
//修改日期:2014/4/3
//版本:V1.0
//版權(quán)所有,盜版必究。
//Copyright(C) 廣州市星翼電子科技有限公司 2009-2019
//All rights reserved  
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//用戶配置區(qū)
const u8* reply0="無(wú)法識(shí)別的指令";
const u8* reply1="屏幕已開(kāi)";
const u8* reply2="屏幕已關(guān)";
const u8* reply3="燈已打開(kāi)";
const u8* reply4="燈已關(guān)閉";
const u8* reply9="燈已打開(kāi)10s";
const u8* reply10="蜂鳴器開(kāi)啟1s";
//用戶配置區(qū)
//const u8* esp8266_="{\"M\":\"say\",\"ID\":\"U397\",\"C\":\"LED OK\\u6536\\u5230\\u6570\\u636e\",\"SIGN\":\"123\"}";//路由器SSID號(hào)
const u8* esp8266_="{\"M\":\"say\",\"ID\":\"U397\",\"C\":\"LED OK收到數(shù)據(jù)\",\"SIGN\":\"123\"}";//路由器SSID號(hào)
//連接端口號(hào):8086,可自行修改為其他端口.apiKey
_ESP8266 ESP8266;  
//連接端口號(hào):8086,可自行修改為其他端口.apiKey
const u8* portnum="8086"; 
//bigiod_ip和端口
const u8* bigiod_ip="m.placeboworld.cn";//路由器SSID號(hào)device
const u8* bigiod_portnum="8181";//wpa/wpa2 aes加密方式
//bigiod登錄指令
const u8* bigiod_ID="398";//wpa/wpa2 aes加密方式
const u8* bigiod_apiKey="d12a86c9d";//wpa/wpa2 aes加密方式
//WIFI STA模式,設(shè)置要去連接的路由器無(wú)線參數(shù),請(qǐng)根據(jù)你自己的路由器設(shè)置,自行修改.
const u8* wifista_ssid="cengnimabi";//路由器SSID號(hào)
const u8* wifista_encryption="wpawpa2_aes";//wpa/wpa2 aes加密方式
const u8* wifista_password="Jang@Luo?515@Zhou"; //連接密碼
//WIFI AP模式,模塊對(duì)外的無(wú)線參數(shù),可自行修改.
const u8* wifiap_ssid="XYY-ESP8266";//對(duì)外SSID號(hào)
const u8* wifiap_encryption="wpawpa2_aes";//wpa/wpa2 aes加密方式
const u8* wifiap_password="12345678"; //連接密碼 
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//4個(gè)網(wǎng)絡(luò)模式
const u8 *ATK_ESP8266_CWMODE_TBL[3]={"STA模式 ","AP模式 ","AP&STA模式 "};//ATK-ESP8266,3種網(wǎng)絡(luò)模式,默認(rèn)為路由器(ROUTER)模式 
//4種工作模式
const u8 *ATK_ESP8266_WORKMODE_TBL[3]={"TCP服務(wù)器","TCP客戶端"," UDP 模式"};//ATK-ESP8266,4種工作模式
//5種加密方式
const u8 *ATK_ESP8266_ECN_TBL[5]={"OPEN","WEP","WPA_PSK","WPA2_PSK","WPA_WAP2_PSK"};
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//usmart支持部分
//將收到的AT指令應(yīng)答數(shù)據(jù)返回給電腦串口
//mode:0,不清零USART2_RX_STA;
//     1,清零USART2_RX_STA;
void atk_8266_at_response(u8 mode)
{
if(USART2_RX_STA&0X8000)//接收到一次數(shù)據(jù)了
{ 
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結(jié)束符
printf("%s\r\n\r\n",USART2_RX_BUF);//發(fā)送到串口
if(mode)USART2_RX_STA=0;
} 
}
//ATK-ESP8266??????
//???:0,????;
//       1,????
u8 atk_8266_quit_trans(void)
{
while((USART2->SR&0X40)==0);//?????
USART2->DR='+';      
delay_ms(15);//????????(10ms)
while((USART2->SR&0X40)==0);//?????
USART2->DR='+';      
delay_ms(15);//????????(10ms)
while((USART2->SR&0X40)==0);//?????
USART2->DR='+';      
delay_ms(500);//??500ms
return atk_8266_send_cmd("AT","OK",20);//??????.
}
//ATK-ESP8266發(fā)送命令后,檢測(cè)接收到的應(yīng)答
//str:期待的應(yīng)答結(jié)果
//返回值:0,沒(méi)有得到期待的應(yīng)答結(jié)果
//    其他,期待應(yīng)答結(jié)果的位置(str的位置)
u8* atk_8266_check_cmd(u8 *str)
{
char *strx=0;
if(USART2_RX_STA&0X8000)//接收到一次數(shù)據(jù)了
{ 
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結(jié)束符
strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
} 
return (u8*)strx;
}
//向ATK-ESP8266發(fā)送命令
//cmd:發(fā)送的命令字符串
//ack:期待的應(yīng)答結(jié)果,如果為空,則表示不需要等待應(yīng)答
//waittime:等待時(shí)間(單位:10ms)
//返回值:0,發(fā)送成功(得到了期待的應(yīng)答結(jié)果)
//       1,發(fā)送失敗
u8 atk_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
u8 res=0; 
USART2_RX_STA=0;
u2_printf("%s\r\n",cmd);//發(fā)送命令
if(ack&&waittime)//需要等待應(yīng)答
{
while(--waittime)//等待倒計(jì)時(shí)
{
delay_ms(10);
if(USART2_RX_STA&0X8000)//接收到期待的應(yīng)答結(jié)果
{
if(atk_8266_check_cmd(ack))
{
//printf("ack:%s\r\n",(u8*)ack);
break;//得到有效數(shù)據(jù) 
}
USART2_RX_STA=0;
} 
}
if(waittime==0)res=1; 
}
return res;
} 
//向ATK-ESP8266發(fā)送指定數(shù)據(jù)
//data:發(fā)送的數(shù)據(jù)(不需要添加回車了)
//ack:期待的應(yīng)答結(jié)果,如果為空,則表示不需要等待應(yīng)答
//waittime:等待時(shí)間(單位:10ms)
//返回值:0,發(fā)送成功(得到了期待的應(yīng)答結(jié)果)luojian
u8 atk_8266_send_data(u8 *data,u8 *ack,u16 waittime)
{
u8 res=0; 
USART2_RX_STA=0;
u2_printf("%s",data);//發(fā)送命令
if(ack&&waittime)//需要等待應(yīng)答
{
while(--waittime)//等待倒計(jì)時(shí)
{
delay_ms(10);
if(USART2_RX_STA&0X8000)//接收到期待的應(yīng)答結(jié)果
{
if(atk_8266_check_cmd(ack))break;//得到有效數(shù)據(jù) 
USART2_RX_STA=0;
} 
}
if(waittime==0)res=1; 
}
return res;
}
////wifi帳號(hào)密碼設(shè)置
u8 ESP8266_init(void)
{
u8 *p,*wifi_ssid,*wifi_password;
  u8  k=0;
  wifi_ssid=mymalloc(SRAMIN,50);//申請(qǐng)32字節(jié)內(nèi)存
  wifi_password=mymalloc(SRAMIN,50);//申請(qǐng)32字節(jié)內(nèi)存
  AT24CXX_Read(400,wifi_ssid,50);
  AT24CXX_Read(450,wifi_password,50);
  LCD_ShowString(5,285,240,16,16,wifi_ssid,0);
  LCD_ShowString(5,305,240,16,16,wifi_password,0);
  
  //ESP8266.wifista_ssid=(u8* )wifista_ssid, ESP8266.wifista_password=(u8* )wifista_password;
  ESP8266.wifista_ssid=(u8* )wifi_ssid;
  ESP8266.wifista_password=(u8* )wifi_password;
  
while(atk_8266_send_cmd("AT","OK",20))//檢查WIFI模塊是否在線
{
atk_8266_quit_trans();//退出透?jìng)?
atk_8266_send_cmd("AT+CIPMODE=0","OK",200);  //關(guān)閉透?jìng)髂J?
  delay_ms(10);
  } 
  while(atk_8266_send_cmd("ATE0","OK",20));//關(guān)閉回顯
p=mymalloc(SRAMIN,64);//申請(qǐng)32字節(jié)內(nèi)存
atk_8266_send_cmd("AT+CWMODE=1","OK",50);//設(shè)置WIFI STA模式
atk_8266_send_cmd("AT+RST","OK",20);//DHCP服務(wù)器關(guān)閉(僅AP模式有效) 
delay_ms(3000);         //延時(shí)3S等待重啟成功
printf("正在獲取IP\r\n");
  sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",ESP8266.wifista_ssid,ESP8266.wifista_password);//設(shè)置無(wú)線參數(shù):ssid,密碼
if(atk_8266_send_cmd(p,"WIFI CONNECTED",500)==0)goto AA25;//連接目標(biāo)路由器,并且獲得IP//
if(atk_8266_send_cmd(p,"WIFI GOT IP",500)==0)    goto AA25;//連接目標(biāo)路由器,并且獲得IP//
  k=1,  printf("獲取IP失敗\r\n");
  goto AA24;
  
  AA25://WIFI獲得IP
  printf("獲取IP成功\r\n");
  delay_ms(1000);
  atk_8266_send_cmd("AT+CIPMUX=0","OK",200);   //0:?jiǎn)芜B接,1:多連接
  
  printf("正在連接!\r\n");
  sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",(u8*)bigiod_ip,(u8*)bigiod_portnum);    //配置目標(biāo)TCP服務(wù)器
  if(atk_8266_send_cmd(p,"WELCOME TO BIGIOT",200)==0) goto AA26; //得到有效數(shù)據(jù)
  if(atk_8266_send_cmd(p,"ALREADY CONNECTED",200)==0) goto AA26; //得到有效數(shù)據(jù)
  k=1;  printf("連接失敗!\r\n");
  goto AA24;//連接失敗跳轉(zhuǎn)到末尾
  
  AA26:  
  printf("連接成功!\r\n");
  atk_8266_send_cmd("AT+CIPMODE=1","OK",20);      //傳輸模式為:透?jìng)?
  atk_8266_send_cmd("AT+CIPSEND",">",20);         //開(kāi)始透?jìng)?nbsp;          
  delay_ms(500);
  k=ESP8266_login();
  AA24:
  myfree(SRAMIN,wifi_password); //釋放32字節(jié)內(nèi)存
  myfree(SRAMIN,wifi_ssid); //釋放32字節(jié)內(nèi)存
  myfree(SRAMIN,p); //釋放32字節(jié)內(nèi)存
  if(k==0) ESP8266.DISCONNECT_T=0;
  return k ;
}
//ATK-ESP8266初始化函數(shù)
u8 ESP8266_connect(void)
{
u8 *ser;
  u8  k;
while(atk_8266_send_cmd("AT","OK",20))//檢查WIFI模塊是否在線
{
atk_8266_quit_trans();//退出透?jìng)?
  delay_ms(10);
  } 
ser=mymalloc(SRAMIN,64);        //申請(qǐng)32字節(jié)內(nèi)存
atk_8266_send_cmd("AT+CWMODE=1","OK",50);//設(shè)置WIFI STA模式
atk_8266_send_cmd("AT+RST","OK",20);    //DHCP服務(wù)器關(guān)閉(僅AP模式有效) 
delay_ms(5000);                             //延時(shí)3S等待重啟成功
  k=1,printf("正在連接?。。r\n");
  sprintf((char*)ser,"AT+CIPSTART=\"TCP\",\"%s\",%s",(u8*)bigiod_ip,(u8*)bigiod_portnum);    //配置目標(biāo)TCP服務(wù)器
  if(atk_8266_send_cmd(ser,"CONNECT",200)==0) goto AA22; //得到有效數(shù)據(jù)
  if(atk_8266_send_cmd(ser,"ALREADY CONNECTED",200)==0) goto AA22; //得到有效數(shù)據(jù)
  if(atk_8266_send_cmd(ser,"WELCOME TO BIGIOT",200)==0) goto AA22; //得到有效數(shù)據(jù)
  if(atk_8266_send_cmd(ser,"no ip",100)==0)    ESP8266.enforce=5,k=2;  //無(wú)IP需要立即進(jìn)行初始化操作,強(qiáng)制初始化
  printf("連接失敗?。。r\n");
  goto AA21;//連接失敗跳轉(zhuǎn)到末尾
  
  AA22:  
  k=0,printf("連接成功?。?!\r\n");
  atk_8266_send_cmd("AT+CIPMODE=1","OK",20);      //傳輸模式為:透?jìng)?
  atk_8266_send_cmd("AT+CIPSEND",">",20);         //開(kāi)始透?jìng)?nbsp;          
  delay_ms(500);
  k=ESP8266_login();  //登錄
  AA21:
  myfree(SRAMIN,ser); //釋放32字節(jié)內(nèi)存connected
  if(k==0) ESP8266.DISCONNECT_T=0;
  return k ;
}
//登錄貝殼服務(wù)器函數(shù)
u8 ESP8266_login(void)
{
u8 *p,*str;
  u8  k=0,n;
  p=mymalloc(SRAMIN,64);        //申請(qǐng)32字節(jié)內(nèi)存
  str=mymalloc(SRAMIN,32);        //申請(qǐng)32字節(jié)內(nèi)存
  sprintf((char*)p,"{\"M\":\"checkin\",\"ID\":\"%s\",\"K\":\"%s\"}",bigiod_ID,(u8*)bigiod_apiKey);//登錄指令
  sprintf((char*)str,"\"ID\":\"D%s\"",bigiod_ID);//登錄指令
  
  AA27:
  n=12;
  printf("登錄\r\n");
  while(n) 
  {
     if(atk_8266_send_cmd(p,str,200)==0)  break;
     n--;
  }
  if(n==0) 
  {
     k=1,printf("登錄失敗???\r\n");
     if(ESP8266_check("connected")==0)    goto  AA27;
  }
  else  k=0,printf("登錄成功?。?!\r\n");
  
  myfree(SRAMIN,str); //釋放32字節(jié)內(nèi)存connected
  myfree(SRAMIN,p); //釋放32字節(jié)內(nèi)存connected
  if(k==0) ESP8266.DISCONNECT_T=0;
  return k ;
}
//ATK-ESP8266初始化函數(shù)
void SetWifi_IdPass(u8 *wifiId,u8 *Pass)
{
u8 *wifitemp;
  u8  n=0;
  wifitemp=wifiId;
  while(*wifitemp)
  {
     n++;
     wifitemp++;
     if(n>=49) 
     {
        *wifitemp=0;  //超過(guò)最大計(jì)數(shù)強(qiáng)制添加結(jié)束符號(hào)
        break;
     }
  }
  AT24CXX_Write(400,wifiId,n+1); //結(jié)束符號(hào)同時(shí)存入AT24,方便讀取結(jié)束符號(hào)
  n=0;
  wifitemp=Pass;
  while(*wifitemp)
  {
     n++;
     wifitemp++;
     if(n>=49) 
     {
        *wifitemp=0;  //超過(guò)最大計(jì)數(shù)強(qiáng)制添加結(jié)束符號(hào)
        break;
     }  
  }
  AT24CXX_Write(450,Pass,n+1); //結(jié)束符號(hào)同時(shí)存入AT24,方便讀取結(jié)束符號(hào)
  ESP8266.enforce=5;           //強(qiáng)制ESP8266進(jìn)行初始化
}
//ATK-ESP8266初始化函數(shù)
u8 ESP8266_check(u8* str)
{
  u8 k;
  k=atk_8266_send_cmd("{\"M\":\"status\"}",(u8*)str,200);//檢測(cè)心跳
  return k ;
}
//ESP8266檢查保持在線函數(shù),單位S,內(nèi)部已經(jīng)延時(shí)45s,未登錄內(nèi)部循環(huán)10s。
void ESP8266_hold(void)
{
  u8 k;
  AA18:
  ESP8266.status=8;//默認(rèn)有心跳
  
  k=ESP8266_check("checked");//檢測(cè)心跳
  if(k==0)                             ESP8266.DISCONNECT_T=0;    //有心跳
  if((k!=0)&&(ESP8266.DISCONNECT_T==0))
  {
     ESP8266.DISCONNECT_T++;    //無(wú)心跳計(jì)時(shí)
     ESP8266.DISCONNECT_C++;    //掉線次數(shù)+1
  }
  
  if(ESP8266.DISCONNECT_T>60)          ESP8266.status=7;//無(wú)心跳需要重新登錄
  if(ESP8266.DISCONNECT_T>300)         ESP8266.status=6;//無(wú)心跳需要重新連接
  if(ESP8266.DISCONNECT_T>600)         ESP8266.status=5;//無(wú)心跳需要重新初始化
  if(ESP8266.enforce)                  ESP8266.status=ESP8266.enforce;//強(qiáng)制選項(xiàng)條件
  if(ESP8266.enforce)                  ESP8266.DISCONNECT_T++;    //無(wú)心跳計(jì)時(shí)
  if(ESP8266.enforce)                  ESP8266.enforce=0;//強(qiáng)制選項(xiàng)條件清空
  //選擇操作內(nèi)容
  switch(ESP8266.status)
  {
    case 5: 
            while(ESP8266_init()) 
            {
              delay_ms(30000); 
              if(ESP8266_check("checked")==0) goto  AA18 ;//檢測(cè)心跳
              delay_ms(30000); 
            }
            goto  AA18 ; 
    case 6: 
            ESP8266_connect();// 超過(guò)300s重新連接服務(wù)器
            delay_ms(10000);
            goto  AA18 ; 
    case 7: 
            if(ESP8266_login()==0)   ESP8266.status=8;//檢查不在線,重新登錄deng
            delay_ms(5000);
            break; 
    case 8: 
            delay_ms(45000);
            break; 
    default:
            break;
  }
  if(ESP8266.status!=8)  
  {
     delay_ms(3000);
     goto  AA18 ;
  }
}
//ESP8266接收數(shù)據(jù)后,
//str:期待的應(yīng)答結(jié)果
//返回值:0,返回相應(yīng)的結(jié)果
// 其他,期待應(yīng)答結(jié)果的位置(str的位置)
u16 ESP8266_search(void)
{
u8 res=0,strN; 
u8 *p,*p2,*strA,*strB,*reply;
  p=mymalloc(SRAMIN,100);        //申請(qǐng)100字節(jié)內(nèi)存
  p2=mymalloc(SRAMIN,100);        //申請(qǐng)100字節(jié)內(nèi)存
  if(USART2_RX_STA&0X8000)//接收到期待的應(yīng)答結(jié)果
  {
    //判斷指令類型
    if(atk_8266_check_cmd("\"M\":\"login\""))    res=login; //檢查上線
    if(atk_8266_check_cmd("\"M\":\"logout\""))   res=logout; //檢查下線
    if(atk_8266_check_cmd("\"M\":\"say\""))      res=say; //檢查對(duì)話
    //跳轉(zhuǎn)類型操作
    switch(res)
    {
      case login:
          res=0;
          if(atk_8266_check_cmd("\"xyy840948307(web)\""))    ESP8266.xyy_web_login=1; //檢查上線
          if(atk_8266_check_cmd("\"xyy840948307(wx)\""))     ESP8266.xyy_wx_login=1; //檢查上線
          if(atk_8266_check_cmd("\"guest\""))                ESP8266.guest_login=1; //檢查上線
          break; 
      case logout:
          res=0;
          if(atk_8266_check_cmd("\"xyy840948307(web)\""))    ESP8266.xyy_web_logout=1; //檢查下線
          if(atk_8266_check_cmd("\"xyy840948307(wx)\""))     ESP8266.xyy_wx_logout=1; //檢查下線
          if(atk_8266_check_cmd("\"guest\""))                ESP8266.guest_logout=1; //檢查下線
          break; 
      case say:
          res=0;
          if(atk_8266_check_cmd("\"xyy840948307(wx)\""))     res=xyy840948307wx;//檢查下線
          if(atk_8266_check_cmd("\"xyy840948307(web)\""))    res=xyy840948307web; //檢查下線
          if(atk_8266_check_cmd("\"guest\""))                res=guest; //檢查下線
          res=1; //強(qiáng)制
          goto AA10; 
          
      default:
          res=0;
          break;
    }
    goto AA20; //無(wú)命令,跳轉(zhuǎn)到文末
    AA10://say對(duì)話操作
    reply=(u8*)reply0;
    switch(res)
    {
      case xyy840948307wx://微信對(duì)話,命令字符在“C” 和“T” 之間
          res=0;
          strA=atk_8266_check_cmd("\"C\"")+5   ; //檢查命令字符第一個(gè)字符位置, 向右偏移5個(gè)字節(jié)
          strB=atk_8266_check_cmd("\"T\"")-3   ; //檢查命令字符最后一個(gè)個(gè)字符位置, 向左偏移3個(gè)字節(jié)
          strN=strB-strA+1;                      //加1是防止最后一個(gè)字符丟失
          memcpy(p,strA,strN);                   //復(fù)制字符串
          p[strN]=0;                             //添加結(jié)束符
          order2str(p);
          printf("%s\r\n",(u8*) p);//發(fā)送到串口  "\u52a0\u6cb9" 
          strN=0;
          if(strstr((const char*)p,(const char*)"開(kāi)燈"))       strN=1;
          if(strstr((const char*)p,(const char*)"開(kāi)燈1"))      strN=1;
          if(strstr((const char*)p,(const char*)"繼電器開(kāi)"))   strN=1;
          if(strN)                                             K0.DO=1,reply=(u8*)reply3;
          strN=0;
          if(strstr((const char*)p,(const char*)"關(guān)燈"))       strN=1;
          if(strstr((const char*)p,(const char*)"關(guān)燈1"))      strN=1;
          if(strstr((const char*)p,(const char*)"繼電器關(guān)"))   strN=1;
          if(strN)                                             K0.DO=0,reply=(u8*)reply4;
          
          strN=0;
          if(strstr((const char*)p,(const char*)"屏幕開(kāi)"))     strN=1;
          if(strstr((const char*)p,(const char*)"up"))         strN=1;
          if(strN)                        LCD_ON,LCD_ONT=30000,reply=(u8*)reply1;
          
          strN=0;
          if(strstr((const char*)p,(const char*)"屏幕關(guān)"))     strN=1;
          if(strstr((const char*)p,(const char*)"down"))       strN=1;
          if(strN)                                             LCD_OFF,reply=(u8*)reply2;
          
          strN=0;
          if(strstr((const char*)p,(const char*)"喇叭"))       strN=1;
          if(strstr((const char*)p,(const char*)"蜂鳴器"))     strN=1;
          if(strstr((const char*)p,(const char*)"報(bào)警"))       strN=1;
          if(strN)                                             Beep_T=2000 ,reply=(u8*)reply10;
          
          if(strstr((const char*)p,(const char*)"offOn"))  K0.DO=!K0.DO, K0.TN=10000 ,reply=(u8*)reply9;
          if(strstr((const char*)p,(const char*)"play"))   Beep_T=1000 ,reply=(u8*)reply10;
          
          sprintf((char*)p2,"{\"M\":\"say\",\"ID\":\"U397\",\"C\":\"%s\",\"SIGN\":\"123\"}",(char*)reply);
          str2order(p2);
          atk_8266_send_cmd((u8*)p2,0,0);
          break; 
      case xyy840948307web://web對(duì)話
          res=0;
          break; 
      case guest://guest對(duì)話 R??
          res=0;
          break; 
      default:
          res=0;
          break;
    }
    AA20:
    USART2_RX_STA=0;
  } 
  myfree(SRAMIN,p); //釋放100字節(jié)內(nèi)存
  myfree(SRAMIN,p2); //釋放100字節(jié)內(nèi)存
  return 0;
}
void order2str(u8* str)
{
   u16 j=0,n=0,res;
   while(str[j]) //判斷索檢到末尾
   {
      if((str[j]=='\\')&&(str[j+1]=='u'))
      {
         if(str[j+2]<58) str[j+2]-=48;
         else            str[j+2]-=87;
         if(str[j+3]<58) str[j+3]-=48;
         else            str[j+3]-=87;
         if(str[j+4]<58) str[j+4]-=48;
         else            str[j+4]-=87;
         if(str[j+5]<58) str[j+5]-=48;
         else            str[j+5]-=87;
         str[n]=str[j+2]*16+str[j+3];
         str[n+1]=str[j+4]*16+str[j+5];
         res=(str[n]*256)+str[n+1];    //編碼求和
         res=ff_convert(res,0);        /* Converted code, 0 means conversion error */
         if(res<0x0100) res=0x3f3f;    //漢字編碼不能小于這個(gè)數(shù)
         str[n]=res>>8,str[n+1]=res;   //編碼分解
         n+=2,j+=6;
      }else
      {
         str[n]=str[j];
         n++,j++;
      }
   }
   str[n]=0; //索檢到末尾,添加結(jié)束符
}
//p;  j{"M":"say","ID":"U397","C":"LED OK收到數(shù)據(jù)","SIGN":"123"}
//str;n{"M":"say","ID":"U397","C":"LED OK\u6536\u5230\u6570\u636e","SIGN":"123"}
void str2order(u8* str)
{
   u16 j=0,n=0,res;
   u8 *p;
   p=mymalloc(SRAMIN,100);        //申請(qǐng)100字節(jié)內(nèi)存
   strcpy((char*)p,(char*)str);
   while(p[j]) //判斷索檢到末尾
   {
      if((p[j]&0x80)>0)
      {  
         str[n]='\\';
         str[n+1]='u';
         n+=2;
        
         res=(p[j]*256)+p[j+1];
         res=ff_convert(res,1);        /* Converted code, 0 means conversion error */
         p[j]=res>>8,p[j+1]=res;
        
         str[n]=p[j]>>4,str[n+1]=p[j]&0x0f;
         str[n+2]=p[j+1]>>4,str[n+3]=p[j+1]&0x0f;
        
         if(str[n]<10)   str[n]+=48;
         else            str[n]+=87;
         if(str[n+1]<10) str[n+1]+=48;
         else            str[n+1]+=87;
         if(str[n+2]<10) str[n+2]+=48;
         else            str[n+2]+=87;
         if(str[n+3]<10) str[n+3]+=48;
         else            str[n+3]+=87;
        
         n+=4,j+=2;
      }else
      {
         str[n]=p[j];
         n++,j++;
      }
   }
   str[n]=0; //索檢到末尾,添加結(jié)束符
   myfree(SRAMIN,p); //釋放100字節(jié)內(nèi)存
}
//UCOS2主程序調(diào)用任務(wù)//ESP8266
void ESP8266_hold_task(void *pdata)
{
  u8 *p;
  u8  n=0;
  
  ESP8266.DISCONNECT_T=1;                                  //開(kāi)機(jī)認(rèn)為已經(jīng)失聯(lián),設(shè)置超時(shí)狀態(tài)強(qiáng)制重連,需要讓其連接但不需要初始化。
  if(ESP8266_check("checked")==0) 
  {
     ESP8266.DISCONNECT_T=0;
     goto  AA16;
  }
  while(ESP8266_connect())                                 //開(kāi)機(jī)連接一次
  {
    n++;                                   //延時(shí)
    if(n>=3)   break;
  }
  
  AA16:
  delay_ms(12000);                //查詢不得小于10秒
  while(1)
  {
    ESP8266_hold(); //內(nèi)部集成延時(shí)45s,保持在線
    p=mymalloc(SRAMIN,40);        //申請(qǐng)32字節(jié)內(nèi)存
    Get_Temprate();
    sprintf((char*)p,"{\"M\":\"update\",\"ID\":\"393\",\"V\":{\"400\":\"%.2f\",\"401\":\"223\"}}",chip_Temprate);//登錄指令(float)chip_Temprate
    atk_8266_send_cmd(p,0,0);
    myfree(SRAMIN,p);  //內(nèi)存釋放(外部調(diào)用)
  }
 
}
//ESP8266//獲取微信或者貝殼APP發(fā)送的控制命令
void ESP8266_task(void *pdata)
{
  
  while(1)
  {
    ESP8266_search();
    
    delay_ms(100);
  }
 
}


工程文件:  STM32F4跑ucosii ,配合AT指令保持在線并控制設(shè)備。.7z  (用Keil 5打開(kāi))














評(píng)論:共3條

貝殼物聯(lián) 評(píng)論于:2016-06-18 21:19:35
是一個(gè)不錯(cuò)的想法-_-!!!
貝殼物聯(lián) 評(píng)論于:2016-08-02 09:59:33
多謝分享。。。
WECAN 評(píng)論于:2017-08-27 16:18:20
感謝樓主的分享啊!
返回頂部