WEB server handles an ESP8266 module to control a LED
Fork of WebSwitch_ENC28J60 by
main.cpp@5:9b4fd5f07e10, 2016-01-06 (annotated)
- Committer:
- stueckler
- Date:
- Wed Jan 06 14:47:02 2016 +0000
- Revision:
- 5:9b4fd5f07e10
- Parent:
- 4:d34811deedab
WEB Server to control one LED
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
stueckler | 5:9b4fd5f07e10 | 1 | #include <mbed.h> |
hudakz | 0:68a0003c4cb8 | 2 | |
stueckler | 5:9b4fd5f07e10 | 3 | // WEB Server to control one LED |
stueckler | 5:9b4fd5f07e10 | 4 | // ----------------------------- |
hudakz | 0:68a0003c4cb8 | 5 | |
stueckler | 5:9b4fd5f07e10 | 6 | Serial pc(USBTX, USBRX); |
stueckler | 5:9b4fd5f07e10 | 7 | Serial esp(PA_9, PA_10); // tx, rx |
stueckler | 5:9b4fd5f07e10 | 8 | DigitalOut sw(PA_5); // Change LED to a pin of your choice. However, make sure that it does not collide with any serial pins already used |
stueckler | 5:9b4fd5f07e10 | 9 | |
stueckler | 5:9b4fd5f07e10 | 10 | Timer t; |
hudakz | 4:d34811deedab | 11 | |
stueckler | 5:9b4fd5f07e10 | 12 | int count,ended,timeout; |
stueckler | 5:9b4fd5f07e10 | 13 | char buf[1024]; |
stueckler | 5:9b4fd5f07e10 | 14 | char snd[255]; |
hudakz | 0:68a0003c4cb8 | 15 | |
stueckler | 5:9b4fd5f07e10 | 16 | const char* PASSWORD = "secret"; // change as you like |
stueckler | 5:9b4fd5f07e10 | 17 | const char ssid[32] = "ESP8266"; // enter router ssid inside the quotes |
stueckler | 5:9b4fd5f07e10 | 18 | const char pwd [32] = "ok"; // enter router password inside the quotes |
stueckler | 5:9b4fd5f07e10 | 19 | char http[1024]; // HTTP content |
stueckler | 5:9b4fd5f07e10 | 20 | uint8_t port = 80; |
stueckler | 5:9b4fd5f07e10 | 21 | int id = 1; |
hudakz | 0:68a0003c4cb8 | 22 | |
stueckler | 5:9b4fd5f07e10 | 23 | void SendCMD(char*),SendData(char*),GetReplyLine(int,char*,int),GetReply(int,char*,int),ESPconfig_Server(),ESPconfig_Client(),ESPsetbaudrate(),page(int); |
stueckler | 5:9b4fd5f07e10 | 24 | int checksw(char*); |
hudakz | 0:68a0003c4cb8 | 25 | |
hudakz | 0:68a0003c4cb8 | 26 | |
stueckler | 5:9b4fd5f07e10 | 27 | // USAGE: |
stueckler | 5:9b4fd5f07e10 | 28 | // IP/password |
stueckler | 5:9b4fd5f07e10 | 29 | // IP/password/?sw=1 |
stueckler | 5:9b4fd5f07e10 | 30 | // IP/password/?sw=0 |
hudakz | 0:68a0003c4cb8 | 31 | |
hudakz | 0:68a0003c4cb8 | 32 | |
hudakz | 0:68a0003c4cb8 | 33 | int main() |
hudakz | 0:68a0003c4cb8 | 34 | { |
stueckler | 5:9b4fd5f07e10 | 35 | |
stueckler | 5:9b4fd5f07e10 | 36 | // Setup |
stueckler | 5:9b4fd5f07e10 | 37 | esp.baud(115200); // esp speed |
stueckler | 5:9b4fd5f07e10 | 38 | pc.baud(9600); // change this to the new ESP8266 baudrate if it is changed at any time. |
stueckler | 5:9b4fd5f07e10 | 39 | |
stueckler | 5:9b4fd5f07e10 | 40 | |
stueckler | 5:9b4fd5f07e10 | 41 | //ESPconfig_Client(); |
stueckler | 5:9b4fd5f07e10 | 42 | ESPconfig_Server(); |
stueckler | 5:9b4fd5f07e10 | 43 | |
stueckler | 5:9b4fd5f07e10 | 44 | for (int i=0; i<8; i++) |
stueckler | 5:9b4fd5f07e10 | 45 | { |
stueckler | 5:9b4fd5f07e10 | 46 | sw=!sw; |
stueckler | 5:9b4fd5f07e10 | 47 | wait(0.3); |
stueckler | 5:9b4fd5f07e10 | 48 | } |
stueckler | 5:9b4fd5f07e10 | 49 | |
stueckler | 5:9b4fd5f07e10 | 50 | |
stueckler | 5:9b4fd5f07e10 | 51 | // Loop |
hudakz | 0:68a0003c4cb8 | 52 | while(1) { |
stueckler | 5:9b4fd5f07e10 | 53 | timeout=2; |
stueckler | 5:9b4fd5f07e10 | 54 | if(esp.readable()){ |
stueckler | 5:9b4fd5f07e10 | 55 | GetReply(500,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 56 | char* rqstPnt = strstr(buf, "+IPD"); |
stueckler | 5:9b4fd5f07e10 | 57 | if(rqstPnt != NULL) |
stueckler | 5:9b4fd5f07e10 | 58 | { |
stueckler | 5:9b4fd5f07e10 | 59 | sscanf(rqstPnt, "+IPD,%d", &id); |
stueckler | 5:9b4fd5f07e10 | 60 | |
stueckler | 5:9b4fd5f07e10 | 61 | page(checksw(buf)); |
stueckler | 5:9b4fd5f07e10 | 62 | |
stueckler | 5:9b4fd5f07e10 | 63 | // Command TCP/IP Data Tx |
stueckler | 5:9b4fd5f07e10 | 64 | sprintf(snd,"AT+CIPSEND=%d,%d\r\n", id, strlen(http)); |
stueckler | 5:9b4fd5f07e10 | 65 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 66 | GetReply(500,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 67 | |
stueckler | 5:9b4fd5f07e10 | 68 | SendData(http); |
stueckler | 5:9b4fd5f07e10 | 69 | |
stueckler | 5:9b4fd5f07e10 | 70 | bool weberror = true; |
stueckler | 5:9b4fd5f07e10 | 71 | int cnt = 0; |
stueckler | 5:9b4fd5f07e10 | 72 | while(weberror && cnt < 100){ |
stueckler | 5:9b4fd5f07e10 | 73 | GetReply(500,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 74 | if(strstr(buf, "SEND OK") != NULL) |
stueckler | 5:9b4fd5f07e10 | 75 | weberror = false; |
stueckler | 5:9b4fd5f07e10 | 76 | |
stueckler | 5:9b4fd5f07e10 | 77 | cnt++; |
hudakz | 0:68a0003c4cb8 | 78 | } |
stueckler | 5:9b4fd5f07e10 | 79 | |
stueckler | 5:9b4fd5f07e10 | 80 | if(weberror) |
stueckler | 5:9b4fd5f07e10 | 81 | { |
stueckler | 5:9b4fd5f07e10 | 82 | strcpy(snd,"AT+CIPMUX=1\r\n"); |
stueckler | 5:9b4fd5f07e10 | 83 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 84 | GetReply(500,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 85 | |
stueckler | 5:9b4fd5f07e10 | 86 | sprintf(snd,"AT+CIPSERVER=1,%d\r\n", port); |
stueckler | 5:9b4fd5f07e10 | 87 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 88 | GetReply(2000,buf,sizeof(buf)); |
hudakz | 0:68a0003c4cb8 | 89 | } |
stueckler | 5:9b4fd5f07e10 | 90 | else |
stueckler | 5:9b4fd5f07e10 | 91 | { |
stueckler | 5:9b4fd5f07e10 | 92 | sprintf(snd,"AT+CIPCLOSE=%d\r\n", id); // Notice id is an int formatted to string |
stueckler | 5:9b4fd5f07e10 | 93 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 94 | GetReply(500,buf,sizeof(buf)); |
hudakz | 0:68a0003c4cb8 | 95 | } |
hudakz | 0:68a0003c4cb8 | 96 | } |
hudakz | 0:68a0003c4cb8 | 97 | } |
hudakz | 0:68a0003c4cb8 | 98 | } |
hudakz | 0:68a0003c4cb8 | 99 | } |
hudakz | 0:68a0003c4cb8 | 100 | |
hudakz | 3:0133517ba02d | 101 | |
stueckler | 5:9b4fd5f07e10 | 102 | void page(int status) |
stueckler | 5:9b4fd5f07e10 | 103 | { |
stueckler | 5:9b4fd5f07e10 | 104 | char content_length[5]; |
stueckler | 5:9b4fd5f07e10 | 105 | char info[255]; |
stueckler | 5:9b4fd5f07e10 | 106 | |
stueckler | 5:9b4fd5f07e10 | 107 | strcpy(info,"<h2>Web Switch</h2>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 108 | |
stueckler | 5:9b4fd5f07e10 | 109 | if(status < 0) |
stueckler | 5:9b4fd5f07e10 | 110 | { |
stueckler | 5:9b4fd5f07e10 | 111 | strcat(info,"<p>Usage: http://host_or_ip/password</p>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 112 | } |
stueckler | 5:9b4fd5f07e10 | 113 | else if (status == 1) |
stueckler | 5:9b4fd5f07e10 | 114 | { |
stueckler | 5:9b4fd5f07e10 | 115 | strcat(info,"<pre>\r\n <font color=#FF0000>ON</font>"); |
stueckler | 5:9b4fd5f07e10 | 116 | strcat(info," <a href=\"./?sw=0\">[switch off]</a>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 117 | } |
stueckler | 5:9b4fd5f07e10 | 118 | else |
stueckler | 5:9b4fd5f07e10 | 119 | { |
stueckler | 5:9b4fd5f07e10 | 120 | strcat(info,"<pre>\r\n <font color=#00FF00>OFF</font>"); |
stueckler | 5:9b4fd5f07e10 | 121 | strcat(info," <a href=\"./?sw=1\">[switch on]</a>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 122 | } |
stueckler | 5:9b4fd5f07e10 | 123 | |
stueckler | 5:9b4fd5f07e10 | 124 | strcat(info," <a href=\".\">[refresh status]</a>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 125 | strcat(info,"</pre>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 126 | strcat(info,"<br>\r\n"); |
stueckler | 5:9b4fd5f07e10 | 127 | |
stueckler | 5:9b4fd5f07e10 | 128 | strcpy(http,"HTTP/1.0 200 OK"); |
stueckler | 5:9b4fd5f07e10 | 129 | strcat(http,"\r\nContent-Type: text/html\r\n"); |
stueckler | 5:9b4fd5f07e10 | 130 | strcat(http,"Content-Length: "); |
stueckler | 5:9b4fd5f07e10 | 131 | sprintf(content_length, "%d", strlen(buf)); |
stueckler | 5:9b4fd5f07e10 | 132 | strcat(http,content_length); |
stueckler | 5:9b4fd5f07e10 | 133 | strcat(http,"\r\nPragma: no-cache\r\n"); |
stueckler | 5:9b4fd5f07e10 | 134 | strcat(http,"Connection: About to close\r\n\r\n"); |
stueckler | 5:9b4fd5f07e10 | 135 | strcat(http,info); |
stueckler | 5:9b4fd5f07e10 | 136 | } |
stueckler | 5:9b4fd5f07e10 | 137 | |
stueckler | 5:9b4fd5f07e10 | 138 | |
stueckler | 5:9b4fd5f07e10 | 139 | int checksw(char *buf) |
stueckler | 5:9b4fd5f07e10 | 140 | { |
stueckler | 5:9b4fd5f07e10 | 141 | int ret = 0; |
stueckler | 5:9b4fd5f07e10 | 142 | |
stueckler | 5:9b4fd5f07e10 | 143 | if(strstr(buf,PASSWORD)== NULL) |
stueckler | 5:9b4fd5f07e10 | 144 | return -1; |
stueckler | 5:9b4fd5f07e10 | 145 | |
stueckler | 5:9b4fd5f07e10 | 146 | char* rqstPnt = strstr(buf, "?sw="); |
stueckler | 5:9b4fd5f07e10 | 147 | if(rqstPnt == NULL) |
stueckler | 5:9b4fd5f07e10 | 148 | ret = 0; |
stueckler | 5:9b4fd5f07e10 | 149 | else |
stueckler | 5:9b4fd5f07e10 | 150 | sscanf(rqstPnt,"?sw=%d", &ret); |
stueckler | 5:9b4fd5f07e10 | 151 | |
stueckler | 5:9b4fd5f07e10 | 152 | if(ret == 1) |
stueckler | 5:9b4fd5f07e10 | 153 | sw = 1; // switch on |
stueckler | 5:9b4fd5f07e10 | 154 | else |
stueckler | 5:9b4fd5f07e10 | 155 | sw = 0; // switch off |
stueckler | 5:9b4fd5f07e10 | 156 | |
stueckler | 5:9b4fd5f07e10 | 157 | return ret; |
stueckler | 5:9b4fd5f07e10 | 158 | } |
stueckler | 5:9b4fd5f07e10 | 159 | |
stueckler | 5:9b4fd5f07e10 | 160 | |
stueckler | 5:9b4fd5f07e10 | 161 | void ESPconfig_Server() |
stueckler | 5:9b4fd5f07e10 | 162 | { |
stueckler | 5:9b4fd5f07e10 | 163 | |
stueckler | 5:9b4fd5f07e10 | 164 | pc.printf("------- Starting ESP Config -------\r\n\n"); |
stueckler | 5:9b4fd5f07e10 | 165 | pc.printf("------- Reset & get Firmware ------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 166 | strcpy(snd,"AT+RST\r\n"); |
stueckler | 5:9b4fd5f07e10 | 167 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 168 | GetReply(6000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 169 | |
stueckler | 5:9b4fd5f07e10 | 170 | |
stueckler | 5:9b4fd5f07e10 | 171 | pc.printf("\n---------- Get Version ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 172 | strcpy(snd,"AT+GMR\r\n"); |
stueckler | 5:9b4fd5f07e10 | 173 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 174 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 175 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 176 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 177 | |
stueckler | 5:9b4fd5f07e10 | 178 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
stueckler | 5:9b4fd5f07e10 | 179 | pc.printf("\n---------- Setting Mode ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 180 | strcpy(snd, "AT+CWMODE=2\r\n"); |
stueckler | 5:9b4fd5f07e10 | 181 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 182 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 183 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 184 | |
stueckler | 5:9b4fd5f07e10 | 185 | // set CIPMUX to 0=Single,1=Multi |
stueckler | 5:9b4fd5f07e10 | 186 | pc.printf("\n---- Setting Connection Mode -----\r\n"); |
stueckler | 5:9b4fd5f07e10 | 187 | strcpy(snd, "AT+CIPMUX=1\r\n"); |
stueckler | 5:9b4fd5f07e10 | 188 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 189 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 190 | |
stueckler | 5:9b4fd5f07e10 | 191 | |
stueckler | 5:9b4fd5f07e10 | 192 | |
stueckler | 5:9b4fd5f07e10 | 193 | pc.printf("\n------------ AP ------------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 194 | pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); |
stueckler | 5:9b4fd5f07e10 | 195 | strcpy(snd, "AT+CWSAP=\""); |
stueckler | 5:9b4fd5f07e10 | 196 | strcat(snd, ssid); |
stueckler | 5:9b4fd5f07e10 | 197 | strcat(snd, "\",\""); |
stueckler | 5:9b4fd5f07e10 | 198 | strcat(snd, pwd); |
stueckler | 5:9b4fd5f07e10 | 199 | strcat(snd, "\",4,0\r\n"); |
stueckler | 5:9b4fd5f07e10 | 200 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 201 | GetReply(8000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 202 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 203 | |
stueckler | 5:9b4fd5f07e10 | 204 | pc.printf("\n------- Set Server Port ------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 205 | sprintf(snd, "AT+CIPSERVER=1,%d\r\n", port); |
stueckler | 5:9b4fd5f07e10 | 206 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 207 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 208 | |
stueckler | 5:9b4fd5f07e10 | 209 | |
stueckler | 5:9b4fd5f07e10 | 210 | pc.printf("\n----- Set Server Timeout -----\r\n"); |
stueckler | 5:9b4fd5f07e10 | 211 | sprintf(snd,"AT+CIPSTO=%d\r\n", 5); |
stueckler | 5:9b4fd5f07e10 | 212 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 213 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 214 | |
stueckler | 5:9b4fd5f07e10 | 215 | |
stueckler | 5:9b4fd5f07e10 | 216 | pc.printf("\n---------- Get IP's ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 217 | strcpy(snd, "AT+CWSAP?\r\n"); |
stueckler | 5:9b4fd5f07e10 | 218 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 219 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 220 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 221 | |
stueckler | 5:9b4fd5f07e10 | 222 | strcpy(snd, "AT+CIFSR\r\n"); |
stueckler | 5:9b4fd5f07e10 | 223 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 224 | GetReply(2000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 225 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 226 | pc.printf("\n------- Connection Up --------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 227 | |
stueckler | 5:9b4fd5f07e10 | 228 | } |
stueckler | 5:9b4fd5f07e10 | 229 | |
stueckler | 5:9b4fd5f07e10 | 230 | void ESPconfig_Client() |
stueckler | 5:9b4fd5f07e10 | 231 | { |
stueckler | 5:9b4fd5f07e10 | 232 | |
stueckler | 5:9b4fd5f07e10 | 233 | pc.printf("---------- Starting ESP Config -----------\r\n\n"); |
stueckler | 5:9b4fd5f07e10 | 234 | pc.printf("---------- Reset & get Firmware ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 235 | strcpy(snd,"AT+RST\r\n"); |
stueckler | 5:9b4fd5f07e10 | 236 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 237 | GetReply(6000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 238 | |
stueckler | 5:9b4fd5f07e10 | 239 | |
stueckler | 5:9b4fd5f07e10 | 240 | pc.printf("\n---------- Get Version ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 241 | strcpy(snd,"AT+GMR\r\n"); |
stueckler | 5:9b4fd5f07e10 | 242 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 243 | GetReply(3000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 244 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 245 | |
stueckler | 5:9b4fd5f07e10 | 246 | // set CWMODE to 1=Station,2=AP,3=BOTH, default mode 1 (Station) |
stueckler | 5:9b4fd5f07e10 | 247 | pc.printf("\n---------- Setting Mode ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 248 | strcpy(snd, "AT+CWMODE=1\r\n"); |
stueckler | 5:9b4fd5f07e10 | 249 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 250 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 251 | |
stueckler | 5:9b4fd5f07e10 | 252 | |
stueckler | 5:9b4fd5f07e10 | 253 | // set CIPMUX to 0=Single,1=Multi |
stueckler | 5:9b4fd5f07e10 | 254 | pc.printf("\n-------- Setting Connection Mode ---------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 255 | strcpy(snd, "AT+CIPMUX=1\r\n"); |
stueckler | 5:9b4fd5f07e10 | 256 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 257 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 258 | |
stueckler | 5:9b4fd5f07e10 | 259 | |
stueckler | 5:9b4fd5f07e10 | 260 | pc.printf("\n---------- Listing Acces Points ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 261 | strcpy(snd, "AT+CWLAP\r\n"); |
stueckler | 5:9b4fd5f07e10 | 262 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 263 | GetReply(3000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 264 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 265 | |
stueckler | 5:9b4fd5f07e10 | 266 | pc.printf("\n---------- Connecting to AP ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 267 | pc.printf("ssid = %s pwd = %s\r\n",ssid,pwd); |
stueckler | 5:9b4fd5f07e10 | 268 | strcpy(snd, "AT+CWJAP=\""); |
stueckler | 5:9b4fd5f07e10 | 269 | strcat(snd, ssid); |
stueckler | 5:9b4fd5f07e10 | 270 | strcat(snd, "\",\""); |
stueckler | 5:9b4fd5f07e10 | 271 | strcat(snd, pwd); |
stueckler | 5:9b4fd5f07e10 | 272 | strcat(snd, "\"\r\n"); |
stueckler | 5:9b4fd5f07e10 | 273 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 274 | GetReply(8000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 275 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 276 | |
stueckler | 5:9b4fd5f07e10 | 277 | pc.printf("\n------ Set Server Port -------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 278 | sprintf(snd, "AT+CIPSERVER=1,%d\r\n", port); |
stueckler | 5:9b4fd5f07e10 | 279 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 280 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 281 | |
stueckler | 5:9b4fd5f07e10 | 282 | |
stueckler | 5:9b4fd5f07e10 | 283 | pc.printf("\n----- Set Server Timeout -----\r\n"); |
stueckler | 5:9b4fd5f07e10 | 284 | sprintf(snd,"AT+CIPSTO=%d\r\n", 5); |
stueckler | 5:9b4fd5f07e10 | 285 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 286 | GetReply(1000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 287 | |
stueckler | 5:9b4fd5f07e10 | 288 | |
stueckler | 5:9b4fd5f07e10 | 289 | pc.printf("\n---------- Get IP's ----------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 290 | int weberror = true; |
stueckler | 5:9b4fd5f07e10 | 291 | while(weberror) { // wait for valid IP |
stueckler | 5:9b4fd5f07e10 | 292 | strcpy(snd, "AT+CIFSR\r\n"); |
stueckler | 5:9b4fd5f07e10 | 293 | SendCMD(snd); |
stueckler | 5:9b4fd5f07e10 | 294 | GetReply(2000,buf,sizeof(buf)); |
stueckler | 5:9b4fd5f07e10 | 295 | pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 296 | if(strstr(buf, "0.0.0.0") == NULL) { |
stueckler | 5:9b4fd5f07e10 | 297 | weberror=false; |
stueckler | 5:9b4fd5f07e10 | 298 | } |
stueckler | 5:9b4fd5f07e10 | 299 | } |
stueckler | 5:9b4fd5f07e10 | 300 | |
stueckler | 5:9b4fd5f07e10 | 301 | pc.printf("\n------- Connection Up --------\r\n"); |
stueckler | 5:9b4fd5f07e10 | 302 | |
stueckler | 5:9b4fd5f07e10 | 303 | } |
stueckler | 5:9b4fd5f07e10 | 304 | |
stueckler | 5:9b4fd5f07e10 | 305 | void SendCMD(char *cmd) |
stueckler | 5:9b4fd5f07e10 | 306 | { |
stueckler | 5:9b4fd5f07e10 | 307 | esp.printf("%s", cmd); |
stueckler | 5:9b4fd5f07e10 | 308 | } |
stueckler | 5:9b4fd5f07e10 | 309 | |
stueckler | 5:9b4fd5f07e10 | 310 | void SendData(char *dat) |
stueckler | 5:9b4fd5f07e10 | 311 | { |
stueckler | 5:9b4fd5f07e10 | 312 | esp.printf("%s", dat); |
stueckler | 5:9b4fd5f07e10 | 313 | } |
stueckler | 5:9b4fd5f07e10 | 314 | |
stueckler | 5:9b4fd5f07e10 | 315 | void GetReply(int timeout, char *buf, int size) |
stueckler | 5:9b4fd5f07e10 | 316 | { |
stueckler | 5:9b4fd5f07e10 | 317 | char c; |
stueckler | 5:9b4fd5f07e10 | 318 | ended=0; |
stueckler | 5:9b4fd5f07e10 | 319 | count=0; |
stueckler | 5:9b4fd5f07e10 | 320 | t.start(); |
stueckler | 5:9b4fd5f07e10 | 321 | memset(buf, '\0', size); |
stueckler | 5:9b4fd5f07e10 | 322 | while(!ended) { |
stueckler | 5:9b4fd5f07e10 | 323 | if(esp.readable()) { |
stueckler | 5:9b4fd5f07e10 | 324 | c = esp.getc(); |
stueckler | 5:9b4fd5f07e10 | 325 | |
stueckler | 5:9b4fd5f07e10 | 326 | buf[count] = c; |
stueckler | 5:9b4fd5f07e10 | 327 | count++; |
stueckler | 5:9b4fd5f07e10 | 328 | |
stueckler | 5:9b4fd5f07e10 | 329 | if (c == '\r' || c == '\n') // OK will end |
stueckler | 5:9b4fd5f07e10 | 330 | { |
stueckler | 5:9b4fd5f07e10 | 331 | if (count > 2 && buf[count-3]== 'O' && buf[count-2] == 'K') |
stueckler | 5:9b4fd5f07e10 | 332 | { |
stueckler | 5:9b4fd5f07e10 | 333 | buf[count-1] = '\r'; |
stueckler | 5:9b4fd5f07e10 | 334 | buf[count] = '\n'; |
stueckler | 5:9b4fd5f07e10 | 335 | count = size; |
stueckler | 5:9b4fd5f07e10 | 336 | } |
stueckler | 5:9b4fd5f07e10 | 337 | } |
stueckler | 5:9b4fd5f07e10 | 338 | } |
stueckler | 5:9b4fd5f07e10 | 339 | |
stueckler | 5:9b4fd5f07e10 | 340 | if(t.read_ms() > timeout || count >= size) // Timeout or full |
stueckler | 5:9b4fd5f07e10 | 341 | { |
stueckler | 5:9b4fd5f07e10 | 342 | ended = 1; |
stueckler | 5:9b4fd5f07e10 | 343 | t.stop(); |
stueckler | 5:9b4fd5f07e10 | 344 | t.reset(); |
stueckler | 5:9b4fd5f07e10 | 345 | } |
stueckler | 5:9b4fd5f07e10 | 346 | } |
stueckler | 5:9b4fd5f07e10 | 347 | //pc.printf(buf); |
stueckler | 5:9b4fd5f07e10 | 348 | } |
stueckler | 5:9b4fd5f07e10 | 349 |