2輪に移行
Dependencies: MPU92502 Motor2 PIDonerobot Stepper mbed
Diff: esp8266.cpp
- Revision:
- 0:1faa9570d725
diff -r 000000000000 -r 1faa9570d725 esp8266.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/esp8266.cpp Sun Aug 07 12:47:51 2016 +0000 @@ -0,0 +1,290 @@ +#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"); + } +}; \ No newline at end of file