Regenerating PPM signal based on distances from ultrasonic sensors, ESP8266 for connectin via wifi. Autonomous quadcopter behaviour, autonomou height holding. Flying direction based on front and back ultrasonic sensors.
Dependencies: ConfigFile HCSR04 PID PPM2 mbed-rtos mbed
Diff: ESP8266/Server.h
- Branch:
- DistanceRegulation
- Revision:
- 34:5dca557e982f
- Parent:
- 33:a2f9fea05cb9
- Child:
- 37:76bfd4e9c383
--- a/ESP8266/Server.h Sun Feb 18 17:10:48 2018 +0000 +++ b/ESP8266/Server.h Sun Feb 25 18:32:13 2018 +0000 @@ -16,8 +16,8 @@ char cmdbuff[32]; char replybuff[1024]; char webcount[8]; -char webdata[1024]; // This may need to be bigger depending on WEB browser used -char webbuff[4096]; // Currently using 1986 characters, Increase this if more web page data added +char webdata[2048]; // This may need to be bigger depending on WEB browser used +char webbuff[8192]; // Currently using 1986 characters, Increase this if more web page data added char type[16]; char channel[2]; char ip_address[20]; @@ -45,7 +45,7 @@ //serverThread.start(serverRun); void callback(){ - //pc.printf("callback!!!!!!!!!!!!!!!!_________________________\n\r"); + ////pc.printf("callback!!!!!!!!!!!!!!!!_________________________\n\r"); led3 = 1; while (esp.readable()) { webbuff[count] = esp.getc(); @@ -61,7 +61,7 @@ void serverRun(){ reset=0; - pc.printf("\f\n\r------------ ESP8266 Hardware Reset --------------\n\r"); + //pc.printf("\f\n\r------------ ESP8266 Hardware Reset --------------\n\r"); //wait(0.5); reset=1; timeout=6000; @@ -71,6 +71,7 @@ startserver(); webcounter = 0; Timer timer; + bool pageWasSent = false; while(1){ if(DataRX==1) { timer.reset(); @@ -78,25 +79,27 @@ ReadWebData(); // Save data to configFile //writeSettingsToConfig(); - if (servreq == 1 && weberror == 0) { - pc.printf("Send page \n\r"); + if ((servreq == 1 && weberror == 0) && pageWasSent == false) { + //////pc.printf("Send page \n\r"); // send HTTP Response sendpage(); + pageWasSent = true; } else{ - pc.printf("Page was not sent \n\r"); + ////pc.printf("Page was not sent \n\r"); } esp.attach(&callback); - 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); - pc.printf("HTTP Packet: \n\n%s", webdata); - pc.printf("Web Characters sent : %d\n\n", bufl); - pc.printf("-------------------------------------\n\n"); + ////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); + ////pc.printf("HTTP Packet: \n\n%s", webdata); + ////pc.printf("Web Characters sent : %d\n\n", bufl); + ////pc.printf("-------------------------------------\n\n"); servreq=0; memset(_serverMessage, '\0', sizeof(_serverMessage)); } - if(timer.read_ms() > 1500){ - pc.printf("starting reading new configuration in server task\n\r"); + if(timer.read_ms() > 3000){ + pageWasSent = false; + ////pc.printf("starting reading new configuration in server task\n\r"); // when stop sending answers timer.stop(); timer.reset(); @@ -119,7 +122,7 @@ } - //Thread::wait(10); + Thread::wait(100); } } @@ -129,22 +132,22 @@ strcpy(webbuff, "<!DOCTYPE html>"); strcat(webbuff, "<html><head><title>ESP8266 Mbed LPC1768</title></head>"); strcat(webbuff, "<body>"); - strcat(webbuff, "<div style=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h1>ESP8266 Mbed IoT Web PID Controller</h1>"); - strcat(webbuff, "Hit Count - "); - strcat(webbuff, webcount); - strcat(webbuff, "</div><br /><hr>"); + //strcat(webbuff, "<div style=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h1>ESP8266 Mbed IoT Web PID Controller</h1>"); + //strcat(webbuff, "Hit Count - "); + //strcat(webbuff, webcount); + //strcat(webbuff, "</div><br /><hr>"); //server message (mostly errors) - strcat(webbuff, "<div stye=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h3>Server messages</h3>"); - strcat(webbuff, _serverMessage); - strcat(webbuff, "</div><br><hr>"); - strcat(webbuff, "<p><form method=\"POST\">"); - if(led1==0) { - strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" checked> LED 1 off"); - strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" > LED 1 on<br>"); - } else { - strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" > LED 1 off"); - strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" checked> LED 1 on<br>"); - } + //strcat(webbuff, "<div stye=\"text-align:center; background-color:#F4F4F4; color:#00AEDB;\"><h3>Server messages</h3>"); + //strcat(webbuff, _serverMessage); + //strcat(webbuff, "</div><br><hr>"); + strcat(webbuff, "<form method=\"POST\">"); + //if(led1==0) { + // strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" checked> LED 1 off"); + // strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" > LED 1 on<br>"); + //} else { + // strcat(webbuff, "<p><input type=\"radio\" name=\"led1\" value=\"0\" > LED 1 off"); + // strcat(webbuff, "<br><input type=\"radio\" name=\"led1\" value=\"1\" checked> LED 1 on<br>"); + //} // ground regulation if(_tempGroundRegulation) { strcat(webbuff, "<p><input type=\"radio\" name=\"groundRegulation\" value=\"1\" checked> Ground regulation ON"); @@ -185,24 +188,20 @@ ConvertToCharArray(_groundSetPoint); strcat(webbuff, _str); strcat(webbuff, "\"><br>"); - strcat(webbuff, "<p><input type=\"radio\" name=\"nothing\" value=\"1\" checked>"); - strcat(webbuff, "<p><input type=\"submit\" value=\"send-refresh\" style=\"background: #3498db;"); - strcat(webbuff, "background-image:-webkit-linear-gradient(top, #3498db, #2980b9);"); - strcat(webbuff, "background-image:linear-gradient(to bottom, #3498db, #2980b9);"); - strcat(webbuff, "-webkit-border-radius:12;border-radius: 12px;font-family: Arial;color:#ffffff;font-size:20px;padding:"); - strcat(webbuff, "10px 20px 10px 20px; border:solid #103c57 3px;text-decoration: none;"); - strcat(webbuff, "background: #3cb0fd;"); - strcat(webbuff, "background-image:-webkit-linear-gradient(top,#3cb0fd,#1a5f8a);"); - strcat(webbuff, "background-image:linear-gradient(to bottom,#3cb0fd,#1a5f8a);"); - strcat(webbuff, "text-decoration:none;\"></form>"); + strcat(webbuff, "<p><input type=\"radio\" name=\"nothing\" value=\"1\" checked></p>"); + strcat(webbuff, "<p><input type=\"submit\"></p>"); + strcat(webbuff, "</form>"); strcat(webbuff, "</body></html>"); // end of WEB page data bufl = strlen(webbuff); // get total page buffer length sprintf(cmdbuff,"AT+CIPSEND=%d,%d\r\n", linkID, bufl); // send IPD link channel and buffer character length. + pc.printf("%s \n\r", cmdbuff); timeout=200; getcount=7; SendCMD(); + Thread::wait(1000); getreply(); + pc.printf("%s \n\r", replybuff); SendWEB(); // send web page memset(webbuff, '\0', sizeof(webbuff)); sendcheck(); @@ -222,31 +221,31 @@ } } if(weberror==1) { // restart connection - pc.printf("sendcheck - restarting connection \n\r"); + //pc.printf("sendcheck - restarting connection \n\r"); strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); timeout=500; getcount=10; SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); sprintf(cmdbuff,"AT+CIPSERVER=0,%d\r\n", port); timeout=500; getcount=10; SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port); timeout=500; getcount=10; SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); } else { - pc.printf("sendcheck ok \n\r"); + //pc.printf("sendcheck ok \n\r"); sprintf(cmdbuff, "AT+CIPCLOSE=%s\r\n",channel); // close current connection SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); } t2.reset(); } @@ -274,7 +273,7 @@ int x = strcspn (webbuff,"+"); if(x) { strcpy(webdata, webbuff + x); - //pc.printf("webdata received: %s", webdata); + //////pc.printf("webdata received: %s", webdata); weberror=0; int numMatched = sscanf(webdata,"+IPD,%d,%d:%s", &linkID, &ipdLen, type); if (strstr(webdata, "led1=1") != NULL ) { @@ -290,127 +289,127 @@ _tempGroundRegulation = false; // pid min Output if (strstr(webdata, "groundPidMinOutput") != NULL ){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "groundPidMinOutput"); p_webdata = p_webdata + strlen("groundPidMinOutput") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - pc.printf("\n\r"); + ////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("groundPidMinOutput: %s", _str); + //////pc.printf("groundPidMinOutput: %s", _str); _groundPidMinOutput = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } //pid max output if (strstr(webdata, "groundPidMaxOutput") != NULL ){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "groundPidMaxOutput"); p_webdata = p_webdata + strlen("groundPidMaxOutput") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - //pc.printf("\n\r"); + //////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("groundPidMaxOutput: %s", _str); + //////pc.printf("groundPidMaxOutput: %s", _str); _groundPidMaxOutput = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } //bias if (strstr(webdata, "bias") != NULL ){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "bias"); p_webdata = p_webdata + strlen("bias") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - //pc.printf("\n\r"); + //////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("bias: %s", _str); + //////pc.printf("bias: %s", _str); _bias = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } // PID values if (strstr(webdata, "proportional") != NULL ){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "proportional"); p_webdata = p_webdata + strlen("proportional") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - //pc.printf("\n\r"); + //////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("proportional: %s", _str); + //////pc.printf("proportional: %s", _str); _newP = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } if (strstr(webdata, "integral") != NULL){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "integral"); p_webdata = p_webdata + strlen("integral") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - //pc.printf("\n\r"); + //////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("integral: %s", _str); + //////pc.printf("integral: %s", _str); _newI = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } if (strstr(webdata, "derivative") != NULL){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "derivative"); p_webdata = p_webdata + strlen("derivative") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - //pc.printf("\n\r"); + //////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("derivative: %s", _str); + //////pc.printf("derivative: %s", _str); _newD = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } if (strstr(webdata, "groundSetPoint") != NULL){ - //pc.printf("\n\r looking for data \n\r"); + //////pc.printf("\n\r looking for data \n\r"); char* p_webdata = strstr(webdata, "groundSetPoint"); p_webdata = p_webdata + strlen("groundSetPoint") + 1; int i = 0; while(*p_webdata != '&'){ - pc.printf("%c", *p_webdata); + ////pc.printf("%c", *p_webdata); _str[i] = *p_webdata; p_webdata += 1; i++; } - //pc.printf("\n\r"); + //////pc.printf("\n\r"); _str[i] = '\0'; - //pc.printf("groundSetPoint: %s", _str); + //////pc.printf("groundSetPoint: %s", _str); _groundSetPoint = atof(_str); - //pc.printf("\n\r end of looking for data \n\r"); + //////pc.printf("\n\r end of looking for data \n\r"); } sprintf(channel, "%d",linkID); if (strstr(webdata, "GET") != NULL) { @@ -430,37 +429,37 @@ } void startserver(){ - pc.printf("++++++++++ Resetting ESP ++++++++++\r\n"); + //pc.printf("++++++++++ Resetting ESP ++++++++++\r\n"); strcpy(cmdbuff,"AT+RST\r\n"); timeout=8000; getcount=1000; SendCMD(); getreply(); - pc.printf(replybuff); - pc.printf("%d",count); + //pc.printf(replybuff); + //pc.printf("%d",count); if (strstr(replybuff, "OK") != NULL) { - pc.printf("\n++++++++++ Starting Server ++++++++++\r\n"); + //////pc.printf("\n++++++++++ Starting Server ++++++++++\r\n"); strcpy(cmdbuff, "AT+CIPMUX=1\r\n"); // set multiple connections. timeout=500; getcount=20; SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); sprintf(cmdbuff,"AT+CIPSERVER=1,%d\r\n", port); timeout=500; getcount=20; SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); wait(1); sprintf(cmdbuff,"AT+CIPSTO=%d\r\n",SERVtimeout); timeout=500; getcount=50; SendCMD(); getreply(); - pc.printf(replybuff); + //pc.printf(replybuff); wait(5); - pc.printf("\n Getting Server IP \r\n"); + //pc.printf("\n Getting Server IP \r\n"); strcpy(cmdbuff, "AT+CIFSR\r\n"); timeout=2500; getcount=200; @@ -471,19 +470,19 @@ weberror=1; // wait for valid IP } } - pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n"); - pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n"); + //pc.printf("\n Enter WEB address (IP) found below in your browser \r\n\n"); + //pc.printf("\n The MAC address is also shown below,if it is needed \r\n\n"); replybuff[strlen(replybuff)-1] = '\0'; //char* IP = replybuff + 5; sprintf(webdata,"%s", replybuff); //SAVE IP ADDRESS get_ip_address(webdata); - pc.printf("ip_address: %s\n\r",ip_address); - pc.printf(webdata); - pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n"); + //pc.printf("ip_address: %s\n\r",ip_address); + //pc.printf(webdata); + //pc.printf("\n\n++++++++++ Ready ++++++++++\r\n\n"); esp.attach(&callback); } else { - pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n"); + //pc.printf("\n++++++++++ ESP8266 error, check power/connections ++++++++++\r\n"); while(1) {} } t2.reset();