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.
main.cpp
00001 #include "mbed.h" 00002 00003 #include <string> 00004 00005 DigitalOut myled(LED1); 00006 Serial esp(p13,p14); 00007 Serial pc(USBTX,USBRX); 00008 #define end "\r\n" 00009 00010 class esp8266 00011 { 00012 //AP アクセスポイント 00013 //ST client 00014 //APST Server and Client 00015 private: 00016 00017 DigitalOut myled; 00018 Serial *Seri; 00019 char* buffer; 00020 int datalen; 00021 void strChack(char data[]) { 00022 int f = 0; 00023 for (;;) { 00024 if(f == strlen(data)) 00025 { 00026 break; 00027 } 00028 char a=Seri->getc(); 00029 if(a!=data[f])f=0; 00030 else f++; 00031 00032 } 00033 wait(0.1); 00034 } 00035 void Reception() { 00036 00037 char inputData[100]; 00038 Seri->scanf("%s",inputData); 00039 myled=1; 00040 Serial pc(USBTX,USBRX); 00041 pc.baud(115200); 00042 pc.printf("%s\r\n",inputData); 00043 if(strstr(inputData,"+IPD,")==NULL) { 00044 /* 00045 if(strcmp(x,"0,CONNECT")==0)break; 00046 if(strcmp(x,"0,CLOSED")==0)break; 00047 if(strcmp(x,">")==0)break;*/ 00048 } else { 00049 strtok(inputData,","); 00050 strtok(NULL,":"); 00051 char *data = strtok(NULL,","); 00052 strtok(inputData,","); 00053 char *data_num = strtok(NULL,","); 00054 datalen = atoi(data_num); 00055 buffer=data; 00056 //data = strtok(x,""); 00057 //buffer = data; 00058 //pc.printf("%s , %s , %s\r\n",y,data_num,data); 00059 } 00060 myled=1; 00061 } 00062 bool check() { 00063 00064 Serial pc(USBTX,USBRX); 00065 pc.baud(115200); 00066 Seri->printf(end); 00067 bool f = false,ans; 00068 int i=0; 00069 while(1) { 00070 char x = Seri->getc(); 00071 pc.putc(x); 00072 if(x=='O')f=true; 00073 else if(x=='K'&&f==true) { 00074 ans=true; 00075 break; 00076 } else f=false; 00077 00078 if(x=='F')i=1; 00079 else if(x=='A'&&i==1)i=2; 00080 else if(x=='I'&&i==2)i=3; 00081 else if(x=='L'&&i==3) { 00082 ans=false; 00083 break; 00084 } else i=0; 00085 00086 } 00087 wait(0.1); 00088 return ans; 00089 } 00090 bool connected; 00091 public: 00092 char* get_data(char *datax,int num) { 00093 get: 00094 char x[num+2]; 00095 Seri->scanf("%s",x); 00096 myled=1; 00097 Serial pc(USBTX,USBRX); 00098 pc.baud(115200); 00099 if(strstr(x,"+IPD,")==NULL) { 00100 00101 return NULL; 00102 /* 00103 if(strcmp(x,"0,CONNECT")==0)break; 00104 if(strcmp(x,"0,CLOSED")==0)break; 00105 if(strcmp(x,">")==0)break;*/ 00106 } else { 00107 00108 strtok(x,","); 00109 strtok(NULL,":"); 00110 datax = strtok(NULL,","); 00111 strtok(x,","); 00112 char *data_num = strtok(NULL,","); 00113 char len = atoi(data_num); 00114 00115 if(strcmp(datax,"\r\n")==0)goto get; 00116 else if(len > num)return NULL; 00117 //for(int i=0;i<len;i++) 00118 // *datax++=*data++; 00119 //printf("%s\r\n",datax); 00120 return datax; 00121 //data = strtok(x,""); 00122 //buffer = data; 00123 //pc.printf("%s , %s , %s\r\n",y,data_num,data); 00124 } 00125 } 00126 bool sleep(int mode) { 00127 Seri->printf("AT+SLEEP=%d",mode); 00128 return check(); 00129 } 00130 bool deepsleep(int ms) { 00131 Seri->printf("AT+GSLP=%d",ms); 00132 return check(); 00133 } 00134 bool httpAccess(char* mode,char* url,int port=80) { 00135 if(connected==false)return false; 00136 Seri->printf("AT+CIPSTART=\"%s\",\"%s\",%d",mode,url,port); 00137 return check(); 00138 } 00139 bool httpAccess(char id,char* url,char* mode = "TCP",int port=80) { 00140 if(connected==false)return false; 00141 Seri->printf("AT+CIPSTART=\"%d\",\"%s\",\"%s\",%d",id,mode,url,port); 00142 return check(); 00143 } 00144 bool Disconnection(int id = 0) 00145 { 00146 printf("AT+CIPCLOSE==%d",id); 00147 return check(); 00148 } 00149 void prompt() { 00150 Seri->attach(this,&esp8266::Reception); 00151 } 00152 //Seri->printf("AT+CIPSTA_CUR=\"%s\",\"%s\",\"%s\"",IP,gateway,netmask); 00153 bool setDHCP(int mode,int en) { 00154 DHCPMode = mode; 00155 DHCPenable = en; 00156 printf("AT+CWDHCP_CUR=%d,%d",mode,en); 00157 return check(); 00158 } 00159 bool send( int num,char* data,int id) { 00160 if(connected==false)return false; 00161 Seri->printf("AT+CIPSEND=%d,%d",id,num+2); 00162 check(); 00163 wait(0.01); 00164 while(1) { 00165 char i = Seri->getc(); 00166 pc.putc(i); 00167 if(i=='>')break; 00168 } 00169 Seri->printf("%s",data); 00170 Seri->printf("\r\n"); 00171 return check(); 00172 } 00173 00174 bool multipull(int i) { 00175 Seri->printf("AT+CIPMUX=%d",i); 00176 return check(); 00177 } 00178 void reset() { 00179 Seri->printf("AT+RST\r\n"); 00180 strChack("ready"); 00181 wait(0.1); 00182 } 00183 void serverCreate(int mode,int port) { 00184 Seri->printf("AT+CIPSERVER=%d,%d",mode,port); 00185 check(); 00186 wait(0.1); 00187 /*printf("\r\nwait connection\r\n"); 00188 while(1) { 00189 char x[10]; 00190 Seri->scanf("%s",x); 00191 if(strcmp(x,"0,CONNECT")==0)break; 00192 }*/ 00193 printf("\r\OK\r\n"); 00194 } 00195 void serverTimeOutSet(int time = 60) 00196 { 00197 Seri->printf("AT+CIPSTO=%d",time); 00198 check(); 00199 } 00200 00201 bool accesspoint() { 00202 Seri->printf("AT+CWLAP\r\n"); 00203 return check(); 00204 } 00205 00206 bool wifiSoftAPSetting(const char* ssid,const char* password,int ch,int ecn) { 00207 if(connectmode==AP||connectmode==APST) 00208 Seri->printf("AT+CWSAP_CUR=\"%s\",\"%s\",%d,%d",ssid,password,ch,ecn); 00209 else false; 00210 return check(); 00211 } 00212 bool wifiConnectionMode(int mode) { 00213 connectmode=mode; 00214 Seri->printf("AT+CWMODE_CUR=%d",mode); 00215 return check(); 00216 } 00217 bool wifiDisconnect() { 00218 Seri->printf("AT+CWQAP"); 00219 connected=false; 00220 return check(); 00221 } 00222 bool WifiFindAccesspoint(char *wifi) { 00223 Seri->printf("AT+CWLAP=\"%s\""); 00224 return check(); 00225 } 00226 bool WifiFindAccesspoint() { 00227 Seri->printf("AT+CWLAP"); 00228 return check(); 00229 } 00230 bool wifiConnect(const char* ssid,const char* password) { 00231 Seri->printf("AT+CWJAP_CUR=\"%s\",\"%s\"",ssid,password); 00232 connected|=check(); 00233 //if(connected==false)return false; 00234 //Seri->printf("AT+CIFSR"); 00235 //check(); 00236 return connected; 00237 } 00238 bool wifiSoftAPFromIP() { 00239 if(connectmode == ST) return false; 00240 Seri->printf("AT+CWLIF"); 00241 return check(); 00242 } 00243 bool setSTMACAddress(char addr[6]) 00244 { 00245 Seri->printf("AT+CIPSTART_CUR=\"%2x:%2x:%2x:%2x:%2x:%2x\"",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); 00246 return check(); 00247 } 00248 bool setAPMACAddress(char addr[6]) 00249 { 00250 Seri->printf("AT+CIPAPMAC_CUR=\"%2x:%2x:%2x:%2x:%2x:%2x\"",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); 00251 return check(); 00252 } 00253 bool setSTIPAddress(char addr[4]) 00254 { 00255 Seri->printf("AT+CIPSTA_CUR=\"%3d:%3d:%3d:%3d\"",addr[0],addr[1],addr[2],addr[3]); 00256 return check(); 00257 } 00258 bool setAPIPAddress(char addr[4]) 00259 { 00260 Seri->printf("AT+CIPAP_CUR=\"%3d:%3d:%3d:%3d\"",addr[0],addr[1],addr[2],addr[3]); 00261 return check(); 00262 } 00263 00264 00265 00266 bool ATcommand(const char* cmd) { 00267 char a[20]; 00268 strcat(a,"AT+"); 00269 strcat(a,cmd); 00270 Seri->printf(a); 00271 return check(); 00272 } 00273 const char AP=2; 00274 const char ST=1; 00275 const char APST=3; 00276 char connectmode; 00277 char DHCPMode; 00278 char DHCPenable; 00279 esp8266(Serial *ser) : myled(LED2) { 00280 myled=1; 00281 connected=false; 00282 00283 DHCPMode = 0; 00284 DHCPenable = 1; 00285 Seri = ser; 00286 bool f = false; 00287 int i=0; 00288 Seri->printf("AT\r\n"); 00289 00290 strChack("OK"); 00291 reset(); 00292 wait(0.5); 00293 } 00294 00295 }; 00296 /*void end() 00297 { 00298 esp.printf("\r\n"); 00299 }*/ 00300 void send_AT() 00301 { 00302 esp.printf("AT\r\n"); 00303 } 00304 int main() 00305 { 00306 //myled = 1; 00307 pc.baud(115200); 00308 esp.baud(115200); 00309 printf("Start\r\n"); 00310 wait(0.1); 00311 esp8266 ESP(&esp); 00312 send_AT(); 00313 myled = 1; 00314 bool f = true; 00315 while(f) 00316 { 00317 /*char *x; 00318 esp.scanf("%s",x); 00319 printf("%s",x); 00320 f = !strcmp(x,"OK\r\n");*/ 00321 //esp.putc(pc.getc()); 00322 //pc.putc(esp.getc()); 00323 } 00324 //end(); 00325 //ESP.reset(); 00326 /*ESP.connection_mode(3); 00327 ESP.multipull(1); 00328 ESP.accesspoint(); 00329 00330 ESP.connect("biz","roborobo"); 00331 //ESP.http_access("TCP","imaoca.webcrow.jp",80); 00332 ESP.tcp_setting(1,8888); 00333 char senddata[10]; 00334 pc.printf("\r\n tcp send data\r\n"); 00335 for(int i=0;i<10;i++) 00336 { 00337 senddata[i]=pc.getc(); 00338 pc.putc(senddata[i]); 00339 } 00340 //ESP.send(10,senddata); 00341 //ESP.prompt(); 00342 ESP.softAP("ESP8266","",10,0); 00343 char *data,num=30; 00344 DigitalOut LED(LED4); 00345 while(1) { 00346 // data = ESP.get_data(data,num); 00347 // if(data!=NULL) 00348 // printf("GET->%s\r\n",data); 00349 myled=1; 00350 wait(0.01); 00351 myled=0; 00352 data=ESP.get_data(data,num); 00353 printf("%s\r\n",data); 00354 if (strstr(data,"ON")!=NULL) 00355 LED=1; 00356 if (strstr(data,"OFF")!=NULL) 00357 LED=0; 00358 //pc.putc( esp.getc()); 00359 } 00360 /*while(1) { 00361 char x = esp.getc(); 00362 pc.putc(x); 00363 if(x=='O')f=true; 00364 else if(x=='K'&&f==true)break; 00365 else f=false; 00366 }*/ 00367 myled=0; 00368 }
Generated on Thu Jul 14 2022 16:35:54 by
1.7.2