wifi-demo0730

Dependencies:   mbed

Committer:
faker_71
Date:
Thu Jul 30 06:38:50 2020 +0000
Revision:
6:7c9cc335b762
Parent:
5:dfea6fd1abba
2

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