Project in FIBO

Fork of ESP8266 by Janhavi Kulkarni

Committer:
janhavi
Date:
Sat Jun 11 14:05:06 2016 +0000
Revision:
3:4f24e7e803a1
Parent:
2:77388e8f0697
Child:
4:8dfe0574a040
Changes in ESP library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
quevedo 0:e58f27687450 1 #include "ESP8266.h"
janhavi 3:4f24e7e803a1 2 #define HTTPCMD "GET "
janhavi 3:4f24e7e803a1 3 #define protocol " HTTP/1.0\n\n"
janhavi 3:4f24e7e803a1 4
quevedo 0:e58f27687450 5
quevedo 0:e58f27687450 6 // Constructor
quevedo 2:77388e8f0697 7 ESP8266::ESP8266(PinName tx, PinName rx, int br) : comm(tx, rx) {
quevedo 2:77388e8f0697 8 comm.baud(br);
quevedo 0:e58f27687450 9 }
quevedo 0:e58f27687450 10
quevedo 0:e58f27687450 11 // Destructor
quevedo 0:e58f27687450 12 ESP8266::~ESP8266() { }
quevedo 0:e58f27687450 13
quevedo 0:e58f27687450 14 // Add <CR> + <LF> at the end of the string
quevedo 0:e58f27687450 15 void ESP8266::AddEOL(char * s) {
quevedo 0:e58f27687450 16 char k;
quevedo 0:e58f27687450 17 k = strlen(s); // Finds position of NULL character
quevedo 0:e58f27687450 18 s[k] = 0x0D; // switch NULL for <CR>
quevedo 0:e58f27687450 19 s[k + 1] = 0x0A; // Add <LF>
quevedo 0:e58f27687450 20 s[k + 2] = 0; // Add NULL at the end
quevedo 0:e58f27687450 21 }
quevedo 0:e58f27687450 22
quevedo 0:e58f27687450 23 // Add one ASCII character at the end of the string
quevedo 0:e58f27687450 24 void ESP8266::AddChar(char * s, char c) {
quevedo 0:e58f27687450 25 char k;
quevedo 0:e58f27687450 26 k = strlen(s);
quevedo 0:e58f27687450 27 s[k] = c;
quevedo 0:e58f27687450 28 s[k + 1] = 0;
quevedo 0:e58f27687450 29 }
quevedo 0:e58f27687450 30
quevedo 2:77388e8f0697 31 // Converts integer number to null-terminated string
quevedo 2:77388e8f0697 32 void ESP8266::itoa(int n, char * s) {
quevedo 2:77388e8f0697 33 char k = 0;
quevedo 2:77388e8f0697 34 char r[11];
quevedo 2:77388e8f0697 35
quevedo 2:77388e8f0697 36 if(n == 0) {
quevedo 2:77388e8f0697 37 s[0] = '0';
quevedo 2:77388e8f0697 38 s[1] = 0;
quevedo 2:77388e8f0697 39 } else {
quevedo 2:77388e8f0697 40 while(n != 0) {
quevedo 2:77388e8f0697 41 r[k]= (n % 10) + '0';
quevedo 2:77388e8f0697 42 n = n / 10;
quevedo 2:77388e8f0697 43 k++;
quevedo 2:77388e8f0697 44 }
quevedo 2:77388e8f0697 45 while(k > 0) {
quevedo 2:77388e8f0697 46 s[n] = r[k - 1] + '0';
quevedo 2:77388e8f0697 47 n++;
quevedo 2:77388e8f0697 48 k--;
quevedo 2:77388e8f0697 49 }
quevedo 2:77388e8f0697 50 s[n] = 0;
quevedo 2:77388e8f0697 51 }
quevedo 2:77388e8f0697 52 }
quevedo 2:77388e8f0697 53
quevedo 0:e58f27687450 54 // Sends command to ESP8266. Receives the command string
quevedo 0:e58f27687450 55 void ESP8266::SendCMD(char * s) {
quevedo 0:e58f27687450 56 AddEOL(s);
quevedo 0:e58f27687450 57 comm.printf("%s", s);
quevedo 0:e58f27687450 58 }
quevedo 0:e58f27687450 59
quevedo 0:e58f27687450 60 // Resets the ESP8266
quevedo 0:e58f27687450 61 void ESP8266::Reset(void) {
quevedo 0:e58f27687450 62 char rs[10];
quevedo 0:e58f27687450 63 strcpy(rs, "AT+RST");
quevedo 0:e58f27687450 64 SendCMD(rs);
quevedo 0:e58f27687450 65 }
quevedo 0:e58f27687450 66
quevedo 0:e58f27687450 67 // Receive reply until no character is received after a given timeout in miliseconds
janhavi 3:4f24e7e803a1 68 bool ESP8266::RcvReply(char * r, int to) {
quevedo 0:e58f27687450 69 Timer t;
quevedo 0:e58f27687450 70 bool ended = 0;
quevedo 0:e58f27687450 71 char c;
quevedo 0:e58f27687450 72
quevedo 0:e58f27687450 73 strcpy(r, "");
quevedo 0:e58f27687450 74 t.start();
quevedo 0:e58f27687450 75 while(!ended) {
quevedo 0:e58f27687450 76 if(comm.readable()) {
quevedo 0:e58f27687450 77 c = comm.getc();
quevedo 0:e58f27687450 78 AddChar(r, c);
quevedo 0:e58f27687450 79 t.start();
quevedo 0:e58f27687450 80 }
quevedo 0:e58f27687450 81 if(t.read_ms() > to) {
quevedo 0:e58f27687450 82 ended = 1;
quevedo 0:e58f27687450 83 }
quevedo 0:e58f27687450 84 }
quevedo 0:e58f27687450 85 AddChar(r, 0x00);
janhavi 3:4f24e7e803a1 86 return ended;
quevedo 0:e58f27687450 87 }
quevedo 0:e58f27687450 88
quevedo 0:e58f27687450 89 // Gets the AP list. Parameter: the string to receive the list
quevedo 0:e58f27687450 90 void ESP8266::GetList(char * l) {
quevedo 0:e58f27687450 91 char rs[15];
quevedo 0:e58f27687450 92 strcpy(rs, "AT+CWLAP");
quevedo 0:e58f27687450 93 SendCMD(rs);
quevedo 0:e58f27687450 94 RcvReply(l, 5000); // Needs big timeout because it takes long to start replying
quevedo 0:e58f27687450 95 }
quevedo 0:e58f27687450 96
quevedo 0:e58f27687450 97 // Joins a Wifi AP. Parameters: SSID and Password (strings)
quevedo 0:e58f27687450 98 void ESP8266::Join(char * id, char * pwd) {
quevedo 0:e58f27687450 99 char cmd[255];
quevedo 0:e58f27687450 100 strcpy(cmd, "AT+CWJAP=");
quevedo 0:e58f27687450 101 AddChar(cmd, 0x22);
quevedo 0:e58f27687450 102 strcat(cmd, id);
quevedo 0:e58f27687450 103 AddChar(cmd, 0x22);
quevedo 0:e58f27687450 104 AddChar(cmd, 0x2C);
quevedo 0:e58f27687450 105 AddChar(cmd, 0x22);
quevedo 0:e58f27687450 106 strcat(cmd, pwd);
quevedo 0:e58f27687450 107 AddChar(cmd, 0x22);
quevedo 0:e58f27687450 108 SendCMD(cmd);
quevedo 0:e58f27687450 109 }
quevedo 0:e58f27687450 110
quevedo 0:e58f27687450 111 // Gets ESP IP. Parameter: string to contain IP
quevedo 0:e58f27687450 112 void ESP8266::GetIP(char * ip) {
quevedo 0:e58f27687450 113 char cmd[15];
quevedo 0:e58f27687450 114 strcpy(cmd, "AT+CIFSR");
quevedo 0:e58f27687450 115 SendCMD(cmd);
quevedo 0:e58f27687450 116 RcvReply(ip, 2000);
quevedo 1:399414d48048 117 }
quevedo 1:399414d48048 118
quevedo 1:399414d48048 119 //Defines wifi mode; Parameter: mode; 1= STA, 2= AP, 3=both
quevedo 1:399414d48048 120 void ESP8266::SetMode(char mode) {
quevedo 1:399414d48048 121 char cmd[15];
quevedo 1:399414d48048 122 strcpy(cmd, "AT+CWMODE=");
quevedo 1:399414d48048 123 mode = mode + 0x30; // Converts number into corresponding ASCII character
quevedo 1:399414d48048 124 AddChar(cmd, mode); // Completes command string
quevedo 1:399414d48048 125 SendCMD(cmd);
quevedo 1:399414d48048 126 }
quevedo 1:399414d48048 127
quevedo 1:399414d48048 128 // Quits the AP
quevedo 1:399414d48048 129 void ESP8266::Quit(void) {
quevedo 1:399414d48048 130 char cmd[15];
quevedo 1:399414d48048 131 strcpy(cmd, "AT+CWQAP");
quevedo 1:399414d48048 132 SendCMD(cmd);
quevedo 1:399414d48048 133 }
quevedo 1:399414d48048 134
quevedo 1:399414d48048 135 // Sets single connection
quevedo 1:399414d48048 136 void ESP8266::SetSingle(void) {
quevedo 1:399414d48048 137 char cmd[15];
quevedo 1:399414d48048 138 strcpy(cmd, "AT+CIPMUX=0");
quevedo 1:399414d48048 139 SendCMD(cmd);
quevedo 1:399414d48048 140 }
quevedo 1:399414d48048 141
quevedo 1:399414d48048 142 // Sets multiple connection
quevedo 1:399414d48048 143 void ESP8266::SetMultiple(void) {
quevedo 1:399414d48048 144 char rs[15];
quevedo 1:399414d48048 145 strcpy(rs, "AT+CIPMUX=1");
quevedo 1:399414d48048 146 SendCMD(rs);
quevedo 2:77388e8f0697 147 }
quevedo 2:77388e8f0697 148
quevedo 2:77388e8f0697 149 // Gets connection status. Parameter: string to contain status
quevedo 2:77388e8f0697 150 void ESP8266::GetConnStatus(char * st) {
quevedo 2:77388e8f0697 151 char cmd[15];
quevedo 2:77388e8f0697 152 strcpy(cmd, "AT+CIPSTATUS");
quevedo 2:77388e8f0697 153 SendCMD(cmd);
quevedo 2:77388e8f0697 154 RcvReply(st, 2000);
quevedo 2:77388e8f0697 155 }
quevedo 2:77388e8f0697 156
quevedo 2:77388e8f0697 157 // Starts server mode. Parameter: port to be used
quevedo 2:77388e8f0697 158 void ESP8266::StartServerMode(int port) {
quevedo 2:77388e8f0697 159 char rs[25];
quevedo 2:77388e8f0697 160 char t[4];
quevedo 2:77388e8f0697 161 strcpy(rs, "AT+CIPSERVER=1,");
quevedo 2:77388e8f0697 162 itoa(port, t);
quevedo 2:77388e8f0697 163 strcat(rs, t);
quevedo 2:77388e8f0697 164 SendCMD(rs);
quevedo 2:77388e8f0697 165 }
quevedo 2:77388e8f0697 166
quevedo 2:77388e8f0697 167 // Close server mode.
quevedo 2:77388e8f0697 168 void ESP8266::CloseServerMode(void) {
quevedo 2:77388e8f0697 169 char rs[20];
quevedo 2:77388e8f0697 170 strcpy(rs, "AT+CIPSERVER=0");
quevedo 2:77388e8f0697 171 SendCMD(rs);
janhavi 3:4f24e7e803a1 172 }
janhavi 3:4f24e7e803a1 173
janhavi 3:4f24e7e803a1 174 void ESP8266::setTransparent(void){
janhavi 3:4f24e7e803a1 175 char rs[20];
janhavi 3:4f24e7e803a1 176 strcpy(rs, "AT+CIPMODE=0");
janhavi 3:4f24e7e803a1 177 SendCMD(rs);
janhavi 3:4f24e7e803a1 178 }
janhavi 3:4f24e7e803a1 179
janhavi 3:4f24e7e803a1 180 void ESP8266::startTCPConn(char *IP, int port){
janhavi 3:4f24e7e803a1 181 char rs[100];
janhavi 3:4f24e7e803a1 182 sprintf(rs, "AT+CIPSTART=\"TCP\",\"%s\",%d", IP, port);
janhavi 3:4f24e7e803a1 183 SendCMD(rs);
janhavi 3:4f24e7e803a1 184 }
janhavi 3:4f24e7e803a1 185
janhavi 3:4f24e7e803a1 186 void ESP8266::sendURL(char *URL, char *command){
janhavi 3:4f24e7e803a1 187 char url[300], snd[300], http_cmd[300];
janhavi 3:4f24e7e803a1 188
janhavi 3:4f24e7e803a1 189 strcpy(http_cmd, HTTPCMD);
janhavi 3:4f24e7e803a1 190
janhavi 3:4f24e7e803a1 191 strcat(http_cmd, URL);
janhavi 3:4f24e7e803a1 192 strcat(http_cmd, protocol);
janhavi 3:4f24e7e803a1 193
janhavi 3:4f24e7e803a1 194 strcpy(url, http_cmd);
janhavi 3:4f24e7e803a1 195 sprintf(snd,"AT+CIPSENDEX=%d",strlen(url));
janhavi 3:4f24e7e803a1 196 strcpy(command, url);
janhavi 3:4f24e7e803a1 197 SendCMD(snd);
janhavi 3:4f24e7e803a1 198 wait(3);
janhavi 3:4f24e7e803a1 199 SendCMD(url);
janhavi 3:4f24e7e803a1 200 }
janhavi 3:4f24e7e803a1 201
janhavi 3:4f24e7e803a1 202