Kiko Ishimoto
/
mbed_esp8266
esp8266
Embed:
(wiki syntax)
Show/hide line numbers
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