first commit
This commit is contained in:
160
ESP8266_DISTANCE_WEB/ESP8266_DISTANCE_WEB.ino
Executable file
160
ESP8266_DISTANCE_WEB/ESP8266_DISTANCE_WEB.ino
Executable file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* Distance measurement with HC-SR04 ultrasonic sensor and Wemos D1 Mini, based a web server and Javasricpt
|
||||
* by author Irwan
|
||||
* published on www.likecircuit.com
|
||||
* version 2.0
|
||||
*/
|
||||
/*===================================================================================*/
|
||||
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
|
||||
ESP8266WebServer server(80);
|
||||
const char* ssid="Livebox-37cc";
|
||||
const char* password= "8A6060920A8A86896F770F2C47";
|
||||
String webSite,javaScript,XML;
|
||||
|
||||
// defines pins numbers trigger and echo
|
||||
const int trigPin = D2;
|
||||
const int echoPin = D3;
|
||||
|
||||
// defines variables
|
||||
long duration;
|
||||
float distance;
|
||||
float Mdistance;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
|
||||
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
|
||||
WiFi.begin(ssid,password);
|
||||
while(WiFi.status()!=WL_CONNECTED)delay(500);
|
||||
WiFi.mode(WIFI_STA);
|
||||
Serial.println("\n\nBOOTING ESP8266 ...");
|
||||
Serial.print("Connected to ");
|
||||
Serial.println(ssid);
|
||||
Serial.print("Station IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
server.on("/",handleWebsite);
|
||||
server.on("/xml",handleXML);
|
||||
server.begin();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
distanceData();
|
||||
delay(100);
|
||||
server.handleClient();
|
||||
}
|
||||
|
||||
void distanceData(){
|
||||
digitalWrite(trigPin, LOW);
|
||||
delayMicroseconds(2);
|
||||
|
||||
// Sets the trigPin on HIGH state for 10 micro seconds
|
||||
digitalWrite(trigPin, HIGH);
|
||||
delayMicroseconds(10);
|
||||
digitalWrite(trigPin, LOW);
|
||||
|
||||
// Reads the echoPin, returns the sound wave travel time in microseconds
|
||||
duration = pulseIn(echoPin, HIGH);
|
||||
|
||||
// Calculating the distance
|
||||
distance= (duration*0.034)/2;
|
||||
}
|
||||
|
||||
void buildWebsite(){
|
||||
buildJavascript();
|
||||
webSite="<!DOCTYPE HTML>\n";
|
||||
webSite+=javaScript;
|
||||
webSite+="<BODY onload='process()'>\n";
|
||||
webSite+="<table style='width:70%'>\n";
|
||||
webSite+="<tr>\n";
|
||||
webSite+=" <th><h2>IOT Web Server Real-Time Measure Distance Sensor HC-SR04 and Wemos D1 Mini With Java Script</h2></th>\n";
|
||||
webSite+="</tr>\n";
|
||||
webSite+="<tr>\n";
|
||||
webSite+=" <td><center><h3>Distance Sensor = <A id='DistanceSensor'></A> Cm</h3></center></td>\n";
|
||||
webSite+="</tr>\n";
|
||||
webSite+="<tr>\n";
|
||||
webSite+=" <td>Routine : <A id='routineTime'></A></td>\n";
|
||||
webSite+="</tr>\n";
|
||||
webSite+="</table>\n";
|
||||
webSite+="</BODY>\n";
|
||||
webSite+="</HTML>\n";
|
||||
}
|
||||
|
||||
void buildJavascript(){
|
||||
javaScript="<SCRIPT>\n";
|
||||
javaScript+="var xmlHttp=createXmlHttpObject();\n";
|
||||
|
||||
javaScript+="function createXmlHttpObject(){\n";
|
||||
javaScript+=" if(window.XMLHttpRequest){\n";
|
||||
javaScript+=" xmlHttp=new XMLHttpRequest();\n";
|
||||
javaScript+=" }else{\n";
|
||||
javaScript+=" xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');\n";
|
||||
javaScript+=" }\n";
|
||||
javaScript+=" return xmlHttp;\n";
|
||||
javaScript+="}\n";
|
||||
|
||||
javaScript+="function process(){\n";
|
||||
javaScript+=" if(xmlHttp.readyState==0 || xmlHttp.readyState==4){\n";
|
||||
javaScript+=" xmlHttp.open('PUT','xml',true);\n";
|
||||
javaScript+=" xmlHttp.onreadystatechange=handleServerResponse;\n"; // no brackets?????
|
||||
javaScript+=" xmlHttp.send(null);\n";
|
||||
javaScript+=" }\n";
|
||||
javaScript+=" setTimeout('process()',500);\n";
|
||||
javaScript+="}\n";
|
||||
|
||||
javaScript+="function handleServerResponse(){\n";
|
||||
javaScript+=" if(xmlHttp.readyState==4 && xmlHttp.status==200){\n";
|
||||
javaScript+=" xmlResponse=xmlHttp.responseXML;\n";
|
||||
|
||||
javaScript+=" xmldoc = xmlResponse.getElementsByTagName('response');\n";
|
||||
javaScript+=" message = xmldoc[0].firstChild.nodeValue;\n";
|
||||
javaScript+=" document.getElementById('routineTime').innerHTML=message;\n";
|
||||
|
||||
javaScript+=" xmldoc = xmlResponse.getElementsByTagName('responseDistanceSensor');\n";
|
||||
javaScript+=" message = xmldoc[0].firstChild.nodeValue;\n";
|
||||
javaScript+=" document.getElementById('DistanceSensor').innerHTML=message;\n";
|
||||
|
||||
javaScript+=" }\n";
|
||||
javaScript+="}\n";
|
||||
javaScript+="</SCRIPT>\n";
|
||||
}
|
||||
|
||||
void buildXML(){
|
||||
XML="<?xml version='1.0'?>";
|
||||
XML+="<Donnees>";
|
||||
XML+="<response>";
|
||||
XML+=millis2time();
|
||||
XML+="</response>";
|
||||
XML+="<responseDistanceSensor>";
|
||||
XML+=distance;
|
||||
XML+="</responseDistanceSensor>";
|
||||
XML+="</Donnees>";
|
||||
}
|
||||
String millis2time(){
|
||||
String Time="";
|
||||
unsigned long ss;
|
||||
byte mm,hh;
|
||||
ss=millis()/1000;
|
||||
hh=ss/3600;
|
||||
mm=(ss-hh*3600)/60;
|
||||
ss=(ss-hh*3600)-mm*60;
|
||||
if(hh<10)Time+="0";
|
||||
Time+=(String)hh+":";
|
||||
if(mm<10)Time+="0";
|
||||
Time+=(String)mm+":";
|
||||
if(ss<10)Time+="0";
|
||||
Time+=(String)ss;
|
||||
return Time;
|
||||
}
|
||||
|
||||
void handleWebsite(){
|
||||
buildWebsite();
|
||||
server.send(200,"text/html",webSite);
|
||||
}
|
||||
|
||||
void handleXML(){
|
||||
buildXML();
|
||||
server.send(200,"text/xml",XML);
|
||||
}
|
||||
Reference in New Issue
Block a user