mbed_robotcar / Mbed 2 deprecated ESP8266-wifi-sucess

Dependencies:   mbed

Committer:
faker_71
Date:
Thu Jul 30 07:11:33 2020 +0000
Revision:
8:d8e164130860
Parent:
7:a8cfd049c385
Child:
9:e458213a7afd
wifi-success

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 8:d8e164130860 153
faker_71 5:dfea6fd1abba 154 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 155 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 156 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 157 strcat(webbuff, "</button></td></tr><td></td><td>");
faker_71 5:dfea6fd1abba 158 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 159 strcat(webbuff, "</button></td><td style='vertical-align:top; text-align:right;'></td></tr></table>");
faker_71 6:7c9cc335b762 160
faker_71 7:a8cfd049c385 161
faker_71 6:7c9cc335b762 162
faker_71 6:7c9cc335b762 163 //begin
faker_71 5:dfea6fd1abba 164 strcat(webbuff, "<strong>Addition functions:</strong><table>");
faker_71 5:dfea6fd1abba 165 strcat(webbuff, "<td>");//ok
faker_71 5:dfea6fd1abba 166 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 167 strcat(webbuff, "AVOIDANCE</button></td><td>");
faker_71 5:dfea6fd1abba 168 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 169 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 170 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 171 strcat(webbuff, "</button></td></table><table><td>");
faker_71 5:dfea6fd1abba 172 strcat(webbuff, "</td><strong>Speed level:</strong>");
faker_71 5:dfea6fd1abba 173 strcat(webbuff, "</table><td>");
faker_71 5:dfea6fd1abba 174 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 175 strcat(webbuff, "</button></td><td>");
faker_71 5:dfea6fd1abba 176 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 177 strcat(webbuff, "</button>");
faker_71 5:dfea6fd1abba 178 strcat(webbuff, "</td>");
faker_71 5:dfea6fd1abba 179 strcat(webbuff, "<td>");
faker_71 5:dfea6fd1abba 180 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 181 strcat(webbuff, "</button>");
faker_71 5:dfea6fd1abba 182 strcat(webbuff, "</td>");
faker_71 5:dfea6fd1abba 183 strcat(webbuff, "<table>");
faker_71 5:dfea6fd1abba 184 strcat(webbuff, "<td>");
faker_71 5:dfea6fd1abba 185 strcat(webbuff, "</td>");
faker_71 6:7c9cc335b762 186 strcat(webbuff, "</table>"); //end
faker_71 6:7c9cc335b762 187
faker_71 8:d8e164130860 188
faker_71 6:7c9cc335b762 189
faker_71 5:dfea6fd1abba 190 strcat(webbuff, "</center>");
faker_71 5:dfea6fd1abba 191 strcat(webbuff, "</body>");
faker_71 5:dfea6fd1abba 192 strcat(webbuff, "</html>");
faker_71 5:dfea6fd1abba 193 strcat(webbuff, "<script language=\"javascript\" type=\"text/javascript\">");
faker_71 5:dfea6fd1abba 194 strcat(webbuff, "function send_mes(btnmes,btnval){");
faker_71 5:dfea6fd1abba 195 strcat(webbuff, "var url = \"http://\" + window.location.hostname + \"/cargo?a=\" + btnval;");
faker_71 5:dfea6fd1abba 196 strcat(webbuff, "htmlacs(url);");
faker_71 5:dfea6fd1abba 197 strcat(webbuff, "console.log(url);");
faker_71 5:dfea6fd1abba 198 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 199 strcat(webbuff, "function htmlacs(url) {");
faker_71 5:dfea6fd1abba 200 strcat(webbuff, "var xhr = new XMLHttpRequest();");
faker_71 5:dfea6fd1abba 201 strcat(webbuff, "xhr.open(\"GET\", url);");
faker_71 5:dfea6fd1abba 202 strcat(webbuff, "xhr.send(\"\");");
faker_71 5:dfea6fd1abba 203 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 204 strcat(webbuff, "function send_mes_spe(btnmes,btnval){");
faker_71 5:dfea6fd1abba 205 strcat(webbuff, "console.log(btnmes);");
faker_71 5:dfea6fd1abba 206 strcat(webbuff, "if(document.getElementById(\"speprint\")){");
faker_71 5:dfea6fd1abba 207 strcat(webbuff, "document.getElementById(\"speprint\").innerHTML=btnval;");
faker_71 5:dfea6fd1abba 208 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 209 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 210 strcat(webbuff, "function send_mes_fun(btnmes,btnval){");
faker_71 5:dfea6fd1abba 211 strcat(webbuff, "console.log(btnmes);");
faker_71 5:dfea6fd1abba 212 strcat(webbuff, "if(document.getElementById(\"funprint\")){");
faker_71 5:dfea6fd1abba 213 strcat(webbuff, "document.getElementById(\"funprint\").innerHTML=btnval;");
faker_71 5:dfea6fd1abba 214 strcat(webbuff, "}");
faker_71 5:dfea6fd1abba 215 strcat(webbuff, "}");
faker_71 7:a8cfd049c385 216 strcat(webbuff, "</script>");
4180_1 4:40dd020463ea 217 // end of WEB page data
4180_1 4:40dd020463ea 218 bufl = strlen(webbuff); // get total page buffer length
faker_71 6:7c9cc335b762 219 //sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length.
faker_71 6:7c9cc335b762 220
faker_71 8:d8e164130860 221 sprintf(cmdbuff,"AT+CIPSENDBUF=%d,%d\r\n", linkID, 1500); // send IPD link channel and buffer character length.
faker_71 6:7c9cc335b762 222 timeout=500;
faker_71 6:7c9cc335b762 223 getcount=40;
star297 3:f7febfa77784 224 SendCMD();
4180_1 4:40dd020463ea 225 getreply();
faker_71 6:7c9cc335b762 226 pc.printf(replybuff);
faker_71 8:d8e164130860 227 pc.printf("\n++++++++++ AT+CIPSENDBUF=%d,%d+++++++++\r\n", linkID, 1500);
faker_71 6:7c9cc335b762 228
faker_71 5:dfea6fd1abba 229 pc.printf("\n++++++++++ bufl is %d ++++++++++\r\n",bufl);
faker_71 6:7c9cc335b762 230
faker_71 6:7c9cc335b762 231 //pastthrough mode
star297 0:e2a155f50119 232 SendWEB(); // send web page
faker_71 6:7c9cc335b762 233
star297 3:f7febfa77784 234 memset(webbuff, '\0', sizeof(webbuff));
4180_1 4:40dd020463ea 235 sendcheck();
star297 0:e2a155f50119 236 }
star297 0:e2a155f50119 237
faker_71 6:7c9cc335b762 238 // Large WEB buffer data send
faker_71 6:7c9cc335b762 239 void SendWEB()
faker_71 6:7c9cc335b762 240 {
faker_71 6:7c9cc335b762 241 int i=0;
faker_71 6:7c9cc335b762 242 if(esp.writeable()) {
faker_71 6:7c9cc335b762 243 while(webbuff[i]!='\0') {
faker_71 6:7c9cc335b762 244 esp.putc(webbuff[i]);
faker_71 8:d8e164130860 245
faker_71 7:a8cfd049c385 246 //****
faker_71 6:7c9cc335b762 247 //output at command when 2000
faker_71 6:7c9cc335b762 248 if(i==1499){
faker_71 6:7c9cc335b762 249 wait_ms(10);
faker_71 8:d8e164130860 250 sprintf(cmdbuff,"AT+CIPSENDBUF=%d,%d\r\n", linkID, bufl-1500); // send IPD link channel and buffer character length.
faker_71 8:d8e164130860 251 pc.printf("\r\n++++++++++ AT+CIPSENDBUF=%d,%d ++++++++++\r\n", linkID, bufl-1500);
faker_71 6:7c9cc335b762 252 timeout=600;
faker_71 6:7c9cc335b762 253 getcount=50;
faker_71 6:7c9cc335b762 254 SendCMD();
faker_71 6:7c9cc335b762 255 getreply();
faker_71 6:7c9cc335b762 256 pc.printf(replybuff);
faker_71 6:7c9cc335b762 257 pc.printf("\r\n+++++++++++++++++++\r\n");
faker_71 6:7c9cc335b762 258
faker_71 6:7c9cc335b762 259 }
faker_71 8:d8e164130860 260
faker_71 6:7c9cc335b762 261 //****
faker_71 6:7c9cc335b762 262 i++;
faker_71 6:7c9cc335b762 263 pc.printf("%c",webbuff[i]);
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 /*
faker_71 6:7c9cc335b762 270 sprintf(cmdbuff,"AT+CIPCLOSE\r\n"); // send IPD link channel and buffer character length.
faker_71 6:7c9cc335b762 271 SendCMD();
faker_71 6:7c9cc335b762 272 */
faker_71 6:7c9cc335b762 273 //*****
faker_71 6:7c9cc335b762 274
faker_71 6:7c9cc335b762 275 pc.printf("\n++++++++++ send web i= %dinfo ++++++++++\r\n",i);
faker_71 6:7c9cc335b762 276 }
faker_71 6:7c9cc335b762 277
faker_71 6:7c9cc335b762 278
star297 3:f7febfa77784 279 // wait for ESP "SEND OK" reply, then close IP to load web page
faker_71 6:7c9cc335b762 280
faker_71 6:7c9cc335b762 281 //touchuan mode
faker_71 6:7c9cc335b762 282 void touchuan(){
faker_71 6:7c9cc335b762 283 strcpy(cmdbuff, "AT+CIPMUX=0\r\n");
faker_71 6:7c9cc335b762 284 pc.printf("\n++++++++++ AT+CIPMUX=0\r\n+++++++++");
faker_71 6:7c9cc335b762 285 timeout=500;
faker_71 6:7c9cc335b762 286 getcount=40;
faker_71 6:7c9cc335b762 287 SendCMD();
faker_71 6:7c9cc335b762 288 getreply();
faker_71 6:7c9cc335b762 289 pc.printf(replybuff);
faker_71 6:7c9cc335b762 290 strcpy(cmdbuff, "AT+CIPSTART=\"TCP\",\"192.168.4.2\",8080\r\n"); // send IPD link channel and buffer character length.
faker_71 6:7c9cc335b762 291 pc.printf("\n++++++++++ AT+CIPSTART=0\r\n+++++++++");
faker_71 6:7c9cc335b762 292 timeout=500;
faker_71 6:7c9cc335b762 293 getcount=40;
faker_71 6:7c9cc335b762 294 SendCMD();
faker_71 6:7c9cc335b762 295 getreply();
faker_71 6:7c9cc335b762 296 pc.printf(replybuff);
faker_71 6:7c9cc335b762 297 strcpy(cmdbuff, "AT+CIPMODE=1\r\n"); // send IPD link channel and buffer character length.
faker_71 6:7c9cc335b762 298 pc.printf("\n++++++++++ AT+CIPMODE=1\r\n+++++++++");
faker_71 6:7c9cc335b762 299 timeout=500;
faker_71 6:7c9cc335b762 300 getcount=40;
faker_71 6:7c9cc335b762 301 SendCMD();
faker_71 6:7c9cc335b762 302 getreply();
faker_71 6:7c9cc335b762 303 pc.printf(replybuff);
faker_71 6:7c9cc335b762 304 strcpy(cmdbuff, "AT+CIPSEND\r\n"); // send IPD link channel and buffer character length.
faker_71 6:7c9cc335b762 305 pc.printf("\n++++++++++ AT+CIPSEND\r\n+++++++++");
faker_71 6:7c9cc335b762 306 timeout=500;
faker_71 6:7c9cc335b762 307 getcount=40;
faker_71 6:7c9cc335b762 308 SendCMD();
faker_71 6:7c9cc335b762 309 getreply();
faker_71 6:7c9cc335b762 310 pc.printf(replybuff);
faker_71 6:7c9cc335b762 311 }
faker_71 6:7c9cc335b762 312
star297 0:e2a155f50119 313 void sendcheck()
star297 0:e2a155f50119 314 {
4180_1 4:40dd020463ea 315 weberror=1;
4180_1 4:40dd020463ea 316 timeout=500;
4180_1 4:40dd020463ea 317 getcount=24;
4180_1 4:40dd020463ea 318 t2.reset();
4180_1 4:40dd020463ea 319 t2.start();
4180_1 4:40dd020463ea 320 while(weberror==1 && t2.read() <5) {
star297 0:e2a155f50119 321 getreply();
4180_1 4:40dd020463ea 322 if (strstr(replybuff, "SEND OK") != NULL) {
4180_1 4:40dd020463ea 323 weberror=0; // wait for valid SEND OK
star297 0:e2a155f50119 324 }
4180_1 4:40dd020463ea 325 }
4180_1 4:40dd020463ea 326 if(weberror==1) { // restart connection
4180_1 4:40dd020463ea 327 strcpy(cmdbuff, "AT+CIPMUX=1\r\n");
4180_1 4:40dd020463ea 328 timeout=500;
4180_1 4:40dd020463ea 329 getcount=10;
4180_1 4:40dd020463ea 330 SendCMD();
4180_1 4:40dd020463ea 331 getreply();
4180_1 4:40dd020463ea 332 pc.printf(replybuff);
star297 3:f7febfa77784 333 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
4180_1 4:40dd020463ea 334 timeout=500;
4180_1 4:40dd020463ea 335 getcount=10;
4180_1 4:40dd020463ea 336 SendCMD();
4180_1 4:40dd020463ea 337 getreply();
4180_1 4:40dd020463ea 338 pc.printf(replybuff);
4180_1 4:40dd020463ea 339 } else {
4180_1 4:40dd020463ea 340 sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection
4180_1 4:40dd020463ea 341 SendCMD();
4180_1 4:40dd020463ea 342 getreply();
4180_1 4:40dd020463ea 343 pc.printf(replybuff);
4180_1 4:40dd020463ea 344 }
4180_1 4:40dd020463ea 345 t2.reset();
4180_1 4:40dd020463ea 346 }
star297 0:e2a155f50119 347
4180_1 4:40dd020463ea 348 // Reads and processes GET and POST web data
star297 0:e2a155f50119 349 void ReadWebData()
4180_1 4:40dd020463ea 350 {
4180_1 4:40dd020463ea 351 wait_ms(200);
star297 3:f7febfa77784 352 esp.attach(NULL);
4180_1 4:40dd020463ea 353 count=0;
4180_1 4:40dd020463ea 354 DataRX=0;
4180_1 4:40dd020463ea 355 weberror=0;
4180_1 4:40dd020463ea 356 memset(webdata, '\0', sizeof(webdata));
star297 3:f7febfa77784 357 int x = strcspn (webbuff,"+");
4180_1 4:40dd020463ea 358 if(x) {
4180_1 4:40dd020463ea 359 strcpy(webdata, webbuff + x);
4180_1 4:40dd020463ea 360 weberror=0;
4180_1 4:40dd020463ea 361 int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type);
faker_71 6:7c9cc335b762 362 //int i=0;
faker_71 5:dfea6fd1abba 363 pc.printf("+++++++++++++++++succed+++++++++++++++++++++");
faker_71 5:dfea6fd1abba 364 pc.printf("%s",webdata);
faker_71 5:dfea6fd1abba 365
faker_71 5:dfea6fd1abba 366
faker_71 5:dfea6fd1abba 367
faker_71 5:dfea6fd1abba 368 if( strstr(webdata, "LEFT") != NULL ) {
faker_71 6:7c9cc335b762 369 //ledR=!ledR;
faker_71 6:7c9cc335b762 370 led1=!led1;
faker_71 6:7c9cc335b762 371 pc.printf("+++++++++++++++++ledR+++++++++++++++++++++\r\n");
faker_71 6:7c9cc335b762 372
faker_71 5:dfea6fd1abba 373 }
faker_71 5:dfea6fd1abba 374
faker_71 5:dfea6fd1abba 375 if( strstr(webdata, "RIGHT") != NULL ) {
faker_71 5:dfea6fd1abba 376 ledG=!ledG;
faker_71 6:7c9cc335b762 377 pc.printf("+++++++++++++++++ledG+++++++++++++++++++++\r\n");
faker_71 5:dfea6fd1abba 378 }
faker_71 5:dfea6fd1abba 379 pc.printf("+++++++++++++++++succed+++++++++++++++++++++");
faker_71 5:dfea6fd1abba 380
faker_71 5:dfea6fd1abba 381
faker_71 5:dfea6fd1abba 382 if( strstr(webdata, "sp3btn=0") != NULL ) {
faker_71 5:dfea6fd1abba 383 led1=!led1;
faker_71 5:dfea6fd1abba 384
faker_71 5:dfea6fd1abba 385 }
4180_1 4:40dd020463ea 386 if( strstr(webdata, "led1=1") != NULL ) {
4180_1 4:40dd020463ea 387 led1=1;
4180_1 4:40dd020463ea 388 }
4180_1 4:40dd020463ea 389 if( strstr(webdata, "led1=0") != NULL ) {
4180_1 4:40dd020463ea 390 led1=0;
4180_1 4:40dd020463ea 391 }
4180_1 4:40dd020463ea 392 if( strstr(webdata, "Out1=1") != NULL ) {
4180_1 4:40dd020463ea 393 Out1=1;
4180_1 4:40dd020463ea 394 }
4180_1 4:40dd020463ea 395 if( strstr(webdata, "Out1=0") != NULL ) {
4180_1 4:40dd020463ea 396 Out1=0;
4180_1 4:40dd020463ea 397 }
4180_1 4:40dd020463ea 398 if( strstr(webdata, "Out2=1") != NULL ) {
4180_1 4:40dd020463ea 399 Out2=1;
4180_1 4:40dd020463ea 400 }
4180_1 4:40dd020463ea 401 if( strstr(webdata, "Out2=0") != NULL ) {
4180_1 4:40dd020463ea 402 Out2=0;
4180_1 4:40dd020463ea 403 }
4180_1 4:40dd020463ea 404 if( strstr(webdata, "Out3=1") != NULL ) {
4180_1 4:40dd020463ea 405 Out3=1;
4180_1 4:40dd020463ea 406 }
4180_1 4:40dd020463ea 407 if( strstr(webdata, "Out3=0") != NULL ) {
4180_1 4:40dd020463ea 408 Out3=0;
4180_1 4:40dd020463ea 409 }
4180_1 4:40dd020463ea 410 sprintf(channel, "%d",linkID);
4180_1 4:40dd020463ea 411 if (strstr(webdata, "GET") != NULL) {
4180_1 4:40dd020463ea 412 servreq=1;
4180_1 4:40dd020463ea 413 }
4180_1 4:40dd020463ea 414 if (strstr(webdata, "POST") != NULL) {
4180_1 4:40dd020463ea 415 servreq=1;
4180_1 4:40dd020463ea 416 }
star297 2:d4c6bc0f2dc4 417 webcounter++;
star297 2:d4c6bc0f2dc4 418 sprintf(webcount, "%d",webcounter);
4180_1 4:40dd020463ea 419 } else {
4180_1 4:40dd020463ea 420 memset(webbuff, '\0', sizeof(webbuff));
4180_1 4:40dd020463ea 421 esp.attach(&callback);
4180_1 4:40dd020463ea 422 weberror=1;
4180_1 4:40dd020463ea 423 }
star297 0:e2a155f50119 424 }
star297 0:e2a155f50119 425 // Starts and restarts webserver if errors detected.
star297 0:e2a155f50119 426 void startserver()
star297 0:e2a155f50119 427 {
4180_1 4:40dd020463ea 428 gettemp();
4180_1 4:40dd020463ea 429 gettime();
star297 1:71ed1afbf344 430 pc.printf("\n\n RTC time %s\r\n\n",timebuf);
4180_1 4:40dd020463ea 431 pc.printf("++++++++++ Resetting ESP ++++++++++\r\n");
star297 3:f7febfa77784 432 strcpy(cmdbuff,"AT+RST\r\n");
4180_1 4:40dd020463ea 433 timeout=8000;
4180_1 4:40dd020463ea 434 getcount=1000;
star297 0:e2a155f50119 435 SendCMD();
star297 1:71ed1afbf344 436 getreply();
star297 3:f7febfa77784 437 pc.printf(replybuff);
star297 3:f7febfa77784 438 pc.printf("%d",count);
star297 3:f7febfa77784 439 if (strstr(replybuff, "OK") != NULL) {
star297 1:71ed1afbf344 440 pc.printf("\n++++++++++ Starting Server ++++++++++\r\n");
4180_1 4:40dd020463ea 441 strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections.
4180_1 4:40dd020463ea 442 timeout=500;
4180_1 4:40dd020463ea 443 getcount=20;
star297 1:71ed1afbf344 444 SendCMD();
star297 2:d4c6bc0f2dc4 445 getreply();
4180_1 4:40dd020463ea 446 pc.printf(replybuff);
star297 3:f7febfa77784 447 sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port);
4180_1 4:40dd020463ea 448 timeout=500;
4180_1 4:40dd020463ea 449 getcount=20;
star297 1:71ed1afbf344 450 SendCMD();
star297 3:f7febfa77784 451 getreply();
4180_1 4:40dd020463ea 452 pc.printf(replybuff);
4180_1 4:40dd020463ea 453 wait(1);
star297 3:f7febfa77784 454 sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout);
4180_1 4:40dd020463ea 455 timeout=500;
4180_1 4:40dd020463ea 456 getcount=50;
star297 3:f7febfa77784 457 SendCMD();
star297 2:d4c6bc0f2dc4 458 getreply();
4180_1 4:40dd020463ea 459 pc.printf(replybuff);
4180_1 4:40dd020463ea 460 wait(5);
4180_1 4:40dd020463ea 461 pc.printf("\n Getting Server IP \r\n");
star297 3:f7febfa77784 462 strcpy(cmdbuff, "AT+CIFSR\r\n");
4180_1 4:40dd020463ea 463 timeout=2500;
4180_1 4:40dd020463ea 464 getcount=200;
4180_1 4:40dd020463ea 465 while(weberror==0) {
4180_1 4:40dd020463ea 466 SendCMD();
4180_1 4:40dd020463ea 467 getreply();
4180_1 4:40dd020463ea 468 if (strstr(replybuff, "0.0.0.0") == NULL) {
4180_1 4:40dd020463ea 469 weberror=1; // wait for valid IP
star297 1:71ed1afbf344 470 }
4180_1 4:40dd020463ea 471 }
4180_1 4:40dd020463ea 472 pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n");
4180_1 4:40dd020463ea 473 pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n");
4180_1 4:40dd020463ea 474 replybuff[strlen(replybuff)-1] = '\0';
4180_1 4:40dd020463ea 475 //char* IP = replybuff + 5;
4180_1 4:40dd020463ea 476 sprintf(webdata,"%s", replybuff);
4180_1 4:40dd020463ea 477 pc.printf(webdata);
4180_1 4:40dd020463ea 478 led2=1;
4180_1 4:40dd020463ea 479 bufflen=200;
4180_1 4:40dd020463ea 480 count=0;
star297 1:71ed1afbf344 481 pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n");
star297 1:71ed1afbf344 482 esp.attach(&callback);
4180_1 4:40dd020463ea 483 } else {
4180_1 4:40dd020463ea 484 pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n");
4180_1 4:40dd020463ea 485 while(1) {}
4180_1 4:40dd020463ea 486 }
4180_1 4:40dd020463ea 487 t2.reset();
4180_1 4:40dd020463ea 488 t2.start();
4180_1 4:40dd020463ea 489 beep();
4180_1 4:40dd020463ea 490 }
star297 0:e2a155f50119 491 // ESP Command data send
star297 0:e2a155f50119 492 void SendCMD()
star297 0:e2a155f50119 493 {
4180_1 4:40dd020463ea 494 esp.printf("%s", cmdbuff);
4180_1 4:40dd020463ea 495 }
4180_1 4:40dd020463ea 496 // Get Command and ESP status replies
star297 0:e2a155f50119 497 void getreply()
4180_1 4:40dd020463ea 498 {
star297 3:f7febfa77784 499 memset(replybuff, '\0', sizeof(replybuff));
4180_1 4:40dd020463ea 500 t1.reset();
4180_1 4:40dd020463ea 501 t1.start();
4180_1 4:40dd020463ea 502 replycount=0;
star297 3:f7febfa77784 503 while(t1.read_ms()< timeout && replycount < getcount) {
star297 0:e2a155f50119 504 if(esp.readable()) {
4180_1 4:40dd020463ea 505 replybuff[replycount] = esp.getc();
4180_1 4:40dd020463ea 506 replycount++;
star297 2:d4c6bc0f2dc4 507 }
4180_1 4:40dd020463ea 508 }
4180_1 4:40dd020463ea 509 t1.stop();
star297 0:e2a155f50119 510 }
star297 0:e2a155f50119 511 // Analog in example
star297 0:e2a155f50119 512 void getbattery()
star297 0:e2a155f50119 513 {
4180_1 4:40dd020463ea 514 AdcIn=Ain1.read();
4180_1 4:40dd020463ea 515 Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy
4180_1 4:40dd020463ea 516 sprintf(Vcc,"%2.3f",Ht);
star297 0:e2a155f50119 517 }
star297 0:e2a155f50119 518 // Temperature example
star297 0:e2a155f50119 519 void gettemp()
4180_1 4:40dd020463ea 520 {
4180_1 4:40dd020463ea 521
4180_1 4:40dd020463ea 522 AdcIn=Ain2.read();
4180_1 4:40dd020463ea 523 Ht = (AdcIn*3.3); // set the numeric to the exact MCU analog reference voltage for greater accuracy
4180_1 4:40dd020463ea 524 sprintf(Temp,"%2.3f",Ht);
star297 0:e2a155f50119 525 }
4180_1 4:40dd020463ea 526 // Get RTC time
star297 0:e2a155f50119 527 void gettime()
star297 0:e2a155f50119 528 {
star297 0:e2a155f50119 529 time_t seconds = time(NULL);
4180_1 4:40dd020463ea 530 strftime(timebuf,50,"%H:%M:%S %a %d %b %y", localtime(&seconds));
star297 0:e2a155f50119 531 }
star297 0:e2a155f50119 532
star297 2:d4c6bc0f2dc4 533 void beep()
4180_1 4:40dd020463ea 534 {
star297 2:d4c6bc0f2dc4 535 speaker.period(1.0/2000); // 2000hz period
star297 2:d4c6bc0f2dc4 536 speaker = 0.5; //50% duty cycle - max volume
star297 2:d4c6bc0f2dc4 537 wait_ms(60);
star297 2:d4c6bc0f2dc4 538 speaker=0.0; // turn off audio
star297 2:d4c6bc0f2dc4 539 }
star297 2:d4c6bc0f2dc4 540
star297 1:71ed1afbf344 541 void setRTC()
star297 1:71ed1afbf344 542 {
4180_1 4:40dd020463ea 543 t.tm_sec = (0); // 0-59
4180_1 4:40dd020463ea 544 t.tm_min = (minute); // 0-59
4180_1 4:40dd020463ea 545 t.tm_hour = (hour); // 0-23
4180_1 4:40dd020463ea 546 t.tm_mday = (dayofmonth); // 1-31
4180_1 4:40dd020463ea 547 t.tm_mon = (month-1); // 0-11 "0" = Jan, -1 added for Mbed RCT clock format
4180_1 4:40dd020463ea 548 t.tm_year = ((year)+100); // year since 1900, current DCF year + 100 + 1900 = correct year
4180_1 4:40dd020463ea 549 set_time(mktime(&t)); // set RTC clock
4180_1 4:40dd020463ea 550 }