Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MPU92502 Motor2 PIDonerobot Stepper mbed
esp8266.cpp
00001 #include "mbed.h" 00002 #include <string> 00003 00004 #define end "\r\n" 00005 00006 class esp8266 00007 { 00008 //AP アクセスポイント 00009 //ST client 00010 //APST Server and Client 00011 private: 00012 00013 Serial *Seri; 00014 char* buffer; 00015 int datalen; 00016 void strChack(char data[]) { 00017 int f = 0; 00018 for (;;) { 00019 if(f >= strlen(data)) 00020 { 00021 break; 00022 } 00023 char a=Seri->getc(); 00024 if(a!=data[f])f=0; 00025 else f++; 00026 00027 } 00028 wait(0.1); 00029 } 00030 void Reception() { 00031 00032 char inputData[100]; 00033 Seri->scanf("%s",inputData); 00034 //Serial pc(USBTX,USBRX); 00035 //pc.baud(115200); 00036 //pc.printf("%s\r\n",inputData); 00037 if(strstr(inputData,"+IPD,")==NULL) { 00038 /* 00039 if(strcmp(x,"0,CONNECT")==0)break; 00040 if(strcmp(x,"0,CLOSED")==0)break; 00041 if(strcmp(x,">")==0)break;*/ 00042 } else { 00043 strtok(inputData,","); 00044 strtok(NULL,":"); 00045 char *data = strtok(NULL,","); 00046 strtok(inputData,","); 00047 char *data_num = strtok(NULL,","); 00048 datalen = atoi(data_num); 00049 buffer=data; 00050 //data = strtok(x,""); 00051 //buffer = data; 00052 //pc.printf("%s , %s , %s\r\n",y,data_num,data); 00053 } 00054 } 00055 bool check() { 00056 00057 //Serial pc(USBTX,USBRX); 00058 //pc.baud(115200); 00059 Seri->printf(end); 00060 bool f = false,ans; 00061 int i=0; 00062 while(1) { 00063 char x = Seri->getc(); 00064 //pc.putc(x); 00065 if(x=='O')f=true; 00066 else if(x=='K'&&f==true) { 00067 ans=true; 00068 break; 00069 } else f=false; 00070 00071 if(x=='F')i=1; 00072 else if(x=='A'&&i==1)i=2; 00073 else if(x=='I'&&i==2)i=3; 00074 else if(x=='L'&&i==3) { 00075 ans=false; 00076 break; 00077 } else i=0; 00078 00079 } 00080 wait(0.1); 00081 return ans; 00082 } 00083 bool connected; 00084 public: 00085 char* get_data(char *datax,int num) { 00086 get: 00087 char x[num+2]; 00088 Seri->scanf("%s",x); 00089 //Serial pc(USBTX,USBRX); 00090 //pc.baud(115200); 00091 if(strstr(x,"+IPD,")==NULL) { 00092 00093 return NULL; 00094 /* 00095 if(strcmp(x,"0,CONNECT")==0)break; 00096 if(strcmp(x,"0,CLOSED")==0)break; 00097 if(strcmp(x,">")==0)break;*/ 00098 } else { 00099 00100 strtok(x,","); 00101 strtok(NULL,":"); 00102 datax = strtok(NULL,","); 00103 strtok(x,","); 00104 char *data_num = strtok(NULL,","); 00105 char len = atoi(data_num); 00106 00107 if(strcmp(datax,"\r\n")==0)goto get; 00108 else if(len > num)return NULL; 00109 //for(int i=0;i<len;i++) 00110 // *datax++=*data++; 00111 //printf("%s\r\n",datax); 00112 return datax; 00113 //data = strtok(x,""); 00114 //buffer = data; 00115 //pc.printf("%s , %s , %s\r\n",y,data_num,data); 00116 } 00117 } 00118 bool sleep(int mode) { 00119 Seri->printf("AT+SLEEP=%d",mode); 00120 return check(); 00121 } 00122 bool deepsleep(int ms) { 00123 Seri->printf("AT+GSLP=%d",ms); 00124 return check(); 00125 } 00126 bool httpAccess(char* mode,char* url,int port=80) { 00127 if(connected==false)return false; 00128 Seri->printf("AT+CIPSTART=\"%s\",\"%s\",%d",mode,url,port); 00129 return check(); 00130 } 00131 bool httpAccess(char id,char* url,char* mode = "TCP",int port=80) { 00132 if(connected==false)return false; 00133 Seri->printf("AT+CIPSTART=\"%d\",\"%s\",\"%s\",%d",id,mode,url,port); 00134 return check(); 00135 } 00136 bool Disconnection(int id = 0) 00137 { 00138 printf("AT+CIPCLOSE==%d",id); 00139 return check(); 00140 } 00141 void prompt() { 00142 Seri->attach(this,&esp8266::Reception); 00143 } 00144 //Seri->printf("AT+CIPSTA_CUR=\"%s\",\"%s\",\"%s\"",IP,gateway,netmask); 00145 bool setDHCP(int mode,int en) { 00146 DHCPMode = mode; 00147 DHCPenable = en; 00148 printf("AT+CWDHCP_CUR=%d,%d",mode,en); 00149 return check(); 00150 } 00151 bool send( int num,char* data,int id) { 00152 if(connected==false)return false; 00153 Seri->printf("AT+CIPSEND=%d,%d",id,num+2); 00154 check(); 00155 wait(0.01); 00156 while(1) { 00157 char i = Seri->getc(); 00158 if(i=='>')break; 00159 } 00160 Seri->printf("%s",data); 00161 Seri->printf("\r\n"); 00162 return check(); 00163 } 00164 00165 bool multipull(int i) { 00166 Seri->printf("AT+CIPMUX=%d",i); 00167 return check(); 00168 } 00169 void reset() { 00170 Seri->printf("AT+RST\r\n"); 00171 strChack("ready"); 00172 wait(0.1); 00173 } 00174 void serverCreate(int mode,int port) { 00175 Seri->printf("AT+CIPSERVER=%d,%d",mode,port); 00176 check(); 00177 wait(0.1); 00178 /*printf("\r\nwait connection\r\n"); 00179 while(1) { 00180 char x[10]; 00181 Seri->scanf("%s",x); 00182 if(strcmp(x,"0,CONNECT")==0)break; 00183 }*/ 00184 //printf("\r\OK\r\n"); 00185 } 00186 void serverTimeOutSet(int time = 60) 00187 { 00188 Seri->printf("AT+CIPSTO=%d",time); 00189 check(); 00190 } 00191 00192 bool accesspoint() { 00193 Seri->printf("AT+CWLAP\r\n"); 00194 return check(); 00195 } 00196 00197 bool wifiSoftAPSetting(const char* ssid,const char* password,int ch,int ecn) { 00198 if(connectmode==AP||connectmode==APST) 00199 Seri->printf("AT+CWSAP_CUR=\"%s\",\"%s\",%d,%d",ssid,password,ch,ecn); 00200 else false; 00201 return check(); 00202 } 00203 bool wifiConnectionMode(int mode) { 00204 connectmode=mode; 00205 Seri->printf("AT+CWMODE_CUR=%d",mode); 00206 return check(); 00207 } 00208 bool wifiDisconnect() { 00209 Seri->printf("AT+CWQAP"); 00210 connected=false; 00211 return check(); 00212 } 00213 bool WifiFindAccesspoint(const char *wifi) { 00214 Seri->printf("AT+CWLAP=\"%s\""); 00215 return check(); 00216 } 00217 bool WifiFindAccesspoint() { 00218 Seri->printf("AT+CWLAP"); 00219 return check(); 00220 } 00221 bool wifiConnect(const char* ssid,const char* password) { 00222 Seri->printf("AT+CWJAP_CUR=\"%s\",\"%s\"",ssid,password); 00223 connected|=check(); 00224 //if(connected==false)return false; 00225 //Seri->printf("AT+CIFSR"); 00226 //check(); 00227 return connected; 00228 } 00229 bool wifiSoftAPFromIP() { 00230 if(connectmode == ST) return false; 00231 Seri->printf("AT+CWLIF"); 00232 return check(); 00233 } 00234 bool setSTMACAddress(char addr[6]) 00235 { 00236 Seri->printf("AT+CIPSTART_CUR=\"%2x:%2x:%2x:%2x:%2x:%2x\"",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); 00237 return check(); 00238 } 00239 bool setAPMACAddress(char addr[6]) 00240 { 00241 Seri->printf("AT+CIPAPMAC_CUR=\"%2x:%2x:%2x:%2x:%2x:%2x\"",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); 00242 return check(); 00243 } 00244 bool setSTIPAddress(char addr[4]) 00245 { 00246 Seri->printf("AT+CIPSTA_CUR=\"%3d:%3d:%3d:%3d\"",addr[0],addr[1],addr[2],addr[3]); 00247 return check(); 00248 } 00249 bool setAPIPAddress(char addr[4]) 00250 { 00251 Seri->printf("AT+CIPAP_CUR=\"%3d:%3d:%3d:%3d\"",addr[0],addr[1],addr[2],addr[3]); 00252 return check(); 00253 } 00254 00255 00256 00257 bool ATcommand(const char* cmd) { 00258 char a[20] = ""; 00259 strcat(a,"AT"); 00260 strcat(a,cmd); 00261 Seri->printf(a); 00262 return check(); 00263 } 00264 const char AP=2; 00265 const char ST=1; 00266 const char APST=3; 00267 char connectmode; 00268 char DHCPMode; 00269 char DHCPenable; 00270 esp8266(){ 00271 connected=false; 00272 00273 DHCPMode = 0; 00274 DHCPenable = 1; 00275 //Seri = ser; 00276 //Seri->printf("AT\r\n"); 00277 00278 //strChack("OK"); 00279 //reset(); 00280 wait(0.5); 00281 } 00282 void setSerial(Serial *ser) 00283 { 00284 Seri = ser; 00285 00286 //Seri->printf("AT\r\n"); 00287 00288 //strChack("OK"); 00289 } 00290 };
Generated on Sat Jul 16 2022 02:58:16 by
1.7.2