ESP2866 wifi webserver working in STA mode

Dependencies:   mbed

Committer:
kayemen
Date:
Tue May 24 14:37:14 2016 +0000
Revision:
0:6a3c0642ee31
Working version of wifi webserver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kayemen 0:6a3c0642ee31 1 // ESP8266 Static page WEB server to control Mbed
kayemen 0:6a3c0642ee31 2
kayemen 0:6a3c0642ee31 3 #include "mbed.h"
kayemen 0:6a3c0642ee31 4 //#include "DS18B20.h"
kayemen 0:6a3c0642ee31 5
kayemen 0:6a3c0642ee31 6 Serial pc(USBTX, USBRX);
kayemen 0:6a3c0642ee31 7 Serial esp(PTE0, PTE1); // tx, rx
kayemen 0:6a3c0642ee31 8
kayemen 0:6a3c0642ee31 9 //DS18B20 thermom(A0, DS18B20::RES_12_BIT);
kayemen 0:6a3c0642ee31 10
kayemen 0:6a3c0642ee31 11 // Standard Mbed LED definitions
kayemen 0:6a3c0642ee31 12 DigitalOut led1(LED_RED); // (PTB18)
kayemen 0:6a3c0642ee31 13 DigitalOut led2(LED_GREEN); // (PTB19)
kayemen 0:6a3c0642ee31 14 DigitalOut led3(LED_BLUE); // (PTD1)
kayemen 0:6a3c0642ee31 15
kayemen 0:6a3c0642ee31 16 // Digital Out and In pins, can be configured to any suitable pin depending on Platform
kayemen 0:6a3c0642ee31 17 DigitalOut Out1(D7);
kayemen 0:6a3c0642ee31 18 DigitalOut Out2(D8);
kayemen 0:6a3c0642ee31 19 DigitalOut Out3(D4);
kayemen 0:6a3c0642ee31 20
kayemen 0:6a3c0642ee31 21 DigitalIn In1(A2);
kayemen 0:6a3c0642ee31 22 DigitalIn In2(A3);
kayemen 0:6a3c0642ee31 23 DigitalIn In3(A4);
kayemen 0:6a3c0642ee31 24
kayemen 0:6a3c0642ee31 25 PwmOut speaker(D5);
kayemen 0:6a3c0642ee31 26 AnalogIn BATin(A1);
kayemen 0:6a3c0642ee31 27
kayemen 0:6a3c0642ee31 28 Timer t1;
kayemen 0:6a3c0642ee31 29 Timer t2;
kayemen 0:6a3c0642ee31 30
kayemen 0:6a3c0642ee31 31 struct tm t;
kayemen 0:6a3c0642ee31 32
kayemen 0:6a3c0642ee31 33 int bufflen, DataRX, count, getcount, replycount, servreq, timeout;
kayemen 0:6a3c0642ee31 34 int bufl, ipdLen, linkID, weberror, webcounter;
kayemen 0:6a3c0642ee31 35 float temperature, AdcIn, Ht;
kayemen 0:6a3c0642ee31 36 float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage
kayemen 0:6a3c0642ee31 37 char Vcc[10];
kayemen 0:6a3c0642ee31 38 char Temp[10];
kayemen 0:6a3c0642ee31 39 char temp[10];
kayemen 0:6a3c0642ee31 40 char webcount[8];
kayemen 0:6a3c0642ee31 41 char lasthit[30];
kayemen 0:6a3c0642ee31 42 char timebuf[30];
kayemen 0:6a3c0642ee31 43 char type[16];
kayemen 0:6a3c0642ee31 44 char type1[16];
kayemen 0:6a3c0642ee31 45 char channel[2];
kayemen 0:6a3c0642ee31 46 char cmdbuff[32];
kayemen 0:6a3c0642ee31 47 char replybuff[512];
kayemen 0:6a3c0642ee31 48 char webdata[1024]; // This may need to be bigger depending on WEB browser used
kayemen 0:6a3c0642ee31 49 char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added
kayemen 0:6a3c0642ee31 50
kayemen 0:6a3c0642ee31 51 void SendCMD(),getreply(),ReadWebData(),startserver(),sendpage(),SendWEB(),sendcheck();
kayemen 0:6a3c0642ee31 52 void gettime(),gettemp(),getbattery(),setRTC(),beep();
kayemen 0:6a3c0642ee31 53
kayemen 0:6a3c0642ee31 54 // manual set RTC values
kayemen 0:6a3c0642ee31 55 int minute =20; // 0-59
kayemen 0:6a3c0642ee31 56 int hour =9; // 2-23
kayemen 0:6a3c0642ee31 57 int dayofmonth =20; // 1-31
kayemen 0:6a3c0642ee31 58 int month =2; // 1-12
kayemen 0:6a3c0642ee31 59 int year =15; // last 2 digits
kayemen 0:6a3c0642ee31 60
kayemen 0:6a3c0642ee31 61 int port =8266; // set server port
kayemen 0:6a3c0642ee31 62 int SERVtimeout =5; // set server timeout in seconds incase link breaks.
kayemen 0:6a3c0642ee31 63
kayemen 0:6a3c0642ee31 64 // Serial Interrupt read ESP data
kayemen 0:6a3c0642ee31 65 void callback() {
kayemen 0:6a3c0642ee31 66 while (esp.readable()) {webbuff[count] = esp.getc();count++;}
kayemen 0:6a3c0642ee31 67 if(strlen(webbuff)>bufflen){DataRX=1;}
kayemen 0:6a3c0642ee31 68 }
kayemen 0:6a3c0642ee31 69
kayemen 0:6a3c0642ee31 70 int main() {
kayemen 0:6a3c0642ee31 71 led1=1,led2=1,led3=1;
kayemen 0:6a3c0642ee31 72 pc.baud(9600);
kayemen 0:6a3c0642ee31 73 esp.baud(115200); // ESP8266 baudrate. Maximum on KLxx' is 115200, 230400 works on K20 and K22F
kayemen 0:6a3c0642ee31 74 if (time(NULL) < 1420070400) {setRTC();}
kayemen 0:6a3c0642ee31 75 beep();
kayemen 0:6a3c0642ee31 76 startserver();
kayemen 0:6a3c0642ee31 77
kayemen 0:6a3c0642ee31 78 while(1){
kayemen 0:6a3c0642ee31 79 if(DataRX==1){
kayemen 0:6a3c0642ee31 80 ReadWebData();
kayemen 0:6a3c0642ee31 81 beep();
kayemen 0:6a3c0642ee31 82 if (servreq == 1 && weberror == 0){sendpage();}
kayemen 0:6a3c0642ee31 83 esp.attach(&callback);
kayemen 0:6a3c0642ee31 84 pc.printf(" IPD Data:\r\n\n Link ID = %d,\r\n IPD Header Length = %d \r\n IPD Type = %s\r\n", linkID, ipdLen, type);
kayemen 0:6a3c0642ee31 85 pc.printf("\n\n HTTP Packet: \n\n%s\n", webdata);
kayemen 0:6a3c0642ee31 86 pc.printf(" Web Characters sent : %d\n\n", bufl);
kayemen 0:6a3c0642ee31 87 pc.printf(" -------------------------------------\n\n");
kayemen 0:6a3c0642ee31 88 strcpy(lasthit, timebuf);
kayemen 0:6a3c0642ee31 89 servreq=0;
kayemen 0:6a3c0642ee31 90 }
kayemen 0:6a3c0642ee31 91 }
kayemen 0:6a3c0642ee31 92 }
kayemen 0:6a3c0642ee31 93 // Static WEB page
kayemen 0:6a3c0642ee31 94 void sendpage()
kayemen 0:6a3c0642ee31 95 {
kayemen 0:6a3c0642ee31 96 gettemp();
kayemen 0:6a3c0642ee31 97 getbattery();gettime();
kayemen 0:6a3c0642ee31 98
kayemen 0:6a3c0642ee31 99 // WEB page data
kayemen 0:6a3c0642ee31 100 strcpy(webbuff, "<!DOCTYPE html>");
kayemen 0:6a3c0642ee31 101 strcat(webbuff, "<html><head><title>ESP8266 Mbed</title></head>");
kayemen 0:6a3c0642ee31 102 strcat(webbuff, "<body>");
kayemen 0:6a3c0642ee31 103 strcat(webbuff, "<div style=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h1>ESP8266 Mbed Web Controller</h1>");
kayemen 0:6a3c0642ee31 104 strcat(webbuff, "Hit Count - ");
kayemen 0:6a3c0642ee31 105 strcat(webbuff, webcount);
kayemen 0:6a3c0642ee31 106 strcat(webbuff, "<br>Last Hit - ");
kayemen 0:6a3c0642ee31 107 strcat(webbuff, lasthit);
kayemen 0:6a3c0642ee31 108 strcat(webbuff, "</div><br /><hr>");
kayemen 0:6a3c0642ee31 109 strcat(webbuff, "<h3>Mbed RTC Time -&nbsp&nbsp");
kayemen 0:6a3c0642ee31 110 strcat(webbuff, timebuf);
kayemen 0:6a3c0642ee31 111 strcat(webbuff, "</h3>\r\n");
kayemen 0:6a3c0642ee31 112 strcat(webbuff, "<p><form method=\"POST\"><strong> Temperature:&nbsp&nbsp<input type=\"text\" size=6 value=\"");
kayemen 0:6a3c0642ee31 113 strcat(webbuff, Temp);
kayemen 0:6a3c0642ee31 114 strcat(webbuff, "\"> <sup>O</sup>C <form method=\"POST\"> <strong> &nbsp&nbspBattery:&nbsp&nbsp<input type=\"text\" size=4 value=\"");
kayemen 0:6a3c0642ee31 115 strcat(webbuff, Vcc);
kayemen 0:6a3c0642ee31 116 strcat(webbuff, "\"> </sup>V");
kayemen 0:6a3c0642ee31 117 if(led1==1){strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" checked> Red LED off");
kayemen 0:6a3c0642ee31 118 strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" > Red LED on");}
kayemen 0:6a3c0642ee31 119 else{strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" > Red LED off");
kayemen 0:6a3c0642ee31 120 strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" checked> Red LED on");}
kayemen 0:6a3c0642ee31 121 if(Out1==0){strcat(webbuff, "<p><input type=\"radio\" name=\"Out1\" value=\"0\" checked> Digital Out 1 off");
kayemen 0:6a3c0642ee31 122 strcat(webbuff, "<br><input type=\"radio\" name=\"Out1\" value=\"1\" > Digital Out 1 on");}
kayemen 0:6a3c0642ee31 123 else{strcat(webbuff, "<p><input type=\"radio\" name=\"Out1\" value=\"0\" > Digital Out 1 off");
kayemen 0:6a3c0642ee31 124 strcat(webbuff, "<br><input type=\"radio\" name=\"Out1\" value=\"1\" checked> Digital Out 1 on");}
kayemen 0:6a3c0642ee31 125 if(Out2==0){strcat(webbuff, "<p><input type=\"radio\" name=\"Out2\" value=\"0\" checked> Digital Out 2 off");
kayemen 0:6a3c0642ee31 126 strcat(webbuff, "<br><input type=\"radio\" name=\"Out2\" value=\"1\" > Digital Out 2 on");}
kayemen 0:6a3c0642ee31 127 else{strcat(webbuff, "<p><input type=\"radio\" name=\"Out2\" value=\"0\" > Digital Out 2 off");
kayemen 0:6a3c0642ee31 128 strcat(webbuff, "<br><input type=\"radio\" name=\"Out2\" value=\"1\" checked> Digital Out 2 on");}
kayemen 0:6a3c0642ee31 129 if(Out3==0){strcat(webbuff, "<p><input type=\"radio\" name=\"Out3\" value=\"0\" checked> Digital Out 3 off");
kayemen 0:6a3c0642ee31 130 strcat(webbuff, "<br><input type=\"radio\" name=\"Out3\" value=\"1\" > Digital Out 3 on");}
kayemen 0:6a3c0642ee31 131 else{strcat(webbuff, "<p><input type=\"radio\" name=\"Out3\" value=\"0\" > Digital Out 3 off");
kayemen 0:6a3c0642ee31 132 strcat(webbuff, "<br><input type=\"radio\" name=\"Out3\" value=\"1\" checked> Digital Out 3 on");}
kayemen 0:6a3c0642ee31 133 if(In1==0){strcat(webbuff, "<p><input type=\"radio\" name=\"In1\" value=\"0\" > Digital In 1");}
kayemen 0:6a3c0642ee31 134 else{strcat(webbuff, "<p><input type=\"radio\" name=\"In1\" value=\"1\" checked> Digital In 1");}
kayemen 0:6a3c0642ee31 135 if(In2==0){strcat(webbuff, "<br><input type=\"radio\" name=\"In2\" value=\"0\" > Digital In 2");}
kayemen 0:6a3c0642ee31 136 else{strcat(webbuff, "<br><input type=\"radio\" name=\"In2\" value=\"1\" checked> Digital In 2");}
kayemen 0:6a3c0642ee31 137 if(In3==0){strcat(webbuff, "<br><input type=\"radio\" name=\"In3\" value=\"0\" > Digital In 3");}
kayemen 0:6a3c0642ee31 138 else{strcat(webbuff, "<br><input type=\"radio\" name=\"In3\" value=\"1\" checked> Digital In 3");}
kayemen 0:6a3c0642ee31 139 strcat(webbuff, "</strong><p><input type=\"submit\" value=\"send-refresh\" style=\"background: #3498db;");
kayemen 0:6a3c0642ee31 140 strcat(webbuff, "background-image:-webkit-linear-gradient(top, #3498db, #2980b9);");
kayemen 0:6a3c0642ee31 141 strcat(webbuff, "background-image:linear-gradient(to bottom, #3498db, #2980b9);");
kayemen 0:6a3c0642ee31 142 strcat(webbuff, "-webkit-border-radius:12;border-radius: 12px;font-family: Arial;color:#ffffff;font-size:20px;padding:");
kayemen 0:6a3c0642ee31 143 strcat(webbuff, "10px 20px 10px 20px; border:solid #103c57 3px;text-decoration: none;");
kayemen 0:6a3c0642ee31 144 strcat(webbuff, "background: #3cb0fd;");
kayemen 0:6a3c0642ee31 145 strcat(webbuff, "background-image:-webkit-linear-gradient(top,#3cb0fd,#1a5f8a);");
kayemen 0:6a3c0642ee31 146 strcat(webbuff, "background-image:linear-gradient(to bottom,#3cb0fd,#1a5f8a);");
kayemen 0:6a3c0642ee31 147 strcat(webbuff, "text-decoration:none;\"></form></span>");
kayemen 0:6a3c0642ee31 148 strcat(webbuff, "<p/><h2>How to use:</h2><ul>");
kayemen 0:6a3c0642ee31 149 strcat(webbuff, "<li>Select the Radio buttons to control the digital out pins.</li>");
kayemen 0:6a3c0642ee31 150 strcat(webbuff, "<li>Click 'Send-Refresh' to send.</li>");
kayemen 0:6a3c0642ee31 151 strcat(webbuff, "<li>Use the 'Send-Refresh' button to refresh the data.</li>");
kayemen 0:6a3c0642ee31 152 strcat(webbuff, "</ul>");
kayemen 0:6a3c0642ee31 153 strcat(webbuff, "</body></html>");
kayemen 0:6a3c0642ee31 154 // end of WEB page data
kayemen 0:6a3c0642ee31 155 bufl = strlen(webbuff); // get total page buffer length
kayemen 0:6a3c0642ee31 156 sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length.
kayemen 0:6a3c0642ee31 157 timeout=200;getcount=7;
kayemen 0:6a3c0642ee31 158 SendCMD();
kayemen 0:6a3c0642ee31 159 getreply();
kayemen 0:6a3c0642ee31 160 SendWEB(); // send web page
kayemen 0:6a3c0642ee31 161 memset(webbuff, '\0', sizeof(webbuff));
kayemen 0:6a3c0642ee31 162 sendcheck();
kayemen 0:6a3c0642ee31 163 }
kayemen 0:6a3c0642ee31 164
kayemen 0:6a3c0642ee31 165 // wait for ESP "SEND OK" reply, then close IP to load web page
kayemen 0:6a3c0642ee31 166 void sendcheck()
kayemen 0:6a3c0642ee31 167 {
kayemen 0:6a3c0642ee31 168 weberror=1;timeout=500;getcount=24;
kayemen 0:6a3c0642ee31 169 t2.reset();t2.start();
kayemen 0:6a3c0642ee31 170 while(weberror==1 && t2.read() <5){
kayemen 0:6a3c0642ee31 171 getreply();
kayemen 0:6a3c0642ee31 172 if (strstr(replybuff, "SEND OK") != NULL) {weberror=0;} // wait for valid SEND OK
kayemen 0:6a3c0642ee31 173 }
kayemen 0:6a3c0642ee31 174 if(weberror==1){ // restart connection
kayemen 0:6a3c0642ee31 175 strcpy(cmdbuff, "AT+CIPMUX=1\r\n");
kayemen 0:6a3c0642ee31 176 timeout=500;getcount=10;
kayemen 0:6a3c0642ee31 177 SendCMD();getreply();
kayemen 0:6a3c0642ee31 178 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
kayemen 0:6a3c0642ee31 179 timeout=500;getcount=10;
kayemen 0:6a3c0642ee31 180 SendCMD();getreply();
kayemen 0:6a3c0642ee31 181 }
kayemen 0:6a3c0642ee31 182 else{
kayemen 0:6a3c0642ee31 183 sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection
kayemen 0:6a3c0642ee31 184 SendCMD();}
kayemen 0:6a3c0642ee31 185 t2.reset();
kayemen 0:6a3c0642ee31 186 }
kayemen 0:6a3c0642ee31 187
kayemen 0:6a3c0642ee31 188 // Reads and processes GET and POST web data
kayemen 0:6a3c0642ee31 189 void ReadWebData()
kayemen 0:6a3c0642ee31 190 {
kayemen 0:6a3c0642ee31 191 wait_ms(200);
kayemen 0:6a3c0642ee31 192 esp.attach(NULL);
kayemen 0:6a3c0642ee31 193 count=0;DataRX=0;weberror=0;
kayemen 0:6a3c0642ee31 194 memset(webdata, '\0', sizeof(webdata));
kayemen 0:6a3c0642ee31 195 int x = strcspn (webbuff,"+");
kayemen 0:6a3c0642ee31 196 if(x){
kayemen 0:6a3c0642ee31 197 strcpy(webdata, webbuff + x);weberror=0;
kayemen 0:6a3c0642ee31 198 int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
kayemen 0:6a3c0642ee31 199 if( strstr(webdata, "led1=1") != NULL ) {led1=0;}
kayemen 0:6a3c0642ee31 200 if( strstr(webdata, "led1=0") != NULL ) {led1=1;}
kayemen 0:6a3c0642ee31 201 if( strstr(webdata, "Out1=1") != NULL ) {Out1=1;}
kayemen 0:6a3c0642ee31 202 if( strstr(webdata, "Out1=0") != NULL ) {Out1=0;}
kayemen 0:6a3c0642ee31 203 if( strstr(webdata, "Out2=1") != NULL ) {Out2=1;}
kayemen 0:6a3c0642ee31 204 if( strstr(webdata, "Out2=0") != NULL ) {Out2=0;}
kayemen 0:6a3c0642ee31 205 if( strstr(webdata, "Out3=1") != NULL ) {Out3=1;}
kayemen 0:6a3c0642ee31 206 if( strstr(webdata, "Out3=0") != NULL ) {Out3=0;}
kayemen 0:6a3c0642ee31 207 sprintf(channel, "%d",linkID);
kayemen 0:6a3c0642ee31 208 if (strstr(webdata, "GET") != NULL) {servreq=1;}
kayemen 0:6a3c0642ee31 209 if (strstr(webdata, "POST") != NULL) {servreq=1;}
kayemen 0:6a3c0642ee31 210 webcounter++;
kayemen 0:6a3c0642ee31 211 sprintf(webcount, "%d",webcounter);
kayemen 0:6a3c0642ee31 212 }
kayemen 0:6a3c0642ee31 213 else {
kayemen 0:6a3c0642ee31 214 memset(webbuff, '\0', sizeof(webbuff));
kayemen 0:6a3c0642ee31 215 esp.attach(&callback);weberror=1;
kayemen 0:6a3c0642ee31 216 }
kayemen 0:6a3c0642ee31 217 }
kayemen 0:6a3c0642ee31 218 // Starts and restarts webserver if errors detected.
kayemen 0:6a3c0642ee31 219 void startserver()
kayemen 0:6a3c0642ee31 220 {
kayemen 0:6a3c0642ee31 221 gettemp();gettime();
kayemen 0:6a3c0642ee31 222 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
kayemen 0:6a3c0642ee31 223 strcpy(cmdbuff,"AT+RST\r\n");
kayemen 0:6a3c0642ee31 224 timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 225 SendCMD();
kayemen 0:6a3c0642ee31 226 getreply();
kayemen 0:6a3c0642ee31 227 pc.printf(replybuff);
kayemen 0:6a3c0642ee31 228 pc.printf("%d",count);
kayemen 0:6a3c0642ee31 229 wait(0.2);
kayemen 0:6a3c0642ee31 230 if (strstr(replybuff, "OK") != NULL) {
kayemen 0:6a3c0642ee31 231 strcpy(cmdbuff,"AT+CIPMODE=0\r\n");
kayemen 0:6a3c0642ee31 232 timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 233 SendCMD();
kayemen 0:6a3c0642ee31 234 getreply();
kayemen 0:6a3c0642ee31 235 wait(0.2);
kayemen 0:6a3c0642ee31 236 pc.printf("CIPMODE reply %s \r\n",replybuff);
kayemen 0:6a3c0642ee31 237 pc.printf("%d",count);
kayemen 0:6a3c0642ee31 238
kayemen 0:6a3c0642ee31 239 strcpy(cmdbuff,"AT+CWJAP=\"Eduvance_WiFi\",\"eduvance\"\r\n");
kayemen 0:6a3c0642ee31 240 timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 241 SendCMD();
kayemen 0:6a3c0642ee31 242 getreply();
kayemen 0:6a3c0642ee31 243 wait(0.2);
kayemen 0:6a3c0642ee31 244 pc.printf("CWJAP reply %s \r\n",replybuff);
kayemen 0:6a3c0642ee31 245 pc.printf("%d",count);
kayemen 0:6a3c0642ee31 246 }
kayemen 0:6a3c0642ee31 247
kayemen 0:6a3c0642ee31 248 pc.printf("\n\n RTC time %s\r\n\n",timebuf);
kayemen 0:6a3c0642ee31 249 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
kayemen 0:6a3c0642ee31 250 strcpy(cmdbuff,"AT+RST\r\n");
kayemen 0:6a3c0642ee31 251 timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 252 SendCMD();
kayemen 0:6a3c0642ee31 253 getreply();
kayemen 0:6a3c0642ee31 254 pc.printf(replybuff);
kayemen 0:6a3c0642ee31 255 pc.printf("%d",count);
kayemen 0:6a3c0642ee31 256 wait(0.2);
kayemen 0:6a3c0642ee31 257 if (strstr(replybuff, "OK") != NULL) {
kayemen 0:6a3c0642ee31 258 // strcpy(cmdbuff,"ATE0\r\n");
kayemen 0:6a3c0642ee31 259 // timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 260 // SendCMD();
kayemen 0:6a3c0642ee31 261 // getreply();
kayemen 0:6a3c0642ee31 262 // pc.printf(replybuff);
kayemen 0:6a3c0642ee31 263 // pc.printf("%d",count);
kayemen 0:6a3c0642ee31 264
kayemen 0:6a3c0642ee31 265 strcpy(cmdbuff,"AT+CWMODE=3\r\n");
kayemen 0:6a3c0642ee31 266 timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 267 SendCMD();
kayemen 0:6a3c0642ee31 268 getreply();
kayemen 0:6a3c0642ee31 269 wait(0.2);
kayemen 0:6a3c0642ee31 270 pc.printf("CWMODE reply %s \r\n", replybuff);
kayemen 0:6a3c0642ee31 271 // pc.printf("%d",count);
kayemen 0:6a3c0642ee31 272
kayemen 0:6a3c0642ee31 273
kayemen 0:6a3c0642ee31 274 pc.printf("\n++++++++++ Starting Server ++++++++++\r\n");
kayemen 0:6a3c0642ee31 275 strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections.
kayemen 0:6a3c0642ee31 276 timeout=500;getcount=10;
kayemen 0:6a3c0642ee31 277 SendCMD();
kayemen 0:6a3c0642ee31 278 getreply();
kayemen 0:6a3c0642ee31 279 wait(0.2);
kayemen 0:6a3c0642ee31 280 pc.printf("CIMUX reply %s \r\n",replybuff);
kayemen 0:6a3c0642ee31 281
kayemen 0:6a3c0642ee31 282 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
kayemen 0:6a3c0642ee31 283 timeout=500;getcount=10;
kayemen 0:6a3c0642ee31 284 SendCMD();
kayemen 0:6a3c0642ee31 285 getreply();
kayemen 0:6a3c0642ee31 286 wait(0.2);
kayemen 0:6a3c0642ee31 287 pc.printf("CIPSERVER reply %s \r\n",replybuff);
kayemen 0:6a3c0642ee31 288
kayemen 0:6a3c0642ee31 289 sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout);
kayemen 0:6a3c0642ee31 290 timeout=500;getcount=50;
kayemen 0:6a3c0642ee31 291 SendCMD();
kayemen 0:6a3c0642ee31 292 getreply();
kayemen 0:6a3c0642ee31 293 wait(0.2);
kayemen 0:6a3c0642ee31 294 pc.printf("\n Getting Server IP \r\n");
kayemen 0:6a3c0642ee31 295 strcpy(cmdbuff, "AT+CIFSR\r\n");
kayemen 0:6a3c0642ee31 296 timeout=1000;getcount=50;
kayemen 0:6a3c0642ee31 297 while(weberror==0){
kayemen 0:6a3c0642ee31 298 SendCMD();getreply();
kayemen 0:6a3c0642ee31 299 wait(0.2);
kayemen 0:6a3c0642ee31 300 if (strstr(replybuff, "0.0.0.0") == NULL) {weberror=1;} // wait for valid IP
kayemen 0:6a3c0642ee31 301 }
kayemen 0:6a3c0642ee31 302 pc.printf("\n Enter WEB address in your browser \r\n\n");
kayemen 0:6a3c0642ee31 303 replybuff[strlen(replybuff) - 8] = '\0';
kayemen 0:6a3c0642ee31 304 char* IP = replybuff + 5;
kayemen 0:6a3c0642ee31 305 sprintf(webdata," http://%s:%d", IP, port);
kayemen 0:6a3c0642ee31 306 pc.printf(webdata);
kayemen 0:6a3c0642ee31 307 led2=0;wait(2);led2=1;
kayemen 0:6a3c0642ee31 308 bufflen=200;count=0;
kayemen 0:6a3c0642ee31 309 pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
kayemen 0:6a3c0642ee31 310
kayemen 0:6a3c0642ee31 311 strcpy(cmdbuff,"AT+CIPSTATUS\r\n");
kayemen 0:6a3c0642ee31 312 timeout=2000;getcount=600;
kayemen 0:6a3c0642ee31 313 SendCMD();
kayemen 0:6a3c0642ee31 314 getreply();
kayemen 0:6a3c0642ee31 315 wait(1);
kayemen 0:6a3c0642ee31 316 pc.printf("CIPSTATUS reply %s \r\n",replybuff);
kayemen 0:6a3c0642ee31 317
kayemen 0:6a3c0642ee31 318 esp.attach(&callback);
kayemen 0:6a3c0642ee31 319 }
kayemen 0:6a3c0642ee31 320 else{
kayemen 0:6a3c0642ee31 321 pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
kayemen 0:6a3c0642ee31 322 while(1){}
kayemen 0:6a3c0642ee31 323 }
kayemen 0:6a3c0642ee31 324 t2.reset();t2.start();beep();
kayemen 0:6a3c0642ee31 325 }
kayemen 0:6a3c0642ee31 326 // ESP Command data send
kayemen 0:6a3c0642ee31 327 void SendCMD()
kayemen 0:6a3c0642ee31 328 {
kayemen 0:6a3c0642ee31 329 esp.printf("%s", cmdbuff);
kayemen 0:6a3c0642ee31 330 }
kayemen 0:6a3c0642ee31 331 // Large WEB buffer data send
kayemen 0:6a3c0642ee31 332 void SendWEB()
kayemen 0:6a3c0642ee31 333 {
kayemen 0:6a3c0642ee31 334 int i=0;
kayemen 0:6a3c0642ee31 335 if(esp.writeable()) {
kayemen 0:6a3c0642ee31 336 while(webbuff[i]!='\0') {esp.putc(webbuff[i]);i++;}
kayemen 0:6a3c0642ee31 337 }
kayemen 0:6a3c0642ee31 338 }
kayemen 0:6a3c0642ee31 339 // Get Cammand and ESP status replies
kayemen 0:6a3c0642ee31 340 void getreply()
kayemen 0:6a3c0642ee31 341 {
kayemen 0:6a3c0642ee31 342 memset(replybuff, '\0', sizeof(replybuff));
kayemen 0:6a3c0642ee31 343 t1.reset(); t1.start();replycount=0;
kayemen 0:6a3c0642ee31 344 while(t1.read_ms()< timeout && replycount < getcount) {
kayemen 0:6a3c0642ee31 345 if(esp.readable()) {
kayemen 0:6a3c0642ee31 346 replybuff[replycount] = esp.getc();replycount++;
kayemen 0:6a3c0642ee31 347 }
kayemen 0:6a3c0642ee31 348 }
kayemen 0:6a3c0642ee31 349 t1.stop();
kayemen 0:6a3c0642ee31 350 }
kayemen 0:6a3c0642ee31 351 // Analog in example
kayemen 0:6a3c0642ee31 352 void getbattery()
kayemen 0:6a3c0642ee31 353 {
kayemen 0:6a3c0642ee31 354 AdcIn=BATin.read();
kayemen 0:6a3c0642ee31 355 Ht = (AdcIn*3.328f*(R1+R2)/R2); // set the numeric to the exact MCU analog reference voltage for greater accuracy
kayemen 0:6a3c0642ee31 356 sprintf(Vcc,"%2.3f",Ht);
kayemen 0:6a3c0642ee31 357 }
kayemen 0:6a3c0642ee31 358 // Temperature example
kayemen 0:6a3c0642ee31 359 void gettemp()
kayemen 0:6a3c0642ee31 360 {
kayemen 0:6a3c0642ee31 361 // temperature=thermom.GetTemperature(); // comment this out if no sensor connected
kayemen 0:6a3c0642ee31 362 temperature = 21.357; // include for dummy value
kayemen 0:6a3c0642ee31 363 sprintf(Temp,"%3.3f",temperature);
kayemen 0:6a3c0642ee31 364 }
kayemen 0:6a3c0642ee31 365 // Get RTC time
kayemen 0:6a3c0642ee31 366 void gettime()
kayemen 0:6a3c0642ee31 367 {
kayemen 0:6a3c0642ee31 368 time_t seconds = time(NULL);
kayemen 0:6a3c0642ee31 369 strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds));
kayemen 0:6a3c0642ee31 370 }
kayemen 0:6a3c0642ee31 371
kayemen 0:6a3c0642ee31 372 void beep()
kayemen 0:6a3c0642ee31 373 {
kayemen 0:6a3c0642ee31 374 speaker.period(1.0/2000); // 2000hz period
kayemen 0:6a3c0642ee31 375 speaker = 0.5; //50% duty cycle - max volume
kayemen 0:6a3c0642ee31 376 wait_ms(60);
kayemen 0:6a3c0642ee31 377 speaker=0.0; // turn off audio
kayemen 0:6a3c0642ee31 378 }
kayemen 0:6a3c0642ee31 379
kayemen 0:6a3c0642ee31 380 void setRTC()
kayemen 0:6a3c0642ee31 381 {
kayemen 0:6a3c0642ee31 382 t.tm_sec = (0); // 0-59
kayemen 0:6a3c0642ee31 383 t.tm_min = (minute); // 0-59
kayemen 0:6a3c0642ee31 384 t.tm_hour = (hour); // 0-23
kayemen 0:6a3c0642ee31 385 t.tm_mday = (dayofmonth); // 1-31
kayemen 0:6a3c0642ee31 386 t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format
kayemen 0:6a3c0642ee31 387 t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year
kayemen 0:6a3c0642ee31 388 set_time(mktime(&t)); // set RTC clock
kayemen 0:6a3c0642ee31 389 }
kayemen 0:6a3c0642ee31 390
kayemen 0:6a3c0642ee31 391