Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 00003 00004 // LPC1768 ESP8266 works up to 460800 baud 00005 00006 //Serial ports to be used 00007 Serial pc(USBTX,USBRX);//TO BE used for debug info 00008 Serial esp(p13,p14);//TX,RX TO BE CONNECTED TO ESP 00009 Serial esp2(p13,p14);//TX,RX TO BE CONNECTED TO ESP 00010 int espbaud = 115200; 00011 DigitalOut espreset(p25,1); 00012 //Connections to relay 00013 //relay works at logic LOW 00014 DigitalOut digital_out_1(LED1,1);// High on initialization 00015 DigitalOut digital_out_2(LED2,1);// High on initialization 00016 DigitalOut digital_out_3(LED3,1);// High on initialization 00017 DigitalOut digital_out_4(LED4,1);// High on initialization 00018 //digital inputs, connected to push buttons 00019 DigitalIn digital_in_1(p21); 00020 DigitalIn digital_in_2(p22); 00021 DigitalIn digital_in_3(p23); 00022 DigitalIn digital_in_4(p24); 00023 //Analog output 00024 PwmOut analog_out_1(p26); 00025 //Analog Input 00026 AnalogIn tempSensor(p20); 00027 00028 //F401 ESP8266 works up to 460800 baud 00029 /* 00030 //Serial ports to be used 00031 Serial pc(USBTX,USBRX);//TO BE used for debug info 00032 Serial esp(D8,D2);//TX,RX TO BE CONNECTED TO ESP 00033 Serial esp2(D8,D2);//TX,RX TO BE CONNECTED TO ESP 00034 int espbaud = 115200; 00035 //Connections to relay 00036 //relay works at logic LOW 00037 DigitalOut digital_out_1(D3,1);// High on initialization 00038 DigitalOut digital_out_2(D4,1);// High on initialization 00039 DigitalOut digital_out_3(D5,1);// High on initialization 00040 DigitalOut digital_out_4(D6,1);// High on initialization 00041 //digital inputs, connected to push buttons 00042 DigitalIn digital_in_1(A1); 00043 DigitalIn digital_in_2(A2); 00044 DigitalIn digital_in_3(A3); 00045 DigitalIn digital_in_4(A4); 00046 //Analog output 00047 PwmOut analog_out_1(D15); 00048 //Analog Input 00049 AnalogIn tempSensor(A0); 00050 */ 00051 00052 char ssid[32] = "ssid"; // enter your router ssid inside the quotes 00053 char pwd[32] = "password"; // enter your router password inside the quotes 00054 00055 #define BUFFER_SIZE 3000 00056 #define REQ_LINE_BUFF_SIZE 100 00057 #define UNKNOWN 0 00058 #define OK 1 00059 #define ERROR 2 00060 #define FAIL 3 00061 #define READY 4 00062 #define READY_TO_WRITE_TCP 5 00063 00064 00065 const char get_analog_outputs_status[]="/analog_outputs"; 00066 const char get_Toggle_Output[]="/digital_outputs/toggle"; 00067 const char get_analog_inputs_status[]="/analog_inputs"; 00068 const char get_analog_output_update[]="/analog_outputs/update"; 00069 const char get_digital_output_status[]="/digital_outputs"; 00070 const char get_digital_inputs_html[]="/dinputs.html"; 00071 const char get_digital_input_status[]="/digital_inputs"; 00072 const char get_index_html[]="/index.html"; 00073 const char get_analog_outputs[]="/anoutputs.html"; 00074 const char get_analog_inputs_html[]="/aninputs.html"; 00075 00076 00077 const char jsonHeader[]="HTTP/1.1 200 OK\n" 00078 "Content-type: application/json\r\n\r\n"; 00079 00080 const char textPlainHeader[]="HTTP/1.1 200 OK\n" 00081 "Content-type: text/plain\r\n\r\n"; 00082 00083 const char index_html[]="HTTP/1.1 200 OK\n" 00084 "Content-type: text/html\r\n\r\n" 00085 "<!DOCTYPE html>\n<html>\n<head>\n<title>esp</title>\n<link rel=stylesheet type=text/css href=css/style.css>\n<script src=https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js></script>\n<script>$(document).ready(function(){setInterval(\"get_digital_output_status()\",2000)});function get_digital_output_status(){var a=\"/digital_outputs\";$.ajax({url:a,dataType:\"json\",success:function(b){if(b.digital_outputs.dout1==1){$(\"#dout1\").html(\"HIGH\")}else{$(\"#dout1\").html(\"LOW\")}if(b.digital_outputs.dout2==1){$(\"#dout2\").html(\"HIGH\")}else{$(\"#dout2\").html(\"LOW\")}if(b.digital_outputs.dout3==1){$(\"#dout3\").html(\"HIGH\")}else{$(\"#dout3\").html(\"LOW\")}if(b.digital_outputs.dout4==1){$(\"#dout4\").html(\"HIGH\")}else{$(\"#dout4\").html(\"LOW\")}},timeout:2000})}function digital_output_toggle(a){var b=\"/digital_outputs/toggle?pin=\"+a;$.ajax({url:b,dataType:\"text\",success:function(c){if(c==\"1\"){$(\"#\"+a).html(\"HIGH\")}else{if(c==\"0\"){$(\"#\"+a).html(\"LOW\")}else{alert(\"failed to toggle digital output\")}}},timeout:2000})};</script>\n</head>\n<body>\n<header>\n<img src=images/logo.jpg>\n<h1>ESP8266 BASED WEBSERVER</h1>\n</header>\n<nav>\n<ul>\n<li><a class=active href=index.html>Digital Outputs</a></li>\n<li><a href=dinputs.html>Digital inputs</a></li>\n<li><a href=anoutputs.html>Analog Outputs</a></li>\n<li><a href=aninputs.html>Analog Inputs</a></li>\n</ul>\n</nav>\n<section>\n<table>\n<tr>\n<th>Digital Ouput</th>\n<th>Status</th>\n<th>Option</th>\n</tr>\n<tr>\n<td>DOut1</td>\n<td id=dout1>waiting..</td>\n<td><button class=button onclick=\"digital_output_toggle('dout1')\">Toggle</button>\n</td>\n</tr>\n<tr>\n<td>DOut2</td>\n<td id=dout2>waiting..</td>\n<td><button class=button onclick=\"digital_output_toggle('dout2')\">Toggle</button>\n</tr>\n<tr>\n<td>DOut3</td>\n<td id=dout3>waiting..</td>\n<td><button class=button onclick=\"digital_output_toggle('dout3')\">Toggle</button>\n</tr>\n<tr>\n<td>DOut4</td>\n<td id=dout4>waiting..</td>\n<td><button class=button onclick=\"digital_output_toggle('dout4')\">Toggle</button>\n</tr>\n</table>\n</section>\n</body>\n</html>"; 00086 00087 const char digitalInputs_html[]="HTTP/1.1 200 OK\n" 00088 "Content-type: text/html\r\n\r\n" 00089 "<!DOCTYPE html>\n<html>\n<head>\n<title>esp</title>\n<link rel=stylesheet type=text/css href=css/style.css>\n<script src=https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js></script>\n<script>$(document).ready(function(){setInterval(\"get_digital_input_status()\",2000)});function get_digital_input_status(){var a=\"/digital_inputs\";$.ajax({url:a,dataType:\"json\",success:function(b){if(b.digital_inputs.din1==1){$(\"#din1\").html(\"HIGH\")}else{$(\"#din1\").html(\"LOW\")}if(b.digital_inputs.din2==1){$(\"#din2\").html(\"HIGH\")}else{$(\"#din2\").html(\"LOW\")}if(b.digital_inputs.din3==1){$(\"#din3\").html(\"HIGH\")}else{$(\"#din3\").html(\"LOW\")}if(b.digital_inputs.din4==1){$(\"#din4\").html(\"HIGH\")}else{$(\"#din4\").html(\"LOW\")}},timeout:2000})};</script>\n</head>\n<body>\n<header>\n<img src=images/logo.jpg>\n<h1>ESP8266 BASED WEBSERVER</h1>\n</header>\n<nav>\n<ul>\n<li><a href=index.html>Digital Outputs</a></li>\n<li><a class=active href=dinputs.html>Digital inputs</a></li>\n<li><a href=anoutputs.html>Analog Outputs</a></li>\n<li><a href=aninputs.html>Analog Inputs</a></li>\n</ul>\n</nav>\n<section>\n<table id=inputsTable>\n<tr>\n<th>Digital Input</th>\n<th>Status</th>\n</tr>\n<tr>\n<td>DIn1</td>\n<td id=din1>waiting..</td>\n</td>\n</tr>\n<tr>\n<td>DIn2</td>\n<td id=din2>waiting..</td>\n</tr>\n<tr>\n<td>DIn3</td>\n<td id=din3>waiting..</td>\n</tr>\n<tr>\n<td>DIn4</td>\n<td id=din4>waiting..</td>\n</tr>\n</table>\n</section>\n</body>\n</html>"; 00090 00091 const char analog_outputs_html[]="HTTP/1.1 200 OK\n" 00092 "Content-type: text/html\r\n\r\n" 00093 "<!DOCTYPE html>\n<html>\n<head>\n<title>esp</title>\n<link rel=stylesheet type=text/css href=css/style.css>\n<script src=https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js></script>\n<script type=text/javascript src=https://www.gstatic.com/charts/loader.js></script>\n<script>$(document).ready(function(){setInterval(\"getAnalogOutputStatus()\",2000);displayVoltageLevel()});var voltage_level=0;function getAnalogOutputStatus(){var a=\"/analog_outputs\";$.ajax({url:a,dataType:\"text\",success:function(b){voltage_level=parseFloat(b)},timeout:2000})}function setNewVoltageLevel(a){var b=\"/analog_outputs/update?value=\"+a;$.ajax({url:b,dataType:\"text\",success:function(c){voltage_level=parseFloat(c)},timeout:2000})}function displayVoltageLevel(){google.charts.load(\"current\",{packages:[\"gauge\"]});google.charts.setOnLoadCallback(a);function a(){var d=google.visualization.arrayToDataTable([[\"Label\",\"Value\"],[\"Volts\",0],]);var b={width:300,height:250,redFrom:8,redTo:12,yellowFrom:4,yellowTo:8,greenFrom:0,greenTo:4,min:0,max:12,minorTicks:5};var c=new google.visualization.Gauge(document.getElementById(\"chart_div\"));c.draw(d,b);setInterval(function(){d.setValue(0,1,voltage_level);c.draw(d,b)},500)}};</script>\n</head>\n<body>\n<header>\n<img src=images/logo.jpg>\n<h1>ESP8266 BASED WEBSERVER</h1>\n</header>\n<nav>\n<ul>\n<li><a href=index.html>Digital Outputs</a>\n</li>\n<li><a href=dinputs.html>Digital inputs</a>\n</li>\n<li><a class=active href=anoutputs.html>Analog Outputs</a>\n</li>\n<li><a href=aninputs.html>Analog Inputs</a>\n</li>\n</ul>\n</nav>\n<section>\n<h3>Enter new voltage value and press Update btton</h3>\n<input type=text id=volts maxlength=5 placeholder=Voltage..(0.00-12.00)>\n<button class=button onclick=\"setNewVoltageLevel(document.getElementById('volts').value)\">Update</button>\n<div id=chart_div style=width:300px;height:250px></div>\n<h1 style=color:blue;margin-left:50px>Voltage Level</h1>\n</section>\n</body>\n</html>"; 00094 00095 const char analog_inputs_html[]="HTTP/1.1 200 OK\n" 00096 "Content-type: text/html\r\n\r\n" 00097 "<!DOCTYPE html>\n<html>\n<head>\n<title>esp</title>\n<link rel=stylesheet type=text/css href=css/style.css>\n<script src=https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js></script>\n<script>$(document).ready(function(){setInterval(\"getTemperature()\",2000)});function getTemperature(){var a=\"/analog_inputs\";$.ajax({url:a,dataType:\"text\",success:function(b){$(\"#temp\").html(b+\"℃\")},timeout:2000})};</script>\n</head>\n<body>\n<header>\n<img src=images/logo.jpg>\n<h1>ESP8266 BASED WEBSERVER</h1>\n</header>\n<nav>\n<ul>\n<li><a href=index.html>Digital Outputs</a>\n</li>\n<li><a href=dinputs.html>Digital inputs</a>\n</li>\n<li><a href=anoutputs.html>Analog Outputs</a>\n</li>\n<li><a class=active href=aninputs.html>Analog Inputs</a>\n</li>\n</ul>\n</nav>\n<section>\n<h1 id=temp style=border-style:solid;border-width:6px;border-color:red;border-radius:20px;background-color:#aeb5b7;width:100px;margin-top:20px;margin-left:40px;padding:20px>Waiting..</h1>\n<h2 style=margin-left:25px;color:blue>Temperature Value</h2>\n<br><br><h2>Temperature history</h2>\n<iframe width=450 height=260 style=\"border:1px solid #ccc\" src=\"https://thingspeak.com/channels/243141/charts/1?bgcolor=%23ffffff&color=%23d62020&dynamic=true&results=100&type=line\"></iframe>\n</section>\n</body>\n</html>"; 00098 00099 const char style_css[]="HTTP/1.1 200 OK\n" 00100 "Content-type: text/css\r\n\r\n" 00101 "*{padding:0;margin:0}header{background-color:#27ace5}body{font-family:calibri}header h1{text-align:center;font-size:4em;color:#fff;padding:10px}header img{width:110px;margin-top:10px;float:left}ul{list-style-type:none;margin:0;padding:0;overflow:hidden;background-color:#333}li{float:left}li a{display:block;color:#fff;text-align:center;padding:14px 16px;text-decoration:none}li a:hover:not(.active){background-color:#111}.active{background-color:#4CAF50}table{border-collapse:collapse;width:100%}table#inputsTable{border-collapse:collapse;width:70%}th,td{text-align:left;padding:8px}tr:nth-child(even){background-color:#f2f2f2}th{background-color:#4CAF50;color:#fff}section{width:60%;margin:10px}.button{display:inline-block;padding:10px 15px;font-size:15px;cursor:pointer;text-align:center;text-decoration:none;outline:none;color:#fff;background-color:#4CAF50;border:none;border-radius:15px;box-shadow:0 9px #999}.button:hover{background-color:#3e8e41}.button:active{background-color:#3e8e41;box-shadow:0 5px #666;transform:translateY(4px)}input[type=text],select{width:25%;padding:12px 20px;margin:8px 0;display:inline-block;border:1px solid #ccc;border-radius:4px;box-sizing:border-box}"; 00102 00103 const char not_found_text[]="HTTP/1.1 404 Not Found\n" 00104 "Content-type: text/plain\r\n\r\n" 00105 "page not found"; 00106 00107 //HTTP/1.1 200 OK 00108 //Content-type:image/jpeg 00109 const char logo_jpg[]={0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, 0x74, 0x79, 0x70, 0x65, 0x3A, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2F, 0x6A, 0x70, 0x65, 0x67, 0x0D,0x0A,0x0D, 0x0A, 00110 0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x3A, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4F, 0x52, 0x3A, 0x20, 0x67, 0x64, 0x2D, 0x6A, 0x70, 0x65, 0x67, 0x20, 0x76, 0x31, 0x2E, 0x30, 0x20, 0x28, 0x75, 0x73, 0x69, 0x6E, 0x67, 0x20, 0x49, 0x4A, 0x47, 0x20, 0x4A, 0x50, 0x45, 0x47, 0x20, 0x76, 0x38, 0x30, 0x29, 0x2C, 0x20, 0x71, 0x75, 0x61, 0x6C, 0x69, 0x74, 0x79, 0x20, 0x3D, 0x20, 0x35, 0x0A, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0xA0, 0x6E, 0x78, 0x8C, 0x78, 0x64, 0xA0, 0x8C, 0x82, 0x8C, 0xB4, 0xAA, 0xA0, 0xBE, 0xF0, 0xFF, 0xFF, 0xF0, 0xDC, 0xDC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x43, 0x01, 0xAA, 0xB4, 0xB4, 0xF0, 0xD2, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x11, 0x08, 0x00, 0x71, 0x00, 0x96, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xFF, 0xC4, 0x00, 0x1F, 0x00, 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0xFF, 0xC4, 0x00, 0xB5, 0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7D, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1, 0xF0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFF, 0xC4, 0x00, 0x1F, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0xFF, 0xC4, 0x00, 0xB5, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91, 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24, 0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00, 0x9A, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x29, 0x8D, 0x20, 0x07, 0x8E, 0x68, 0x01, 0xF4, 0x50, 0x08, 0x23, 0x22, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x29, 0x19, 0x82, 0x8E, 0x69, 0xAC, 0xFC, 0x1D, 0xB5, 0x18, 0x04, 0xF2, 0xC7, 0x02, 0x80, 0x14, 0xB3, 0x39, 0xC0, 0xA5, 0x55, 0x03, 0xDC, 0xFE, 0x82, 0x91, 0x8E, 0xDE, 0x00, 0xE3, 0xF9, 0xD2, 0xE4, 0x10, 0x31, 0xFF, 0x00, 0x7C, 0x8A, 0x00, 0x5C, 0x9C, 0xE5, 0x7F, 0x13, 0xD8, 0xD3, 0xC1, 0x04, 0x54, 0x7D, 0xFD, 0x4F, 0xA7, 0x61, 0x40, 0xEE, 0xC0, 0xF3, 0xDF, 0xD2, 0x80, 0x25, 0xA2, 0x91, 0x58, 0x30, 0xE2, 0x96, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA6, 0x34, 0x98, 0xE1, 0x68, 0x01, 0xCC, 0xC1, 0x7A, 0xD4, 0x4E, 0xE4, 0x9C, 0x74, 0xF6, 0xA6, 0xEE, 0x39, 0xCE, 0x79, 0xA4, 0xCD, 0x30, 0x14, 0x1E, 0xC7, 0x9A, 0x56, 0xE7, 0xBE, 0x4F, 0xE9, 0x4D, 0xA5, 0x07, 0xB8, 0xE2, 0x80, 0x14, 0x1C, 0x0C, 0x1E, 0x56, 0x8E, 0x50, 0xE4, 0x72, 0x29, 0xD1, 0xE1, 0xB8, 0x27, 0xF0, 0xA5, 0x60, 0x17, 0xFD, 0xD3, 0xD4, 0x7F, 0x51, 0x48, 0x04, 0x1F, 0x32, 0xE7, 0x1C, 0x7A, 0x0F, 0xEB, 0x48, 0x48, 0x1F, 0x7B, 0xFE, 0xF9, 0x1F, 0xD6, 0x99, 0x9C, 0x1E, 0x0D, 0x25, 0x3B, 0x01, 0x22, 0xB6, 0x79, 0x1C, 0x37, 0xF3, 0xA9, 0x55, 0xB7, 0x7D, 0x7D, 0x2A, 0xBD, 0x3D, 0x4B, 0x31, 0x18, 0xEB, 0x45, 0x84, 0x4D, 0x45, 0x14, 0x52, 0x18, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x52, 0x33, 0x05, 0x1C, 0xD2, 0xD4, 0x0E, 0x08, 0x6E, 0x68, 0x01, 0x59, 0xCB, 0x7B, 0x0A, 0x6E, 0x3A, 0x67, 0xBD, 0x07, 0x00, 0x0E, 0x0D, 0x04, 0x82, 0x29, 0x88, 0x52, 0xA0, 0x00, 0x73, 0xD7, 0xF4, 0xA6, 0xD3, 0xB2, 0x06, 0x7B, 0xFB, 0xD3, 0x4F, 0xB7, 0x4A, 0x06, 0x25, 0x2E, 0x38, 0xE7, 0x8A, 0x00, 0xFC, 0xFD, 0x69, 0x3A, 0xD2, 0x01, 0xCA, 0x07, 0x5C, 0xF4, 0xA5, 0x2D, 0xEA, 0x39, 0xF7, 0xA6, 0xD3, 0xBE, 0xF7, 0xD7, 0xDC, 0xD0, 0x03, 0x48, 0xA4, 0xA7, 0x63, 0x9C, 0x54, 0x89, 0x1E, 0x39, 0x34, 0xC4, 0x35, 0x10, 0xB7, 0xD2, 0xA5, 0x00, 0x01, 0xC5, 0x2D, 0x14, 0x86, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0xD9, 0x00, 0x2A, 0x73, 0x4E, 0xA0, 0xF3, 0x40, 0x10, 0x12, 0x4E, 0x01, 0x3C, 0x1A, 0x1B, 0xEF, 0x64, 0x0F, 0xC2, 0x95, 0xD7, 0x61, 0xF5, 0x06, 0x9A, 0x38, 0x39, 0xCF, 0xD2, 0x80, 0x0C, 0xE4, 0xF2, 0x3A, 0x76, 0xA4, 0xEE, 0x45, 0x28, 0x04, 0xE4, 0x8E, 0xD4, 0x29, 0x18, 0x20, 0xF7, 0xA6, 0x21, 0x41, 0x04, 0x6D, 0x38, 0x03, 0xBF, 0xBD, 0x23, 0x03, 0xD7, 0x9C, 0x9E, 0x07, 0xD2, 0x92, 0x9E, 0x1B, 0x23, 0xA6, 0x5B, 0xDE, 0x80, 0x23, 0x3C, 0x53, 0x91, 0x0B, 0x1F, 0x6A, 0x91, 0x62, 0xEE, 0xD5, 0x27, 0x4A, 0x43, 0x11, 0x54, 0x2F, 0x4A, 0x5A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x04, 0x23, 0x27, 0xDA, 0xA1, 0x61, 0xB7, 0x38, 0x1F, 0x2D, 0x4F, 0x48, 0x47, 0x06, 0x80, 0x21, 0x04, 0xA8, 0xE3, 0xA5, 0x36, 0x9E, 0x54, 0x83, 0xC0, 0xC8, 0x34, 0xA2, 0x3C, 0x1E, 0x69, 0xDC, 0x06, 0xAA, 0x16, 0xA9, 0x95, 0x42, 0xD2, 0x81, 0x8A, 0x29, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x84, 0x70, 0x29, 0x68, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x3F, 0xFF, 0xD9}; 00111 00112 // HTTP/1.1 200 OK 00113 //Content-type:image/x-icon 00114 const char favicon_ico[]={0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x31, 0x20, 0x32, 0x30, 0x30, 0x20, 0x4F, 0x4B, 0x0A, 0x43, 0x6F, 0x6E, 0x74, 0x65, 0x6E, 0x74, 0x2D, 0x74, 0x79, 0x70, 0x65, 0x3A, 0x20, 0x69, 0x6D, 0x61, 0x67, 0x65, 0x2F, 0x78, 0x2D, 0x69, 0x63, 0x6F, 0x6E,0x0D, 0x0A,0x0D, 0x0A, 00115 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x68, 0x03, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xED, 0xED, 0xED, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF6, 0xF6, 0xF6, 0xAD, 0xB4, 0xB3, 0xD9, 0xE0, 0xDF, 0xFA, 0xFA, 0xFA, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF5, 0xF5, 0xF5, 0xC8, 0xC8, 0xC8, 0x82, 0x5E, 0x64, 0x79, 0x56, 0x5C, 0xDF, 0xDF, 0xDF, 0xF7, 0xF7, 0xF7, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF7, 0xF7, 0xF7, 0xE4, 0xE4, 0xE4, 0x6F, 0x6F, 0x6F, 0xA6, 0x66, 0x66, 0x7C, 0x3A, 0x37, 0x64, 0x5B, 0x4F, 0xE1, 0xDC, 0xD5, 0xF8, 0xF8, 0xF8, 0xF6, 0xF6, 0xF6, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF9, 0xF9, 0xF9, 0x9B, 0x9B, 0x9B, 0x5B, 0x5B, 0x5B, 0x74, 0x5A, 0x3A, 0x7F, 0x62, 0x3E, 0x7A, 0x5F, 0x3A, 0x8B, 0x7D, 0x6A, 0xBC, 0xBC, 0xBC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF6, 0xF6, 0xF6, 0x87, 0x86, 0x84, 0x67, 0x64, 0x61, 0x79, 0x5E, 0x41, 0x69, 0x4B, 0x2A, 0x97, 0x7F, 0x5E, 0x50, 0x41, 0x34, 0x2F, 0x2F, 0x2F, 0xBE, 0xBC, 0xBA, 0xF9, 0xF8, 0xF5, 0xF8, 0xF8, 0xF7, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xC6, 0xC6, 0xC6, 0x6C, 0x5B, 0x46, 0x7C, 0x60, 0x3D, 0x8C, 0x62, 0x64, 0x5E, 0x3A, 0x3F, 0x42, 0x42, 0x41, 0x39, 0x39, 0x39, 0x5B, 0x5B, 0x5B, 0x77, 0x61, 0x46, 0xC0, 0xAC, 0x8B, 0xF8, 0xF8, 0xF7, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF4, 0xF4, 0xF4, 0xA3, 0x93, 0x7E, 0x7C, 0x5F, 0x3A, 0x95, 0x6D, 0x6F, 0x5F, 0x3B, 0x41, 0x35, 0x35, 0x35, 0x47, 0x47, 0x47, 0x71, 0x71, 0x71, 0x69, 0x53, 0x37, 0x57, 0x3C, 0x19, 0xA0, 0xA0, 0x9F, 0xF3, 0xF3, 0xF3, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF6, 0xF2, 0xAD, 0xA7, 0x9F, 0x66, 0x3E, 0x44, 0x61, 0x37, 0x3E, 0x5D, 0x3A, 0x3F, 0x60, 0x4D, 0x50, 0xB8, 0xB8, 0xB8, 0x81, 0x42, 0x46, 0x7A, 0x26, 0x2A, 0x89, 0x46, 0x31, 0xD7, 0xB1, 0xA2, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF6, 0xF6, 0xF6, 0xD2, 0xB6, 0xBD, 0x7A, 0x4E, 0x55, 0x7C, 0x50, 0x57, 0x7F, 0x67, 0x6B, 0x7B, 0x7B, 0x7B, 0x82, 0x6C, 0x6F, 0x7B, 0x5D, 0x5F, 0x85, 0x75, 0x4F, 0xE6, 0xDC, 0xC5, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xFC, 0xF6, 0xF9, 0xD2, 0xC1, 0xC4, 0x8C, 0x77, 0x7A, 0x83, 0x78, 0x7A, 0x68, 0x68, 0x68, 0x94, 0x9A, 0x99, 0x8A, 0x92, 0x90, 0xBB, 0xC8, 0xB4, 0xF2, 0xF9, 0xEE, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF7, 0xF7, 0xF7, 0xCC, 0xCC, 0xCC, 0x70, 0x70, 0x70, 0x9C, 0x9C, 0x9C, 0x9A, 0x9A, 0x9A, 0xAA, 0xAA, 0xAA, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xDC, 0xDC, 0xDC, 0x79, 0x79, 0x79, 0xA8, 0xA8, 0xA8, 0xEE, 0xEE, 0xEE, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xEA, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xF7, 0xF7, 0xF7, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 00116 00117 char rxBuff[BUFFER_SIZE];//array to store data received from esp 00118 char reqLineBuff[REQ_LINE_BUFF_SIZE]; 00119 unsigned char reqLinBuffIndex=0; 00120 unsigned int bufferWritingIndex=0;//write pointer 00121 unsigned int bufferReadingIndex_IpdSearch=0;//read pointer 00122 unsigned int bufferReadingIndex_espRespSearch=0;//read pointer 00123 char serverIp[16]; 00124 00125 Timer t; 00126 00127 void espRxInterrupt(); 00128 char readEspResponse(); 00129 void handleHttpRequests(); 00130 void processReqLine(char *stringToProcess); 00131 void sendMemArrayToEsp(const char*str,unsigned int len); 00132 void sendRequestedPageToClient(char id, const char* page,unsigned int len); 00133 void extractQueryFieldValue(char* someUrl,char* field, char* value); 00134 char toggleOutput(char* pinName); 00135 00136 int main(){ 00137 //configure Pull down on all digital inputs 00138 digital_in_1.mode(PullDown); 00139 digital_in_2.mode(PullDown); 00140 digital_in_3.mode(PullDown); 00141 digital_in_4.mode(PullDown); 00142 00143 //configure baud rate for UART 00144 pc.baud(115200); 00145 esp.baud(espbaud); 00146 00147 esp2.attach(&espRxInterrupt,Serial::RxIrq); 00148 00149 pc.printf("\033[0m\033[2J\033[HInitialise!\r\n\n\n"); 00150 00151 esp.printf("AT+RST\r\n"); 00152 while(readEspResponse()!=READY); 00153 pc.printf("Reset success\n"); 00154 esp.printf("ATE0\r\n");//disable ECHO 00155 while(readEspResponse()!=OK); 00156 esp.printf("AT+CWMODE=1\r\n");//enable station mode 00157 while(readEspResponse()!=OK); 00158 esp.printf("AT+CIPMUX=1\r\n");// enable multiple connections 00159 while(readEspResponse()!=OK); 00160 esp.printf("AT+CIPSERVER=1,80\r\n");//start server at port 80 00161 while(readEspResponse()!=OK); 00162 esp.printf("AT+CIPSTO=5\r\n");//Server timeout=5 seconds 00163 while(readEspResponse()!=OK); 00164 00165 pc.printf("Connecting to WiFi.."); 00166 char cmdbuff[60]; 00167 strcpy(cmdbuff, "AT+CWJAP_CUR=\""); 00168 strcat(cmdbuff, ssid); 00169 strcat(cmdbuff, "\",\""); 00170 strcat(cmdbuff, pwd); 00171 strcat(cmdbuff, "\"\r\n"); 00172 esp.printf(cmdbuff); 00173 char responseFromEsp; 00174 00175 while(1) 00176 { 00177 responseFromEsp=readEspResponse(); 00178 wait_us(100000); 00179 pc.putc('.'); 00180 if(responseFromEsp==OK || responseFromEsp==FAIL) 00181 break; 00182 } 00183 pc.putc('\n'); 00184 if(responseFromEsp==OK) 00185 { 00186 pc.printf("Connected to Wifi\n"); 00187 __disable_irq(); 00188 esp.printf("AT+CIFSR\r\n");//check obtained IP 00189 esp.scanf("+CIFSR:STAIP,\"%15[^\"]",serverIp); 00190 __enable_irq(); 00191 while(readEspResponse()!=OK); 00192 } 00193 if(responseFromEsp==FAIL){ 00194 pc.printf("Can't connect to Wifi\n"); 00195 while(1); 00196 } 00197 00198 pc.printf("Server IP is %s\n",serverIp); 00199 00200 t.start();//start timer 00201 while(1){ 00202 handleHttpRequests(); 00203 } 00204 } 00205 00206 void espRxInterrupt(){ 00207 if(esp2.readable()) 00208 { 00209 rxBuff[bufferWritingIndex++]=esp2.getc(); 00210 if(bufferWritingIndex>=BUFFER_SIZE) 00211 bufferWritingIndex=0; 00212 } 00213 } 00214 00215 char readEspResponse(){ 00216 char rxByte; 00217 char espResponse=UNKNOWN; 00218 static char state=0; 00219 00220 while(bufferReadingIndex_espRespSearch!=bufferWritingIndex) 00221 { 00222 rxByte=rxBuff[bufferReadingIndex_espRespSearch++]; 00223 //pc.putc(rxByte); 00224 if(bufferReadingIndex_espRespSearch>=BUFFER_SIZE) 00225 bufferReadingIndex_espRespSearch=0; 00226 00227 switch(state) 00228 { 00229 case 0: 00230 if(rxByte=='O')//it may be OK response 00231 state=1; 00232 else if(rxByte=='E')//it may be ERROR response 00233 state=4; 00234 else if(rxByte=='F')//it may be FAIL response 00235 state=10; 00236 else if(rxByte=='r')//it may be 'ready' response 00237 state=15; 00238 else if(rxByte=='>')//it may be Ready To Write TCP '>' response 00239 state=21; 00240 break; 00241 00242 case 1: 00243 if(rxByte=='K') 00244 state=2; 00245 else state=0; 00246 break; 00247 00248 case 2: 00249 if(rxByte==0x0d) 00250 state=3; 00251 else state=0; 00252 break; 00253 00254 case 3: 00255 if(rxByte==0x0A) 00256 espResponse=OK; 00257 state=0; 00258 break; 00259 00260 case 4://ERROR 00261 if(rxByte=='R') 00262 state=5; 00263 else state=0; 00264 break; 00265 00266 case 5: 00267 if(rxByte=='R') 00268 state=6; 00269 else state=0; 00270 break; 00271 00272 case 6: 00273 if(rxByte=='O') 00274 state=7; 00275 else state=0; 00276 break; 00277 00278 00279 case 7: 00280 if(rxByte=='R') 00281 state=8; 00282 else state=0; 00283 break; 00284 00285 case 8: 00286 if(rxByte==0x0d) 00287 state=9; 00288 else state=0; 00289 break; 00290 00291 case 9: 00292 if(rxByte==0x0A) 00293 espResponse=ERROR; 00294 state=0; 00295 break; 00296 00297 00298 case 10://fail 00299 if(rxByte=='A') 00300 state=11; 00301 else state=0; 00302 break; 00303 00304 00305 case 11: 00306 if(rxByte=='I') 00307 state=12; 00308 else state=0; 00309 break; 00310 00311 00312 case 12: 00313 if(rxByte=='L') 00314 state=13; 00315 else state=0; 00316 00317 break; 00318 00319 case 13: 00320 if(rxByte==0x0d) 00321 state=14; 00322 else state=0; 00323 break; 00324 00325 case 14: 00326 if(rxByte==0x0A) 00327 espResponse=FAIL; 00328 state=0; 00329 break; 00330 00331 00332 case 15://READY 00333 if(rxByte=='e') 00334 state=16; 00335 else state=0; 00336 break; 00337 00338 00339 case 16: 00340 if(rxByte=='a') 00341 state=17; 00342 else state=0; 00343 break; 00344 00345 case 17: 00346 if(rxByte=='d') 00347 state=18; 00348 else state=0; 00349 break; 00350 00351 case 18: 00352 if(rxByte=='y') 00353 state=19; 00354 else state=0; 00355 break; 00356 00357 case 19: 00358 if(rxByte==0x0d) 00359 state=20; 00360 else state=0; 00361 break; 00362 00363 case 20: 00364 if(rxByte==0x0A) 00365 espResponse=READY; 00366 state=0; 00367 break; 00368 00369 case 21: 00370 if(rxByte==0x20) 00371 espResponse=READY_TO_WRITE_TCP; 00372 state=0; 00373 00374 default: 00375 state=0; 00376 break; 00377 } 00378 } 00379 return espResponse; 00380 } 00381 00382 00383 00384 void handleHttpRequests(){ 00385 char rxByte; 00386 static char state=0; 00387 00388 while(bufferReadingIndex_IpdSearch!=bufferWritingIndex) 00389 { 00390 rxByte=rxBuff[bufferReadingIndex_IpdSearch++]; 00391 //pc.putc(rxByte); 00392 if(bufferReadingIndex_IpdSearch>=BUFFER_SIZE) 00393 bufferReadingIndex_IpdSearch=0; 00394 switch(state) 00395 { 00396 case 0: 00397 if(rxByte=='+') 00398 state=1; 00399 break; 00400 00401 case 1: 00402 if(rxByte=='I') 00403 state=2; 00404 else state=0; 00405 break; 00406 00407 case 2: 00408 if(rxByte=='P') 00409 state=3; 00410 else state=0; 00411 break; 00412 00413 case 3: 00414 if(rxByte=='D') 00415 state=4; 00416 else state=0; 00417 break; 00418 00419 case 4: 00420 if(rxByte==',') 00421 state=5; 00422 else state=0; 00423 break; 00424 00425 case 5: 00426 if(rxByte!=0x0d) 00427 { 00428 reqLineBuff[reqLinBuffIndex++]=rxByte; 00429 } 00430 else 00431 { 00432 reqLineBuff[reqLinBuffIndex]=0x00; 00433 bufferReadingIndex_espRespSearch=bufferReadingIndex_IpdSearch; 00434 processReqLine(reqLineBuff); 00435 state=0; 00436 reqLinBuffIndex=0; 00437 } 00438 } 00439 } 00440 } 00441 00442 void processReqLine(char *stringToProcess) 00443 { 00444 //0,416:GET /?led=ON HTTP/1.1 00445 char requestType[6]; 00446 char request[50]; 00447 char linkId; 00448 int ipdLen; 00449 sscanf(stringToProcess,"%c,%d:%s %s",&linkId,&ipdLen,requestType,request); 00450 pc.printf("%s\n",request); 00451 if(request!=NULL) 00452 { 00453 if(strcmp(request,"/")==0 || strcmp(request,get_index_html)==0) 00454 { 00455 //send index.html 00456 sendRequestedPageToClient(linkId,index_html,sizeof(index_html)-1); 00457 } 00458 else if(strcmp(request,get_digital_inputs_html)==0) 00459 { 00460 sendRequestedPageToClient(linkId,digitalInputs_html,sizeof(digitalInputs_html)-1); 00461 } 00462 else if(strcmp(request,get_analog_inputs_html)==0) 00463 { 00464 sendRequestedPageToClient(linkId,analog_inputs_html,sizeof(analog_inputs_html)-1); 00465 00466 } 00467 else if(strcmp(request,get_analog_outputs)==0) 00468 { 00469 sendRequestedPageToClient(linkId,analog_outputs_html,sizeof(analog_outputs_html)-1); 00470 } 00471 00472 else if(strcmp(request,"/images/logo.jpg")==0) 00473 { 00474 sendRequestedPageToClient(linkId,logo_jpg,sizeof(logo_jpg)); 00475 } 00476 else if(strcmp(request,"/favicon.ico")==0) 00477 { 00478 sendRequestedPageToClient(linkId,favicon_ico,sizeof(favicon_ico)); 00479 } 00480 else if(strcmp(request,"/css/style.css")==0) 00481 { 00482 sendRequestedPageToClient(linkId,style_css,sizeof(style_css)-1); 00483 } 00484 else if(strncmp(request,get_Toggle_Output,strlen(get_Toggle_Output))==0) 00485 { 00486 //check query field and value, and toggle appropriate Output 00487 char field[10],value[10]; 00488 extractQueryFieldValue(request,field,value); 00489 if(value!=NULL) 00490 { 00491 char newPinState=toggleOutput(value); 00492 char responsePacket[100]; 00493 sprintf(responsePacket,"%s%c",textPlainHeader,newPinState+48); 00494 sendRequestedPageToClient(linkId,responsePacket,strlen(responsePacket)); 00495 } 00496 } 00497 else if(strcmp(request,get_digital_output_status)==0) 00498 { 00499 //"{\"digital_outputs\":{\"dout1\":1,\"dout2\":0,\"dout3\":1,\"dout4\":1}}" 00500 char responsePacket[200]; 00501 sprintf(responsePacket,"%s{\"digital_outputs\":{\"dout1\":%c,\ 00502 \"dout2\":%c,\"dout3\":%c,\"dout4\":%c}}",jsonHeader,(!digital_out_1)+48, 00503 (!digital_out_2)+48,(!digital_out_3)+48,(!digital_out_4)+48); 00504 sendRequestedPageToClient(linkId,responsePacket,strlen(responsePacket)); 00505 } 00506 else if(strcmp(request,get_digital_input_status)==0) 00507 { 00508 char responsePacket[200]; 00509 sprintf(responsePacket,"%s{\"digital_inputs\":{\"din1\":%c,\ 00510 \"din2\":%c,\"din3\":%c,\"din4\":%c}}",jsonHeader,(digital_in_1)+48, 00511 (digital_in_2)+48,(digital_in_3)+48,(digital_in_4)+48); 00512 sendRequestedPageToClient(linkId,responsePacket,strlen(responsePacket)); 00513 00514 } 00515 else if(strncmp(request,get_analog_output_update,strlen(get_analog_output_update))==0) 00516 { 00517 char field[10],value[10]; 00518 extractQueryFieldValue(request,field,value); 00519 if(value!=NULL) 00520 { 00521 analog_out_1=atof(value)/12.0; 00522 char responsePacket[100]; 00523 sprintf(responsePacket,"%s%.2f",textPlainHeader,analog_out_1.read()*12.0f); 00524 sendRequestedPageToClient(linkId,responsePacket,strlen(responsePacket)); 00525 } 00526 } 00527 else if(strcmp(request,get_analog_outputs_status)==0) 00528 { 00529 char responsePacket[100]; 00530 sprintf(responsePacket,"%s%.2f",textPlainHeader,analog_out_1.read()*12.0f); 00531 sendRequestedPageToClient(linkId,responsePacket,strlen(responsePacket)); 00532 } 00533 else if(strcmp(request,get_analog_inputs_status)==0) 00534 { 00535 char responsePacket[100]; 00536 sprintf(responsePacket,"%s%.2f",textPlainHeader,((tempSensor*3.3f)-0.500f)*100.0f); 00537 sendRequestedPageToClient(linkId,responsePacket,strlen(responsePacket)); 00538 } 00539 else 00540 { 00541 sendRequestedPageToClient(linkId,not_found_text,sizeof(not_found_text)-1); 00542 //send page not found message 00543 } 00544 } 00545 } 00546 00547 00548 void sendRequestedPageToClient(char id, const char* page,unsigned int len) 00549 { 00550 char atCommandArray[50]; 00551 unsigned int lenOfPacketToTx; 00552 unsigned int pageToSendAddress=0; 00553 char tempEspStatus; 00554 while(len>0) 00555 { 00556 if(len>2048){ 00557 len-=2048; 00558 lenOfPacketToTx=2048; 00559 } 00560 else{ 00561 lenOfPacketToTx=len; 00562 len=0; 00563 } 00564 00565 sprintf(atCommandArray,"AT+CIPSEND=%c,%d\r\n",id,lenOfPacketToTx); 00566 bufferReadingIndex_espRespSearch=bufferWritingIndex; 00567 esp.printf(atCommandArray); 00568 00569 while(1) 00570 { 00571 tempEspStatus=readEspResponse(); 00572 if(tempEspStatus==READY_TO_WRITE_TCP||tempEspStatus==ERROR ||tempEspStatus==FAIL) 00573 break; 00574 } 00575 //now send page 00576 if(tempEspStatus==READY_TO_WRITE_TCP) 00577 { 00578 sendMemArrayToEsp(page+pageToSendAddress,lenOfPacketToTx); 00579 do{ 00580 tempEspStatus=readEspResponse(); 00581 } 00582 while(tempEspStatus==UNKNOWN); 00583 if(tempEspStatus!=OK)//link broken, don't send more data to this link. 00584 break; 00585 00586 pageToSendAddress+=lenOfPacketToTx; 00587 } 00588 else 00589 break; 00590 } 00591 if(tempEspStatus==OK) 00592 { 00593 sprintf(atCommandArray,"AT+CIPCLOSE=%c\r\n",id); 00594 esp.printf(atCommandArray); 00595 while(readEspResponse()==UNKNOWN); 00596 } 00597 } 00598 00599 void sendMemArrayToEsp(const char*str,unsigned int len) 00600 { 00601 while(len--) 00602 esp.putc(*str++); 00603 } 00604 00605 void extractQueryFieldValue(char* someUrl,char* field, char* value) 00606 { 00607 sscanf(someUrl,"%*[^?]%*c%[^=]%*c%s",field,value); 00608 } 00609 00610 char toggleOutput(char* pinName) 00611 { 00612 if(strcmp(pinName,"dout1")==0) 00613 { 00614 digital_out_1=!digital_out_1; 00615 return !digital_out_1; 00616 } 00617 else if(strcmp(pinName,"dout2")==0) 00618 { 00619 digital_out_2=!digital_out_2; 00620 return !digital_out_2; 00621 } 00622 else if(strcmp(pinName,"dout3")==0) 00623 { 00624 digital_out_3=!digital_out_3; 00625 return !digital_out_3; 00626 } 00627 else if(strcmp(pinName,"dout4")==0) 00628 { 00629 digital_out_4=!digital_out_4; 00630 return !digital_out_4; 00631 } 00632 else return 2;//error 00633 00634 } 00635 00636
Generated on Fri Jul 15 2022 13:18:46 by
1.7.2