2輪に移行
Dependencies: MPU92502 Motor2 PIDonerobot Stepper mbed
esp8266.cpp
- Committer:
- kikoaac
- Date:
- 2016-08-07
- Revision:
- 0:1faa9570d725
File content as of revision 0:1faa9570d725:
#include "mbed.h" #include <string> #define end "\r\n" class esp8266 { //AP アクセスポイント //ST client //APST Server and Client private: Serial *Seri; char* buffer; int datalen; void strChack(char data[]) { int f = 0; for (;;) { if(f >= strlen(data)) { break; } char a=Seri->getc(); if(a!=data[f])f=0; else f++; } wait(0.1); } void Reception() { char inputData[100]; Seri->scanf("%s",inputData); //Serial pc(USBTX,USBRX); //pc.baud(115200); //pc.printf("%s\r\n",inputData); if(strstr(inputData,"+IPD,")==NULL) { /* if(strcmp(x,"0,CONNECT")==0)break; if(strcmp(x,"0,CLOSED")==0)break; if(strcmp(x,">")==0)break;*/ } else { strtok(inputData,","); strtok(NULL,":"); char *data = strtok(NULL,","); strtok(inputData,","); char *data_num = strtok(NULL,","); datalen = atoi(data_num); buffer=data; //data = strtok(x,""); //buffer = data; //pc.printf("%s , %s , %s\r\n",y,data_num,data); } } bool check() { //Serial pc(USBTX,USBRX); //pc.baud(115200); Seri->printf(end); bool f = false,ans; int i=0; while(1) { char x = Seri->getc(); //pc.putc(x); if(x=='O')f=true; else if(x=='K'&&f==true) { ans=true; break; } else f=false; if(x=='F')i=1; else if(x=='A'&&i==1)i=2; else if(x=='I'&&i==2)i=3; else if(x=='L'&&i==3) { ans=false; break; } else i=0; } wait(0.1); return ans; } bool connected; public: char* get_data(char *datax,int num) { get: char x[num+2]; Seri->scanf("%s",x); //Serial pc(USBTX,USBRX); //pc.baud(115200); if(strstr(x,"+IPD,")==NULL) { return NULL; /* if(strcmp(x,"0,CONNECT")==0)break; if(strcmp(x,"0,CLOSED")==0)break; if(strcmp(x,">")==0)break;*/ } else { strtok(x,","); strtok(NULL,":"); datax = strtok(NULL,","); strtok(x,","); char *data_num = strtok(NULL,","); char len = atoi(data_num); if(strcmp(datax,"\r\n")==0)goto get; else if(len > num)return NULL; //for(int i=0;i<len;i++) // *datax++=*data++; //printf("%s\r\n",datax); return datax; //data = strtok(x,""); //buffer = data; //pc.printf("%s , %s , %s\r\n",y,data_num,data); } } bool sleep(int mode) { Seri->printf("AT+SLEEP=%d",mode); return check(); } bool deepsleep(int ms) { Seri->printf("AT+GSLP=%d",ms); return check(); } bool httpAccess(char* mode,char* url,int port=80) { if(connected==false)return false; Seri->printf("AT+CIPSTART=\"%s\",\"%s\",%d",mode,url,port); return check(); } bool httpAccess(char id,char* url,char* mode = "TCP",int port=80) { if(connected==false)return false; Seri->printf("AT+CIPSTART=\"%d\",\"%s\",\"%s\",%d",id,mode,url,port); return check(); } bool Disconnection(int id = 0) { printf("AT+CIPCLOSE==%d",id); return check(); } void prompt() { Seri->attach(this,&esp8266::Reception); } //Seri->printf("AT+CIPSTA_CUR=\"%s\",\"%s\",\"%s\"",IP,gateway,netmask); bool setDHCP(int mode,int en) { DHCPMode = mode; DHCPenable = en; printf("AT+CWDHCP_CUR=%d,%d",mode,en); return check(); } bool send( int num,char* data,int id) { if(connected==false)return false; Seri->printf("AT+CIPSEND=%d,%d",id,num+2); check(); wait(0.01); while(1) { char i = Seri->getc(); if(i=='>')break; } Seri->printf("%s",data); Seri->printf("\r\n"); return check(); } bool multipull(int i) { Seri->printf("AT+CIPMUX=%d",i); return check(); } void reset() { Seri->printf("AT+RST\r\n"); strChack("ready"); wait(0.1); } void serverCreate(int mode,int port) { Seri->printf("AT+CIPSERVER=%d,%d",mode,port); check(); wait(0.1); /*printf("\r\nwait connection\r\n"); while(1) { char x[10]; Seri->scanf("%s",x); if(strcmp(x,"0,CONNECT")==0)break; }*/ //printf("\r\OK\r\n"); } void serverTimeOutSet(int time = 60) { Seri->printf("AT+CIPSTO=%d",time); check(); } bool accesspoint() { Seri->printf("AT+CWLAP\r\n"); return check(); } bool wifiSoftAPSetting(const char* ssid,const char* password,int ch,int ecn) { if(connectmode==AP||connectmode==APST) Seri->printf("AT+CWSAP_CUR=\"%s\",\"%s\",%d,%d",ssid,password,ch,ecn); else false; return check(); } bool wifiConnectionMode(int mode) { connectmode=mode; Seri->printf("AT+CWMODE_CUR=%d",mode); return check(); } bool wifiDisconnect() { Seri->printf("AT+CWQAP"); connected=false; return check(); } bool WifiFindAccesspoint(const char *wifi) { Seri->printf("AT+CWLAP=\"%s\""); return check(); } bool WifiFindAccesspoint() { Seri->printf("AT+CWLAP"); return check(); } bool wifiConnect(const char* ssid,const char* password) { Seri->printf("AT+CWJAP_CUR=\"%s\",\"%s\"",ssid,password); connected|=check(); //if(connected==false)return false; //Seri->printf("AT+CIFSR"); //check(); return connected; } bool wifiSoftAPFromIP() { if(connectmode == ST) return false; Seri->printf("AT+CWLIF"); return check(); } bool setSTMACAddress(char addr[6]) { Seri->printf("AT+CIPSTART_CUR=\"%2x:%2x:%2x:%2x:%2x:%2x\"",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); return check(); } bool setAPMACAddress(char addr[6]) { Seri->printf("AT+CIPAPMAC_CUR=\"%2x:%2x:%2x:%2x:%2x:%2x\"",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]); return check(); } bool setSTIPAddress(char addr[4]) { Seri->printf("AT+CIPSTA_CUR=\"%3d:%3d:%3d:%3d\"",addr[0],addr[1],addr[2],addr[3]); return check(); } bool setAPIPAddress(char addr[4]) { Seri->printf("AT+CIPAP_CUR=\"%3d:%3d:%3d:%3d\"",addr[0],addr[1],addr[2],addr[3]); return check(); } bool ATcommand(const char* cmd) { char a[20] = ""; strcat(a,"AT"); strcat(a,cmd); Seri->printf(a); return check(); } const char AP=2; const char ST=1; const char APST=3; char connectmode; char DHCPMode; char DHCPenable; esp8266(){ connected=false; DHCPMode = 0; DHCPenable = 1; //Seri = ser; //Seri->printf("AT\r\n"); //strChack("OK"); //reset(); wait(0.5); } void setSerial(Serial *ser) { Seri = ser; //Seri->printf("AT\r\n"); //strChack("OK"); } };