Files
Arduino/ESP8266_DISTANCE_WEB/ESP8266_DISTANCE_WEB.ino
Jérôme Delacotte 7b30d6e298 first commit
2025-03-06 11:15:32 +01:00

161 lines
4.5 KiB
C++
Executable File

/*
* 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);
}