ESP8266 library to get and send data.
Fork of ESP8266 by
Diff: ESP8266.cpp
- Revision:
- 4:c05f7a1b4e47
- Parent:
- 3:4f24e7e803a1
- Child:
- 5:5cc7894bb8cb
--- a/ESP8266.cpp Sat Jun 11 14:05:06 2016 +0000 +++ b/ESP8266.cpp Fri Oct 21 16:33:31 2016 +0000 @@ -1,7 +1,4 @@ #include "ESP8266.h" -#define HTTPCMD "GET " -#define protocol " HTTP/1.0\n\n" - // Constructor ESP8266::ESP8266(PinName tx, PinName rx, int br) : comm(tx, rx) { @@ -13,190 +10,126 @@ // Add <CR> + <LF> at the end of the string void ESP8266::AddEOL(char * s) { - char k; - k = strlen(s); // Finds position of NULL character - s[k] = 0x0D; // switch NULL for <CR> - s[k + 1] = 0x0A; // Add <LF> - s[k + 2] = 0; // Add NULL at the end + char k = strlen(s); // Finds position of NULL character + s[k] = '\r'; // switch NULL for <CR> + s[k + 1] = '\n'; // Add <LF> + s[k + 2] = '\0'; // Add NULL at the end } // Add one ASCII character at the end of the string void ESP8266::AddChar(char * s, char c) { - char k; - k = strlen(s); - s[k] = c; - s[k + 1] = 0; -} - -// Converts integer number to null-terminated string -void ESP8266::itoa(int n, char * s) { - char k = 0; - char r[11]; - - if(n == 0) { - s[0] = '0'; - s[1] = 0; - } else { - while(n != 0) { - r[k]= (n % 10) + '0'; - n = n / 10; - k++; - } - while(k > 0) { - s[n] = r[k - 1] + '0'; - n++; - k--; - } - s[n] = 0; - } + char k = strlen(s); + s[k] = c; + s[k + 1] = '\0'; } // Sends command to ESP8266. Receives the command string -void ESP8266::SendCMD(char * s) { - AddEOL(s); - comm.printf("%s", s); +void ESP8266::SendCMD(char* s) { + comm.printf("%s%s", s, CMD_END); } // Resets the ESP8266 void ESP8266::Reset(void) { - char rs[10]; - strcpy(rs, "AT+RST"); - SendCMD(rs); + SendCMD("AT+RST"); } // Receive reply until no character is received after a given timeout in miliseconds -bool ESP8266::RcvReply(char * r, int to) { +bool ESP8266::RcvReply(char* r, int to) { Timer t; - bool ended = 0; - char c; - strcpy(r, ""); t.start(); - while(!ended) { + + do { if(comm.readable()) { - c = comm.getc(); - AddChar(r, c); + AddChar(r, comm.getc()); t.start(); } - if(t.read_ms() > to) { - ended = 1; - } - } - AddChar(r, 0x00); - return ended; + } while(t.read_ms() < to); + + AddChar(r, '\0'); + return r[0] != '\0'; } // Gets the AP list. Parameter: the string to receive the list -void ESP8266::GetList(char * l) { - char rs[15]; - strcpy(rs, "AT+CWLAP"); - SendCMD(rs); - RcvReply(l, 5000); // Needs big timeout because it takes long to start replying +bool ESP8266::GetList(char *l) { + SendCMD("AT+CWLAP"); + return RcvReply(l, 5000); // Needs big timeout because it takes long to start replying } // Joins a Wifi AP. Parameters: SSID and Password (strings) -void ESP8266::Join(char * id, char * pwd) { +void ESP8266::Join(char *id, char *pwd) { char cmd[255]; - strcpy(cmd, "AT+CWJAP="); - AddChar(cmd, 0x22); - strcat(cmd, id); - AddChar(cmd, 0x22); - AddChar(cmd, 0x2C); - AddChar(cmd, 0x22); - strcat(cmd, pwd); - AddChar(cmd, 0x22); + sprintf(cmd, "AT+CWJAP=\"%s\",\"%s\"", id, pwd); SendCMD(cmd); } // Gets ESP IP. Parameter: string to contain IP -void ESP8266::GetIP(char * ip) { - char cmd[15]; - strcpy(cmd, "AT+CIFSR"); - SendCMD(cmd); - RcvReply(ip, 2000); +bool ESP8266::GetIP(char *ip) { + SendCMD("AT+CIFSR"); + return RcvReply(ip, 2000); } //Defines wifi mode; Parameter: mode; 1= STA, 2= AP, 3=both -void ESP8266::SetMode(char mode) { +void ESP8266::SetMode(WiFiMode mode) { char cmd[15]; strcpy(cmd, "AT+CWMODE="); - mode = mode + 0x30; // Converts number into corresponding ASCII character - AddChar(cmd, mode); // Completes command string + AddChar(cmd, mode + '0'); // Completes command string SendCMD(cmd); } // Quits the AP void ESP8266::Quit(void) { - char cmd[15]; - strcpy(cmd, "AT+CWQAP"); - SendCMD(cmd); + SendCMD("AT+CWQAP"); } // Sets single connection void ESP8266::SetSingle(void) { - char cmd[15]; - strcpy(cmd, "AT+CIPMUX=0"); - SendCMD(cmd); + SendCMD("AT+CIPMUX=0"); } // Sets multiple connection void ESP8266::SetMultiple(void) { - char rs[15]; - strcpy(rs, "AT+CIPMUX=1"); - SendCMD(rs); + SendCMD("AT+CIPMUX=1"); } // Gets connection status. Parameter: string to contain status -void ESP8266::GetConnStatus(char * st) { - char cmd[15]; - strcpy(cmd, "AT+CIPSTATUS"); - SendCMD(cmd); - RcvReply(st, 2000); +bool ESP8266::GetConnStatus(char * st) { + SendCMD("AT+CIPSTATUS"); + return RcvReply(st, 2000); } // Starts server mode. Parameter: port to be used void ESP8266::StartServerMode(int port) { char rs[25]; - char t[4]; - strcpy(rs, "AT+CIPSERVER=1,"); - itoa(port, t); - strcat(rs, t); + sprintf(rs, "AT+CIPSERVER=1,%d", port); SendCMD(rs); } // Close server mode. void ESP8266::CloseServerMode(void) { - char rs[20]; - strcpy(rs, "AT+CIPSERVER=0"); - SendCMD(rs); + SendCMD("AT+CIPSERVER=0"); } void ESP8266::setTransparent(void){ - char rs[20]; - strcpy(rs, "AT+CIPMODE=0"); - SendCMD(rs); + SendCMD("AT+CIPMODE=0"); } void ESP8266::startTCPConn(char *IP, int port){ char rs[100]; - sprintf(rs, "AT+CIPSTART=\"TCP\",\"%s\",%d", IP, port); + sprintf(rs, "AT+CIPSTART=0,\"TCP\",\"%s\",%d", IP, port); SendCMD(rs); } -void ESP8266::sendURL(char *URL, char *command){ - char url[300], snd[300], http_cmd[300]; - - strcpy(http_cmd, HTTPCMD); +void ESP8266::sendURL(char *URL, char* IP, char *command){ + char snd[20], http_cmd[300]; + + sprintf(http_cmd, "GET %s HTTP/1.1%sHost: %s%sConnection: close%s%s", URL, CMD_END, IP, CMD_END, CMD_END, CMD_END); + sprintf(snd,"AT+CIPSEND=0,%d",strlen(http_cmd)); + strcpy(command, http_cmd); - strcat(http_cmd, URL); - strcat(http_cmd, protocol); - - strcpy(url, http_cmd); - sprintf(snd,"AT+CIPSENDEX=%d",strlen(url)); - strcpy(command, url); SendCMD(snd); - wait(3); - SendCMD(url); + wait(1); + SendCMD(http_cmd); } \ No newline at end of file