ESP8266 library to get and send data.

Fork of ESP8266 by Janhavi Kulkarni

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