Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
ECE 445 UI repo
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
aliceg3
ECE 445 UI repo
Commits
a880285f
Commit
a880285f
authored
2 years ago
by
aliceg3
Browse files
Options
Downloads
Patches
Plain Diff
push code
parent
03e8d87e
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
arduino_code/test_asyncbuttons.ino
+119
-0
119 additions, 0 deletions
arduino_code/test_asyncbuttons.ino
arduino_code/test_webpage_sensors.ino
+143
-72
143 additions, 72 deletions
arduino_code/test_webpage_sensors.ino
with
262 additions
and
72 deletions
arduino_code/test_asyncbuttons.ino
0 → 100644
+
119
−
0
View file @
a880285f
// Importing necessary libraries
#include
<WiFi.h>
#include
<AsyncTCP.h>
#include
<ESPAsyncWebServer.h>
// Setting network credentials
const
char
*
ssid
=
"Connectify-ESP32 Boot"
;
const
char
*
password
=
"temp_pass1234"
;
const
char
*
input_parameter1
=
"output"
;
const
char
*
input_parameter2
=
"state"
;
// Creating a AsyncWebServer object
AsyncWebServer
server
(
80
);
const
char
index_html
[]
PROGMEM
=
R"rawliteral(
<!DOCTYPE HTML><html>
<head>
<title>ESP32 WEB SERVER</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>
html {font-family: Arial; display: inline-block; text-align: center;}
p {font-size: 3.0rem;}
body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
.switch {position: relative; display: inline-block; width: 120px; height: 68px}
.switch input {display: none}
.slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 6px}
.slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 3px}
input:checked+.slider {background-color: #b30000}
input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
</style>
</head>
<body>
<h2>ESP32 WEB SERVER</h2>
%BUTTONPLACEHOLDER%
<script>function toggleCheckbox(element) {
var xhr = new XMLHttpRequest();
if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); }
else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); }
xhr.send();
}
</script>
</body>
</html>
)rawliteral"
;
// Replaces placeholder with button section in your web page
String
processor
(
const
String
&
var
){
//Serial.println(var);
if
(
var
==
"BUTTONPLACEHOLDER"
){
String
buttons
=
""
;
buttons
+=
"<h4>Output - GPIO 2</h4><label class=
\"
switch
\"
><input type=
\"
checkbox
\"
onchange=
\"
toggleCheckbox(this)
\"
id=
\"
2
\"
"
+
outputState
(
2
)
+
"><span class=
\"
slider
\"
></span></label>"
;
return
buttons
;
}
return
String
();
}
String
outputState
(
int
output
){
if
(
digitalRead
(
output
)){
return
"checked"
;
}
else
{
return
""
;
}
}
void
setup
(){
// Serial port for debugging purposes
Serial
.
begin
(
115200
);
pinMode
(
2
,
OUTPUT
);
digitalWrite
(
2
,
LOW
);
// Connect to Wi-Fi
WiFi
.
begin
(
ssid
,
password
);
while
(
WiFi
.
status
()
!=
WL_CONNECTED
)
{
delay
(
1000
);
Serial
.
println
(
"Connecting to WiFi"
);
}
// Print ESP Local IP Address
Serial
.
println
(
WiFi
.
localIP
());
// Route for root / web page
server
.
on
(
"/"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/html"
,
index_html
,
processor
);
});
// Send a GET request to <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
server
.
on
(
"/update"
,
HTTP_GET
,
[]
(
AsyncWebServerRequest
*
request
)
{
String
inputMessage1
;
String
inputMessage2
;
// GET input1 value on <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
if
(
request
->
hasParam
(
input_parameter1
)
&&
request
->
hasParam
(
input_parameter2
))
{
inputMessage1
=
request
->
getParam
(
input_parameter1
)
->
value
();
inputMessage2
=
request
->
getParam
(
input_parameter2
)
->
value
();
digitalWrite
(
inputMessage1
.
toInt
(),
inputMessage2
.
toInt
());
}
else
{
inputMessage1
=
"No message sent"
;
inputMessage2
=
"No message sent"
;
}
Serial
.
print
(
"GPIO: "
);
Serial
.
print
(
inputMessage1
);
Serial
.
print
(
" - Set to: "
);
Serial
.
println
(
inputMessage2
);
request
->
send
(
200
,
"text/plain"
,
"OK"
);
});
// Start server
server
.
begin
();
}
void
loop
()
{
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
arduino_code/test_webpage_sensors.ino
+
143
−
72
View file @
a880285f
...
...
@@ -8,25 +8,34 @@
#include
<WiFi.h>
#include
<ESPAsyncWebServer.h>
#include
<AsyncTCP.h>
#include
<Stepper.h>
// Replace with your network credentials
const
char
*
ssid
=
"Connectify-ESP32 Boot"
;
const
char
*
password
=
"temp_pass1234"
;
const
char
*
input_parameter1
=
"output"
;
const
char
*
input_parameter2
=
"state"
;
#define PRESSUREPIN1 34
#define PRESSUREPIN2 35
#define motorIN1
#define motorIN2
#define motorIN3
#define motorIN4
#define motorIN1 33
#define motorIN2 32
#define motorIN3 26
#define motorIN4 27
#define PRESSURE1GOAL 1000
#define PRESSURE2GOAL 2034
#define PRESSUREGOAL1 357
#define PRESSUREGOAL2 2034
Stepper
motor
(
200
,
motorIN1
,
motorIN2
,
motorIN3
,
motorIN4
);
// current temperature & humidity, updated in loop()
int
pressure1
=
0.0
;
int
pressure2
=
0.0
;
float
motorSpeed
=
0.0
;
float
motor1Speed
=
0.0
;
String
pressure1status
=
"NOT YET..."
;
String
pressure2status
=
"NOT YET..."
;
String
motor1status
=
"Not running"
;
// Create AsyncWebServer object on port 80
AsyncWebServer
server
(
80
);
...
...
@@ -53,33 +62,59 @@ const char index_html[] PROGMEM = R"rawliteral(
h2 { font-size: 3.0rem; }
p { font-size: 3.0rem; }
.units { font-size: 1.2rem; }
.
dht-
label
s
{
.
sensor
label{
font-size: 1.5rem;
vertical-align:
middle
;
vertical-align:
center
;
padding-bottom: 15px;
}
.statuslabel { font-size: 1.3rem; }
button2 {background-color: #555555;}
body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
.switch {position: relative; display: inline-block; width: 120px; height: 68px}
.switch input {display: none}
.slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 6px}
.slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 3px}
input:checked+.slider {background-color: #b30000}
input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
</style>
</head>
<body>
<h2>Remotely Adjustable Boot</h2>
<p>
<i class="fas fa-thermometer-half" style="color:#059e8a;"></i>
<span class="dht-labels">Pressure LEFT</span>
<i class="fas fa-thermometer-half" style="color:#4a32a8;"></i>
<span class="sensorlabel">Pressure LEFT</span>
<br>
<span id="pressure1">%PRESSURE1%</span>
<sup class="units">mmHg</sup>
</p>
<p>
<i class="fas fa-thermometer-half" style="color:#059e8a;"></i>
<span class="dht-labels">Pressure RIGHT</span>
<span class="sensorlabel">Status:</span>
<span id="pressure1status" class="statuslabel">%PRESSURE1STATUS%</span>
</p>
<p>
<i class="fas fa-thermometer-half" style="color:#4a32a8;"></i>
<span class="sensorlabel">Pressure RIGHT</span>
<span id="pressure2">%PRESSURE2%</span>
<sup class="units">mmHg</sup>
</p>
<p>
<i class="fas fa-tint" style="color:#00add6;"></i>
<span class="dht-labels">Motor Speed</span>
<span id="motorspeed">%MOTORSPEED%</span>
<sup class="units">%</sup>
<span class="sensorlabel">Status:</span>
<span id="pressure2status" class="statuslabel">%PRESSURE2STATUS%</span>
</p>
<p>
<i class="fas fa-wrench" style="color:#4a32a8;"></i>
<span class="sensorlabel">Motor Status</span>
<span id="motor1status">%MOTOR1STATUS%</span>
<sup class="units">torque</sup>
</p>
%BUTTONPLACEHOLDER%
<script>function toggleCheckbox(element) {
var xhr = new XMLHttpRequest();
if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); }
else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); }
xhr.send();
}
</script>
</body>
<script>
setInterval(function ( ) {
...
...
@@ -93,6 +128,17 @@ setInterval(function ( ) {
xhttp.send();
}, 0.1 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("pressure1status").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/pressure1status", true);
xhttp.send();
}, 0.1 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
...
...
@@ -104,31 +150,62 @@ setInterval(function ( ) {
xhttp.send();
}, 0.1 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("pressure2status").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/pressure2status", true);
xhttp.send();
}, 0.1 ) ;
setInterval(function ( ) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("motor
speed
").innerHTML = this.responseText;
document.getElementById("motor
1status
").innerHTML = this.responseText;
}
};
xhttp.open("GET", "/motor
speed
", true);
xhttp.open("GET", "/motor
1status
", true);
xhttp.send();
}, 0.1 ) ;
</script>
</html>)rawliteral"
;
String
outputState
(
int
output
){
if
(
digitalRead
(
output
)){
return
"checked"
;
}
else
{
return
""
;
}
}
// Replaces placeholder with DHT values
String
processor
(
const
String
&
var
){
//Serial.println(var);
if
(
var
==
"PRESSURE1"
){
return
String
(
pressure1
);
}
else
if
(
var
==
"PRESSURE1STATUS"
){
return
String
(
pressure1status
);
}
else
if
(
var
==
"PRESSURE2"
){
return
String
(
pressure2
);
}
else
if
(
var
==
"MOTORSPEED"
){
return
String
(
motorSpeed
);
else
if
(
var
==
"PRESSURE2STATUS"
){
return
String
(
pressure2status
);
}
else
if
(
var
==
"MOTOR1STATUS"
){
return
String
(
motor1status
);
}
else
if
(
var
==
"BUTTONPLACEHOLDER"
){
String
buttons
=
""
;
buttons
+=
"<h4>Output - GPIO 2</h4><label class=
\"
switch
\"
><input type=
\"
checkbox
\"
onchange=
\"
toggleCheckbox(this)
\"
id=
\"
2
\"
"
+
outputState
(
2
)
+
"><span class=
\"
slider
\"
></span></label>"
;
return
buttons
;
}
return
String
();
}
...
...
@@ -155,18 +232,46 @@ void setup(){
server
.
on
(
"/pressure1"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/plain"
,
String
(
pressure1
).
c_str
());
});
server
.
on
(
"/pressure1status"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/plain"
,
String
(
pressure1status
).
c_str
());
});
server
.
on
(
"/pressure2"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/plain"
,
String
(
pressure2
).
c_str
());
});
server
.
on
(
"/motorspeed"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/plain"
,
String
(
motorSpeed
).
c_str
());
server
.
on
(
"/pressure2status"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/plain"
,
String
(
pressure2status
).
c_str
());
});
server
.
on
(
"/motor1status"
,
HTTP_GET
,
[](
AsyncWebServerRequest
*
request
){
request
->
send_P
(
200
,
"text/plain"
,
String
(
motor1status
).
c_str
());
});
server
.
on
(
"/update"
,
HTTP_GET
,
[]
(
AsyncWebServerRequest
*
request
)
{
String
inputMessage1
;
String
inputMessage2
;
// GET input1 value on <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
if
(
request
->
hasParam
(
input_parameter1
)
&&
request
->
hasParam
(
input_parameter2
))
{
inputMessage1
=
request
->
getParam
(
input_parameter1
)
->
value
();
inputMessage2
=
request
->
getParam
(
input_parameter2
)
->
value
();
digitalWrite
(
inputMessage1
.
toInt
(),
inputMessage2
.
toInt
());
}
else
{
inputMessage1
=
"No message sent"
;
inputMessage2
=
"No message sent"
;
}
Serial
.
print
(
"GPIO: "
);
Serial
.
print
(
inputMessage1
);
Serial
.
print
(
" - Set to: "
);
Serial
.
println
(
inputMessage2
);
request
->
send
(
200
,
"text/plain"
,
"OK"
);
});
// Start server
server
.
begin
();
pinMode
(
2
,
OUTPUT
);
digitalWrite
(
2
,
LOW
);
}
void
loop
(){
void
loop
(){
unsigned
long
currentMillis
=
millis
();
if
(
currentMillis
-
previousMillis
>=
interval
)
{
...
...
@@ -187,45 +292,10 @@ void loop(){
intervals2
[
aModulus2
]
+=
1
;
intervalValues2
[
aModulus2
]
+=
int
(
a2
%
600
);
Serial
.
println
(
"Reading #"
+
String
(
counter
)
+
": "
+
String
(
a1
)
+
", "
+
String
(
aModulus1
));
Serial
.
println
(
"Reading #"
+
String
(
counter
)
+
": "
+
String
(
a2
)
+
", "
+
String
(
aModulus2
));
delay
(
10
);
}
Serial
.
println
(
"Intervals array #1: ["
);
for
(
int
counter
=
0
;
counter
<
7
;
counter
++
)
{
Serial
.
print
(
intervals1
[
counter
]);
Serial
.
print
(
","
);
}
Serial
.
print
(
"]"
);
Serial
.
println
(
"Interval Values array #1: "
);
for
(
int
counter
=
0
;
counter
<
7
;
counter
++
)
{
Serial
.
print
(
intervalValues1
[
counter
]);
Serial
.
print
(
","
);
}
Serial
.
print
(
"]"
);
Serial
.
println
(
"**********"
);
Serial
.
println
(
"Intervals array #2: ["
);
for
(
int
counter
=
0
;
counter
<
7
;
counter
++
)
{
Serial
.
print
(
intervals2
[
counter
]);
Serial
.
print
(
","
);
}
Serial
.
print
(
"]"
);
Serial
.
println
(
"Interval Values array #2: "
);
for
(
int
counter
=
0
;
counter
<
7
;
counter
++
)
{
Serial
.
print
(
intervalValues2
[
counter
]);
Serial
.
print
(
","
);
}
Serial
.
print
(
"]"
);
Serial
.
println
(
"**********"
);
int
maxIntervalSize1
=
intervals1
[
0
];
int
maxIntervalIndex1
=
0
;
for
(
int
index
=
1
;
index
<
7
;
index
++
)
{
...
...
@@ -234,7 +304,6 @@ void loop(){
maxIntervalSize1
=
intervals1
[
index
];
}
}
Serial
.
println
(
"maxIntervalIndex #1: "
+
maxIntervalIndex1
);
int
maxIntervalSize2
=
intervals2
[
0
];
int
maxIntervalIndex2
=
0
;
for
(
int
index
=
1
;
index
<
7
;
index
++
)
{
...
...
@@ -243,20 +312,22 @@ void loop(){
maxIntervalSize2
=
intervals2
[
index
];
}
}
Serial
.
println
(
"maxIntervalIndex #2: "
+
maxIntervalIndex2
);
pressure1
=
(
intervalValues1
[
maxIntervalIndex1
]
/
maxIntervalSize1
)
+
maxIntervalIndex1
*
600
;
pressure2
=
(
intervalValues2
[
maxIntervalIndex2
]
/
maxIntervalSize2
)
+
maxIntervalIndex2
*
600
;
Serial
.
println
(
"adcValue #1: "
+
pressure1
);
Serial
.
println
(
"adcValue #2: "
+
pressure2
);
Serial
.
println
(
"******************************"
);
float
newMotorSpeed
=
0
;
if
(
isnan
(
newMotorSpeed
))
{
Serial
.
println
(
"Failed to read from DHT sensor!"
);
if
(((
float
)
abs
(
pressure1
-
PRESSURE1GOAL
)
/
(
float
)
PRESSURE1GOAL
)
<=
0.15
){
pressure1status
=
"LEFT GOAL REACHED"
;
}
else
{
motorSpeed
=
newMotorSpeed
;
Serial
.
println
(
motorSpeed
);
pressure1status
=
"not yet..."
;
}
if
(((
float
)
abs
(
pressure2
-
PRESSURE2GOAL
)
/
(
float
)
PRESSURE2GOAL
)
<=
0.15
){
pressure2status
=
"RIGHT GOAL REACHED"
;
}
else
{
pressure2status
=
"not yet..."
;
}
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment