Kiko Ishimoto / Mbed 2 deprecated OneCircleRobot

Dependencies:   MPU92502 Motor2 PIDonerobot Stepper mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers esp8266.cpp Source File

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