wifi

Dependencies:   mbed

Committer:
faker_71
Date:
Tue Jul 21 06:42:34 2020 +0000
Revision:
5:dfea6fd1abba
Parent:
4:40dd020463ea
wifi

Who changed what in which revision?

UserRevisionLine numberNew contents of line
star297 0:e2a155f50119 1 // ESP8266 Static page WEB server to control Mbed
star297 0:e2a155f50119 2
star297 0:e2a155f50119 3 #include "mbed.h"
4180_1 4:40dd020463ea 4 //#include "DS18B20.h"
star297 0:e2a155f50119 5
star297 0:e2a155f50119 6 Serial pc(USBTX, USBRX);
4180_1 4:40dd020463ea 7 Serial esp(p28, p27); // tx, rx
star297 0:e2a155f50119 8
4180_1 4:40dd020463ea 9 //DS18B20 thermom(A0, DS18B20::RES_12_BIT);
star297 2:d4c6bc0f2dc4 10
star297 0:e2a155f50119 11 // Standard Mbed LED definitions
4180_1 4:40dd020463ea 12 DigitalOut led1(LED1); // (PTB18)
4180_1 4:40dd020463ea 13 DigitalOut led2(LED2); // (PTB19)
4180_1 4:40dd020463ea 14 DigitalOut led3(LED3); // (PTD1)
star297 0:e2a155f50119 15
star297 0:e2a155f50119 16 // Digital Out and In pins, can be configured to any suitable pin depending on Platform
4180_1 4:40dd020463ea 17 DigitalOut Out1(p6);
4180_1 4:40dd020463ea 18 DigitalOut Out2(p7);
4180_1 4:40dd020463ea 19 DigitalOut Out3(p8);
4180_1 4:40dd020463ea 20 DigitalOut reset(p26);
star297 0:e2a155f50119 21
faker_71 5:dfea6fd1abba 22
faker_71 5:dfea6fd1abba 23 DigitalOut ledR(p17);
faker_71 5:dfea6fd1abba 24 DigitalOut ledG(p16);
faker_71 5:dfea6fd1abba 25
4180_1 4:40dd020463ea 26 DigitalIn In1(p9);
4180_1 4:40dd020463ea 27 DigitalIn In2(p10);
4180_1 4:40dd020463ea 28 DigitalIn In3(p11);
star297 0:e2a155f50119 29
4180_1 4:40dd020463ea 30 PwmOut speaker(p21);
4180_1 4:40dd020463ea 31 AnalogIn Ain1(p18);
4180_1 4:40dd020463ea 32 AnalogIn Ain2(p19);
star297 0:e2a155f50119 33
star297 0:e2a155f50119 34 Timer t1;
star297 1:71ed1afbf344 35 Timer t2;
star297 1:71ed1afbf344 36
star297 1:71ed1afbf344 37 struct tm t;
star297 0:e2a155f50119 38
star297 3:f7febfa77784 39 int bufflen, DataRX, count, getcount, replycount, servreq, timeout;
star297 2:d4c6bc0f2dc4 40 int bufl, ipdLen, linkID, weberror, webcounter;
4180_1 4:40dd020463ea 41 float temperature, AdcIn, Ht;
star297 0:e2a155f50119 42 float R1=100000, R2=10000; // resistor values to give a 10:1 reduction of measured AnalogIn voltage
star297 0:e2a155f50119 43 char Vcc[10];
star297 0:e2a155f50119 44 char Temp[10];
star297 0:e2a155f50119 45 char temp[10];
star297 2:d4c6bc0f2dc4 46 char webcount[8];
star297 3:f7febfa77784 47 char lasthit[30];
star297 0:e2a155f50119 48 char timebuf[30];
star297 0:e2a155f50119 49 char type[16];
star297 0:e2a155f50119 50 char type1[16];
star297 0:e2a155f50119 51 char channel[2];
star297 3:f7febfa77784 52 char cmdbuff[32];
4180_1 4:40dd020463ea 53 char replybuff[1024];
faker_71 5:dfea6fd1abba 54
faker_71 5:dfea6fd1abba 55 //char webdata[1024]; // This may need to be bigger depending on WEB browser used
faker_71 5:dfea6fd1abba 56 //char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added
faker_71 5:dfea6fd1abba 57
faker_71 5:dfea6fd1abba 58 char webdata[4096]; // This may need to be bigger depending on WEB browser used
faker_71 5:dfea6fd1abba 59 char webbuff[4096*4]; // Currently using 1986 characters, Increase this if more web page data added
faker_71 5:dfea6fd1abba 60
star297 0:e2a155f50119 61
star297 0:e2a155f50119 62 void SendCMD(),getreply(),ReadWebData(),startserver(),sendpage(),SendWEB(),sendcheck();
star297 2:d4c6bc0f2dc4 63 void gettime(),gettemp(),getbattery(),setRTC(),beep();
star297 0:e2a155f50119 64
star297 1:71ed1afbf344 65 // manual set RTC values
4180_1 4:40dd020463ea 66 int minute =00; // 0-59
4180_1 4:40dd020463ea 67 int hour =12; // 2-23
4180_1 4:40dd020463ea 68 int dayofmonth =26; // 1-31
4180_1 4:40dd020463ea 69 int month =8; // 1-12
star297 1:71ed1afbf344 70 int year =15; // last 2 digits
star297 2:d4c6bc0f2dc4 71
4180_1 4:40dd020463ea 72 int port =80; // set server port
4180_1 4:40dd020463ea 73 int SERVtimeout =5; // set server timeout in seconds in case link breaks.
4180_1 4:40dd020463ea 74
star297 0:e2a155f50119 75 // Serial Interrupt read ESP data
4180_1 4:40dd020463ea 76 void callback()
4180_1 4:40dd020463ea 77 {
faker_71 5:dfea6fd1abba 78 //pc.printf("\n\r------------ callback is being called --------------\n\r");
4180_1 4:40dd020463ea 79 led3=1;
4180_1 4:40dd020463ea 80 while (esp.readable()) {
4180_1 4:40dd020463ea 81 webbuff[count] = esp.getc();
4180_1 4:40dd020463ea 82 count++;
4180_1 4:40dd020463ea 83 }
4180_1 4:40dd020463ea 84 if(strlen(webbuff)>bufflen) {
faker_71 5:dfea6fd1abba 85 pc.printf("\f\n\r------------ webbuff over bufflen --------------\n\r");
4180_1 4:40dd020463ea 86 DataRX=1;
4180_1 4:40dd020463ea 87 led3=0;
4180_1 4:40dd020463ea 88 }
star297 0:e2a155f50119 89 }
star297 0:e2a155f50119 90
4180_1 4:40dd020463ea 91 int main()
4180_1 4:40dd020463ea 92 {
4180_1 4:40dd020463ea 93 reset=0;
star297 0:e2a155f50119 94 pc.baud(115200);
4180_1 4:40dd020463ea 95
faker_71 5:dfea6fd1abba 96 pc.printf("\f\n\r------------ ESP8266 Hardware Reset psq --------------\n\r");
4180_1 4:40dd020463ea 97 wait(0.5);
4180_1 4:40dd020463ea 98 reset=1;
4180_1 4:40dd020463ea 99 led1=1,led2=0,led3=0;
4180_1 4:40dd020463ea 100 timeout=6000;
4180_1 4:40dd020463ea 101 getcount=500;
4180_1 4:40dd020463ea 102 getreply();
star297 3:f7febfa77784 103 esp.baud(115200); // ESP8266 baudrate. Maximum on KLxx' is 115200, 230400 works on K20 and K22F
4180_1 4:40dd020463ea 104 if (time(NULL) < 1420070400) {
4180_1 4:40dd020463ea 105 setRTC();
4180_1 4:40dd020463ea 106 }
star297 2:d4c6bc0f2dc4 107 beep();
star297 0:e2a155f50119 108 startserver();
faker_71 5:dfea6fd1abba 109
4180_1 4:40dd020463ea 110 while(1) {
4180_1 4:40dd020463ea 111 if(DataRX==1) {
faker_71 5:dfea6fd1abba 112 pc.printf("\f\n\r------------ main while > if --------------\n\r");
faker_71 5:dfea6fd1abba 113
star297 0:e2a155f50119 114 ReadWebData();
star297 2:d4c6bc0f2dc4 115 beep();
4180_1 4:40dd020463ea 116 if (servreq == 1 && weberror == 0) {
faker_71 5:dfea6fd1abba 117 pc.printf("\f\n\r------------ befor send page --------------\n\r");
4180_1 4:40dd020463ea 118 sendpage();
4180_1 4:40dd020463ea 119 }
4180_1 4:40dd020463ea 120 esp.attach(&callback);
4180_1 4:40dd020463ea 121 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);
4180_1 4:40dd020463ea 122 pc.printf("\n\n HTTP Packet: \n\n%s\n", webdata);
star297 0:e2a155f50119 123 pc.printf(" Web Characters sent : %d\n\n", bufl);
star297 0:e2a155f50119 124 pc.printf(" -------------------------------------\n\n");
star297 2:d4c6bc0f2dc4 125 strcpy(lasthit, timebuf);
4180_1 4:40dd020463ea 126 servreq=0;
4180_1 4:40dd020463ea 127 }
star297 0:e2a155f50119 128 }
4180_1 4:40dd020463ea 129 }
4180_1 4:40dd020463ea 130 // Static WEB page
star297 0:e2a155f50119 131 void sendpage()
4180_1 4:40dd020463ea 132 {
star297 3:f7febfa77784 133 gettemp();
4180_1 4:40dd020463ea 134 getbattery();
4180_1 4:40dd020463ea 135 gettime();
4180_1 4:40dd020463ea 136
4180_1 4:40dd020463ea 137 // WEB page data
faker_71 5:dfea6fd1abba 138
faker_71 5:dfea6fd1abba 139 strcpy(webbuff, "<!DOCTYPE html>");
faker_71 5:dfea6fd1abba 140 strcat(webbuff, "<html><head><title>RobotCar</title><meta name='viewport' content='width=device-width'/>");
faker_71 5:dfea6fd1abba 141 strcat(webbuff, "</head><body><center><p><strong>Robot Car Remot Controller");
faker_71 5:dfea6fd1abba 142 strcat(webbuff, "</strong></p><td style='vertical-align:top;'><strong>Battery level ");
faker_71 5:dfea6fd1abba 143 strcat(webbuff, "<input type=\"text\" id=\"leftms\" size=4 value=250>%</strong>");
faker_71 5:dfea6fd1abba 144 strcat(webbuff, "</td></p><tr ><strong>Now speed : </strong></tr><nobr id=\"speprint\">ready");
faker_71 5:dfea6fd1abba 145 strcat(webbuff, "</nobr><br><tr ><strong>Now action : </strong></tr>");
faker_71 5:dfea6fd1abba 146 strcat(webbuff, "<nobr id=\"funprint\">ready</nobr><table><tr><td></td><td>");
faker_71 5:dfea6fd1abba 147
faker_71 5:dfea6fd1abba 148 strcat(webbuff, "<button id='gobtn' type='button' style='width:100px;height:60px' value=\"GO\" onClick='send_mes(this.id,this.value)'>GO");
faker_71 5:dfea6fd1abba 149 strcat(webbuff, "</button></td><td></td></tr><tr><td>");
faker_71 5:dfea6fd1abba 150 strcat(webbuff, "<button id='leftbtn' type='button' style='width:100px;height:60px' value=\"LEFT\" onClick='send_mes(this.id,this.value)' >LEFT");
faker_71 5:dfea6fd1abba 151 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 152 strcat(webbuff, "<button id='stopbtn' type='button' style='width:100px;height:60px' value=\"STOP\" onClick='send_mes(this.id,this.value)' >STOP");
faker_71 5:dfea6fd1abba 153 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 154 strcat(webbuff, "<button id='rightbtn' type='button' style='width:100px;height:60px' value=\"RIGHT\" onClick='send_mes(this.id,this.value)' >RIGHT");
faker_71 5:dfea6fd1abba 155 strcat(webbuff, "</button></td></tr><td></td><td>");
faker_71 5:dfea6fd1abba 156 strcat(webbuff, "<button id='backbtn' type='button' style='width:100px;height:60px' value=\"BACK\" onClick='send_mes(this.id,this.value)' >BACK");
faker_71 5:dfea6fd1abba 157 strcat(webbuff, "</button></td><td style='vertical-align:top; text-align:right;'></td></tr></table>");
faker_71 5:dfea6fd1abba 158 /*
faker_71 5:dfea6fd1abba 159 strcat(webbuff, "<strong>Addition functions:</strong><table>");
faker_71 5:dfea6fd1abba 160 strcat(webbuff, "<td>");//ok
faker_71 5:dfea6fd1abba 161
faker_71 5:dfea6fd1abba 162 strcat(webbuff, "<button id='avoidbtn' type='button' style='width:100px;height:60px' value=\"AVOIDANCE\" onClick='send_mes_fun(this.id,this.value)' >");
faker_71 5:dfea6fd1abba 163
faker_71 5:dfea6fd1abba 164 strcat(webbuff, "AVOIDANCE</button></td><td>");
faker_71 5:dfea6fd1abba 165 strcat(webbuff, "<button id='tracebtn' type='button' style='width:100px;height:60px' value=\"LINE TRACE\" onClick='send_mes_fun(this.id,this.value)' >LINE TRACE");
faker_71 5:dfea6fd1abba 166 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 167 strcat(webbuff, "<button id='defbtn' type='button' style='width:100px;height:60px' value=\"DEFAULT\" onClick='send_mes_fun(this.id,this.value)' >DEFAULT");
faker_71 5:dfea6fd1abba 168 strcat(webbuff, "</button></td></table><table><td>");
faker_71 5:dfea6fd1abba 169 strcat(webbuff, "</td><strong>Speed level:</strong>");
faker_71 5:dfea6fd1abba 170 strcat(webbuff, "</table><td>");
faker_71 5:dfea6fd1abba 171 strcat(webbuff, "<button id='sp1btn' type='button' style='width:100px;height:60px' value=\"SLOW\" onClick='send_mes_spe(this.id,this.value)' >SLOW");
faker_71 5:dfea6fd1abba 172 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 173 strcat(webbuff, "<button id='sp2btn' type='button' style='width:100px;height:60px' value=\"FAST\" onClick='send_mes_spe(this.id,this.value)' >FAST");
faker_71 5:dfea6fd1abba 174 strcat(webbuff, "</button>");
faker_71 5:dfea6fd1abba 175 strcat(webbuff, "</td>");
faker_71 5:dfea6fd1abba 176 strcat(webbuff, "<td>");
faker_71 5:dfea6fd1abba 177 strcat(webbuff, "<button id='sp3btn' type='button' style='width:100px;height:60px' value=\"FLY\" onClick='send_mes_spe(this.id,this.value)' >FLY");
faker_71 5:dfea6fd1abba 178 strcat(webbuff, "</button>");
faker_71 5:dfea6fd1abba 179 strcat(webbuff, "</td>");
faker_71 5:dfea6fd1abba 180 strcat(webbuff, "<table>");
faker_71 5:dfea6fd1abba 181 strcat(webbuff, "<td>");
faker_71 5:dfea6fd1abba 182 strcat(webbuff, "</td>");
faker_71 5:dfea6fd1abba 183 strcat(webbuff, "</table>"); */
faker_71 5:dfea6fd1abba 184 strcat(webbuff, "</center>");
faker_71 5:dfea6fd1abba 185
faker_71 5:dfea6fd1abba 186 strcat(webbuff, "</body>");
faker_71 5:dfea6fd1abba 187 strcat(webbuff, "</html>");
faker_71 5:dfea6fd1abba 188
faker_71 5:dfea6fd1abba 189 strcat(webbuff, "<script language=\"javascript\" type=\"text/javascript\">");
faker_71 5:dfea6fd1abba 190 strcat(webbuff, "function send_mes(btnmes,btnval){");
faker_71 5:dfea6fd1abba 191 strcat(webbuff, "var url = \"http://\" + window.location.hostname + \"/cargo?a=\" + btnval;");
faker_71 5:dfea6fd1abba 192 strcat(webbuff, "htmlacs(url);");
faker_71 5:dfea6fd1abba 193 strcat(webbuff, "console.log(url);");
faker_71 5:dfea6fd1abba 194 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 195 strcat(webbuff, "function htmlacs(url) {");
faker_71 5:dfea6fd1abba 196 strcat(webbuff, "var xhr = new XMLHttpRequest();");
faker_71 5:dfea6fd1abba 197 strcat(webbuff, "xhr.open(\"GET\", url);");
faker_71 5:dfea6fd1abba 198 strcat(webbuff, "xhr.send(\"\");");
faker_71 5:dfea6fd1abba 199 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 200 strcat(webbuff, "function send_mes_spe(btnmes,btnval){");
faker_71 5:dfea6fd1abba 201 strcat(webbuff, "console.log(btnmes);");
faker_71 5:dfea6fd1abba 202 strcat(webbuff, "if(document.getElementById(\"speprint\")){");
faker_71 5:dfea6fd1abba 203 strcat(webbuff, "document.getElementById(\"speprint\").innerHTML=btnval;");
faker_71 5:dfea6fd1abba 204 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 205 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 206 strcat(webbuff, "function send_mes_fun(btnmes,btnval){");
faker_71 5:dfea6fd1abba 207 strcat(webbuff, "console.log(btnmes);");
faker_71 5:dfea6fd1abba 208 strcat(webbuff, "if(document.getElementById(\"funprint\")){");
faker_71 5:dfea6fd1abba 209 strcat(webbuff, "document.getElementById(\"funprint\").innerHTML=btnval;");
faker_71 5:dfea6fd1abba 210 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 211 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 212 strcat(webbuff, "</script>");
4180_1 4:40dd020463ea 213 // end of WEB page data
4180_1 4:40dd020463ea 214 bufl = strlen(webbuff); // get total page buffer length
star297 3:f7febfa77784 215 sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length.
4180_1 4:40dd020463ea 216 timeout=200;
4180_1 4:40dd020463ea 217 getcount=7;
star297 3:f7febfa77784 218 SendCMD();
4180_1 4:40dd020463ea 219 getreply();
faker_71 5:dfea6fd1abba 220 pc.printf("\n++++++++++ bufl is %d ++++++++++\r\n",bufl);
star297 0:e2a155f50119 221 SendWEB(); // send web page
star297 3:f7febfa77784 222 memset(webbuff, '\0', sizeof(webbuff));
4180_1 4:40dd020463ea 223 sendcheck();
star297 0:e2a155f50119 224 }
star297 0:e2a155f50119 225
star297 3:f7febfa77784 226 // wait for ESP "SEND OK" reply, then close IP to load web page
star297 0:e2a155f50119 227 void sendcheck()
star297 0:e2a155f50119 228 {
4180_1 4:40dd020463ea 229 weberror=1;
4180_1 4:40dd020463ea 230 timeout=500;
4180_1 4:40dd020463ea 231 getcount=24;
4180_1 4:40dd020463ea 232 t2.reset();
4180_1 4:40dd020463ea 233 t2.start();
4180_1 4:40dd020463ea 234 while(weberror==1 && t2.read() <5) {
star297 0:e2a155f50119 235 getreply();
4180_1 4:40dd020463ea 236 if (strstr(replybuff, "SEND OK") != NULL) {
4180_1 4:40dd020463ea 237 weberror=0; // wait for valid SEND OK
star297 0:e2a155f50119 238 }
4180_1 4:40dd020463ea 239 }
4180_1 4:40dd020463ea 240 if(weberror==1) { // restart connection
4180_1 4:40dd020463ea 241 strcpy(cmdbuff, "AT+CIPMUX=1\r\n");
4180_1 4:40dd020463ea 242 timeout=500;
4180_1 4:40dd020463ea 243 getcount=10;
4180_1 4:40dd020463ea 244 SendCMD();
4180_1 4:40dd020463ea 245 getreply();
4180_1 4:40dd020463ea 246 pc.printf(replybuff);
star297 3:f7febfa77784 247 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
4180_1 4:40dd020463ea 248 timeout=500;
4180_1 4:40dd020463ea 249 getcount=10;
4180_1 4:40dd020463ea 250 SendCMD();
4180_1 4:40dd020463ea 251 getreply();
4180_1 4:40dd020463ea 252 pc.printf(replybuff);
4180_1 4:40dd020463ea 253 } else {
4180_1 4:40dd020463ea 254 sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection
4180_1 4:40dd020463ea 255 SendCMD();
4180_1 4:40dd020463ea 256 getreply();
4180_1 4:40dd020463ea 257 pc.printf(replybuff);
4180_1 4:40dd020463ea 258 }
4180_1 4:40dd020463ea 259 t2.reset();
4180_1 4:40dd020463ea 260 }
star297 0:e2a155f50119 261
4180_1 4:40dd020463ea 262 // Reads and processes GET and POST web data
star297 0:e2a155f50119 263 void ReadWebData()
4180_1 4:40dd020463ea 264 {
4180_1 4:40dd020463ea 265 wait_ms(200);
star297 3:f7febfa77784 266 esp.attach(NULL);
4180_1 4:40dd020463ea 267 count=0;
4180_1 4:40dd020463ea 268 DataRX=0;
4180_1 4:40dd020463ea 269 weberror=0;
4180_1 4:40dd020463ea 270 memset(webdata, '\0', sizeof(webdata));
star297 3:f7febfa77784 271 int x = strcspn (webbuff,"+");
4180_1 4:40dd020463ea 272 if(x) {
4180_1 4:40dd020463ea 273 strcpy(webdata, webbuff + x);
4180_1 4:40dd020463ea 274 weberror=0;
4180_1 4:40dd020463ea 275 int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
faker_71 5:dfea6fd1abba 276 int i=0;
faker_71 5:dfea6fd1abba 277 pc.printf("+++++++++++++++++succed+++++++++++++++++++++");
faker_71 5:dfea6fd1abba 278 pc.printf("%s",webdata);
faker_71 5:dfea6fd1abba 279
faker_71 5:dfea6fd1abba 280
faker_71 5:dfea6fd1abba 281
faker_71 5:dfea6fd1abba 282 if( strstr(webdata, "LEFT") != NULL ) {
faker_71 5:dfea6fd1abba 283 ledR=!ledR;
faker_71 5:dfea6fd1abba 284
faker_71 5:dfea6fd1abba 285 }
faker_71 5:dfea6fd1abba 286
faker_71 5:dfea6fd1abba 287 if( strstr(webdata, "RIGHT") != NULL ) {
faker_71 5:dfea6fd1abba 288 ledG=!ledG;
faker_71 5:dfea6fd1abba 289
faker_71 5:dfea6fd1abba 290 }
faker_71 5:dfea6fd1abba 291 pc.printf("+++++++++++++++++succed+++++++++++++++++++++");
faker_71 5:dfea6fd1abba 292
faker_71 5:dfea6fd1abba 293
faker_71 5:dfea6fd1abba 294 if( strstr(webdata, "sp3btn=0") != NULL ) {
faker_71 5:dfea6fd1abba 295 led1=!led1;
faker_71 5:dfea6fd1abba 296
faker_71 5:dfea6fd1abba 297 }
4180_1 4:40dd020463ea 298 if( strstr(webdata, "led1=1") != NULL ) {
4180_1 4:40dd020463ea 299 led1=1;
4180_1 4:40dd020463ea 300 }
4180_1 4:40dd020463ea 301 if( strstr(webdata, "led1=0") != NULL ) {
4180_1 4:40dd020463ea 302 led1=0;
4180_1 4:40dd020463ea 303 }
4180_1 4:40dd020463ea 304 if( strstr(webdata, "Out1=1") != NULL ) {
4180_1 4:40dd020463ea 305 Out1=1;
4180_1 4:40dd020463ea 306 }
4180_1 4:40dd020463ea 307 if( strstr(webdata, "Out1=0") != NULL ) {
4180_1 4:40dd020463ea 308 Out1=0;
4180_1 4:40dd020463ea 309 }
4180_1 4:40dd020463ea 310 if( strstr(webdata, "Out2=1") != NULL ) {
4180_1 4:40dd020463ea 311 Out2=1;
4180_1 4:40dd020463ea 312 }
4180_1 4:40dd020463ea 313 if( strstr(webdata, "Out2=0") != NULL ) {
4180_1 4:40dd020463ea 314 Out2=0;
4180_1 4:40dd020463ea 315 }
4180_1 4:40dd020463ea 316 if( strstr(webdata, "Out3=1") != NULL ) {
4180_1 4:40dd020463ea 317 Out3=1;
4180_1 4:40dd020463ea 318 }
4180_1 4:40dd020463ea 319 if( strstr(webdata, "Out3=0") != NULL ) {
4180_1 4:40dd020463ea 320 Out3=0;
4180_1 4:40dd020463ea 321 }
4180_1 4:40dd020463ea 322 sprintf(channel, "%d",linkID);
4180_1 4:40dd020463ea 323 if (strstr(webdata, "GET") != NULL) {
4180_1 4:40dd020463ea 324 servreq=1;
4180_1 4:40dd020463ea 325 }
4180_1 4:40dd020463ea 326 if (strstr(webdata, "POST") != NULL) {
4180_1 4:40dd020463ea 327 servreq=1;
4180_1 4:40dd020463ea 328 }
star297 2:d4c6bc0f2dc4 329 webcounter++;
star297 2:d4c6bc0f2dc4 330 sprintf(webcount, "%d",webcounter);
4180_1 4:40dd020463ea 331 } else {
4180_1 4:40dd020463ea 332 memset(webbuff, '\0', sizeof(webbuff));
4180_1 4:40dd020463ea 333 esp.attach(&callback);
4180_1 4:40dd020463ea 334 weberror=1;
4180_1 4:40dd020463ea 335 }
star297 0:e2a155f50119 336 }
star297 0:e2a155f50119 337 // Starts and restarts webserver if errors detected.
star297 0:e2a155f50119 338 void startserver()
star297 0:e2a155f50119 339 {
4180_1 4:40dd020463ea 340 gettemp();
4180_1 4:40dd020463ea 341 gettime();
star297 1:71ed1afbf344 342 pc.printf("\n\n RTC time %s\r\n\n",timebuf);
4180_1 4:40dd020463ea 343 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
star297 3:f7febfa77784 344 strcpy(cmdbuff,"AT+RST\r\n");
4180_1 4:40dd020463ea 345 timeout=8000;
4180_1 4:40dd020463ea 346 getcount=1000;
star297 0:e2a155f50119 347 SendCMD();
star297 1:71ed1afbf344 348 getreply();
star297 3:f7febfa77784 349 pc.printf(replybuff);
star297 3:f7febfa77784 350 pc.printf("%d",count);
star297 3:f7febfa77784 351 if (strstr(replybuff, "OK") != NULL) {
star297 1:71ed1afbf344 352 pc.printf("\n++++++++++ Starting Server ++++++++++\r\n");
4180_1 4:40dd020463ea 353 strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections.
4180_1 4:40dd020463ea 354 timeout=500;
4180_1 4:40dd020463ea 355 getcount=20;
star297 1:71ed1afbf344 356 SendCMD();
star297 2:d4c6bc0f2dc4 357 getreply();
4180_1 4:40dd020463ea 358 pc.printf(replybuff);
star297 3:f7febfa77784 359 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
4180_1 4:40dd020463ea 360 timeout=500;
4180_1 4:40dd020463ea 361 getcount=20;
star297 1:71ed1afbf344 362 SendCMD();
star297 3:f7febfa77784 363 getreply();
4180_1 4:40dd020463ea 364 pc.printf(replybuff);
4180_1 4:40dd020463ea 365 wait(1);
star297 3:f7febfa77784 366 sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout);
4180_1 4:40dd020463ea 367 timeout=500;
4180_1 4:40dd020463ea 368 getcount=50;
star297 3:f7febfa77784 369 SendCMD();
star297 2:d4c6bc0f2dc4 370 getreply();
4180_1 4:40dd020463ea 371 pc.printf(replybuff);
4180_1 4:40dd020463ea 372 wait(5);
4180_1 4:40dd020463ea 373 pc.printf("\n Getting Server IP \r\n");
star297 3:f7febfa77784 374 strcpy(cmdbuff, "AT+CIFSR\r\n");
4180_1 4:40dd020463ea 375 timeout=2500;
4180_1 4:40dd020463ea 376 getcount=200;
4180_1 4:40dd020463ea 377 while(weberror==0) {
4180_1 4:40dd020463ea 378 SendCMD();
4180_1 4:40dd020463ea 379 getreply();
4180_1 4:40dd020463ea 380 if (strstr(replybuff, "0.0.0.0") == NULL) {
4180_1 4:40dd020463ea 381 weberror=1; // wait for valid IP
star297 1:71ed1afbf344 382 }
4180_1 4:40dd020463ea 383 }
4180_1 4:40dd020463ea 384 pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n");
4180_1 4:40dd020463ea 385 pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n");
4180_1 4:40dd020463ea 386 replybuff[strlen(replybuff)-1] = '\0';
4180_1 4:40dd020463ea 387 //char* IP = replybuff + 5;
4180_1 4:40dd020463ea 388 sprintf(webdata,"%s", replybuff);
4180_1 4:40dd020463ea 389 pc.printf(webdata);
4180_1 4:40dd020463ea 390 led2=1;
4180_1 4:40dd020463ea 391 bufflen=200;
4180_1 4:40dd020463ea 392 count=0;
star297 1:71ed1afbf344 393 pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
star297 1:71ed1afbf344 394 esp.attach(&callback);
4180_1 4:40dd020463ea 395 } else {
4180_1 4:40dd020463ea 396 pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
4180_1 4:40dd020463ea 397 while(1) {}
4180_1 4:40dd020463ea 398 }
4180_1 4:40dd020463ea 399 t2.reset();
4180_1 4:40dd020463ea 400 t2.start();
4180_1 4:40dd020463ea 401 beep();
4180_1 4:40dd020463ea 402 }
star297 0:e2a155f50119 403 // ESP Command data send
star297 0:e2a155f50119 404 void SendCMD()
star297 0:e2a155f50119 405 {
4180_1 4:40dd020463ea 406 esp.printf("%s", cmdbuff);
4180_1 4:40dd020463ea 407 }
star297 0:e2a155f50119 408 // Large WEB buffer data send
star297 0:e2a155f50119 409 void SendWEB()
4180_1 4:40dd020463ea 410 {
star297 0:e2a155f50119 411 int i=0;
star297 0:e2a155f50119 412 if(esp.writeable()) {
4180_1 4:40dd020463ea 413 while(webbuff[i]!='\0') {
4180_1 4:40dd020463ea 414 esp.putc(webbuff[i]);
4180_1 4:40dd020463ea 415 i++;
faker_71 5:dfea6fd1abba 416 pc.printf("%s",webbuff[i]);
4180_1 4:40dd020463ea 417 }
4180_1 4:40dd020463ea 418 }
faker_71 5:dfea6fd1abba 419 pc.printf("\n++++++++++ send web info ++++++++++\r\n");
4180_1 4:40dd020463ea 420 }
4180_1 4:40dd020463ea 421 // Get Command and ESP status replies
star297 0:e2a155f50119 422 void getreply()
4180_1 4:40dd020463ea 423 {
star297 3:f7febfa77784 424 memset(replybuff, '\0', sizeof(replybuff));
4180_1 4:40dd020463ea 425 t1.reset();
4180_1 4:40dd020463ea 426 t1.start();
4180_1 4:40dd020463ea 427 replycount=0;
star297 3:f7febfa77784 428 while(t1.read_ms()< timeout && replycount < getcount) {
star297 0:e2a155f50119 429 if(esp.readable()) {
4180_1 4:40dd020463ea 430 replybuff[replycount] = esp.getc();
4180_1 4:40dd020463ea 431 replycount++;
star297 2:d4c6bc0f2dc4 432 }
4180_1 4:40dd020463ea 433 }
4180_1 4:40dd020463ea 434 t1.stop();
star297 0:e2a155f50119 435 }
star297 0:e2a155f50119 436 // Analog in example
star297 0:e2a155f50119 437 void getbattery()
star297 0:e2a155f50119 438 {
4180_1 4:40dd020463ea 439 AdcIn=Ain1.read();
4180_1 4:40dd020463ea 440 Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy
4180_1 4:40dd020463ea 441 sprintf(Vcc,"%2.3f",Ht);
star297 0:e2a155f50119 442 }
star297 0:e2a155f50119 443 // Temperature example
star297 0:e2a155f50119 444 void gettemp()
4180_1 4:40dd020463ea 445 {
4180_1 4:40dd020463ea 446
4180_1 4:40dd020463ea 447 AdcIn=Ain2.read();
4180_1 4:40dd020463ea 448 Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy
4180_1 4:40dd020463ea 449 sprintf(Temp,"%2.3f",Ht);
star297 0:e2a155f50119 450 }
4180_1 4:40dd020463ea 451 // Get RTC time
star297 0:e2a155f50119 452 void gettime()
star297 0:e2a155f50119 453 {
star297 0:e2a155f50119 454 time_t seconds = time(NULL);
4180_1 4:40dd020463ea 455 strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds));
star297 0:e2a155f50119 456 }
star297 0:e2a155f50119 457
star297 2:d4c6bc0f2dc4 458 void beep()
4180_1 4:40dd020463ea 459 {
star297 2:d4c6bc0f2dc4 460 speaker.period(1.0/2000); // 2000hz period
star297 2:d4c6bc0f2dc4 461 speaker = 0.5; //50% duty cycle - max volume
star297 2:d4c6bc0f2dc4 462 wait_ms(60);
star297 2:d4c6bc0f2dc4 463 speaker=0.0; // turn off audio
star297 2:d4c6bc0f2dc4 464 }
star297 2:d4c6bc0f2dc4 465
star297 1:71ed1afbf344 466 void setRTC()
star297 1:71ed1afbf344 467 {
4180_1 4:40dd020463ea 468 t.tm_sec = (0); // 0-59
4180_1 4:40dd020463ea 469 t.tm_min = (minute); // 0-59
4180_1 4:40dd020463ea 470 t.tm_hour = (hour); // 0-23
4180_1 4:40dd020463ea 471 t.tm_mday = (dayofmonth); // 1-31
4180_1 4:40dd020463ea 472 t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format
4180_1 4:40dd020463ea 473 t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year
4180_1 4:40dd020463ea 474 set_time(mktime(&t)); // set RTC clock
4180_1 4:40dd020463ea 475 }