· 6 months ago · Apr 07, 2025, 05:15 PM
1 // ======================================================
2// Webserver program that sends button information
3// to ESP8266 and puts a control led on the page
4// ======================================================
5
6#include <ESP8266WiFi.h>
7#include <ESP8266WebServer.h>
8
9ESP8266WebServer server(80);
10
11// Your routers credentials
12const char* ssid = "Mi PhoneR";
13const char* password = "12345678";
14
15// ==========================================
16// initial variables
17// ==========================================
18
19String buttonON;
20String buttonOFF;
21
22int sumDelay = 0;
23
24#define pinForward D6
25#define pinBackward D7
26
27#define maxDelay 10000
28#define step 1000
29
30void calibrate();
31
32
33// =========================================
34// Here is the HTML page
35// =========================================
36String getPage()
37 {
38 String page = "<!DOCTYPE HTML>";
39 page += "<html>";
40 page += "<head>";
41 page += "<meta name = \"viewport\" content = \"width = device-width, initial-scale = 1.0 maximum-scale = 2.5, user-scalable=1\">";
42 page += "<title>Luc's button demo</title>";
43 page += "<body style='background-color:powderblue;'>";
44 page += "</head>";
45 page += "<body>";
46
47 page += "<h1 style='color:red'>Luc's web-button for ESP8266</h1>";
48 page += "<br>";
49 page += "<br>";
50
51 page += "<FORM action=\"/\" method=\"post\">";
52 page += "<button type=\"submit\" name=\"button1ON\" id=\"button1ON\" value=\"but1ON\">Open</button>";
53 page += "</form>";
54
55 page += "<FORM action=\"/\" method=\"post\">";
56 page += "<button type=\"submit\" name=\"button1OFF\" id=\"button1OFF\" value=\"but1OFF\">Close</button>";
57 page += "</form>";
58
59 page += "<FORM action=\"/\" method=\"post\">";
60 page += "<button type=\"submit\" name=\"button3\" id=\"button3\" value=\"but3\">Open full</button>";
61 page += "</form>";
62
63 page += "<FORM action=\"/\" method=\"post\">";
64 page += "<button type=\"submit\" name=\"button4\" id=\"button4\" value=\"but4\">Close full</button>";
65 page += "</form>";
66
67 page += "<br>";
68 page += "<br>";
69
70 return page;
71 }
72
73
74// ==================================================
75// Handle for page not found
76// ==================================================
77void handleNotFound()
78{
79 server.send(200, "text/html", getPage());
80}
81
82
83// ==================================================
84// Handle submit form
85// ==================================================
86void handleSubmit()
87{
88 //Text to show
89
90 if (server.hasArg("button1ON"))
91 {
92 buttonON = server.arg("button1ON");
93 digitalWrite(pinForward, HIGH);
94 int wait = sumDelay <= (maxDelay - step) ? step : (maxDelay - sumDelay);
95 delay(wait);
96 sumDelay += wait;
97 digitalWrite(pinForward, LOW);
98 }
99
100 if (server.hasArg("button1OFF"))
101 {
102 buttonOFF = server.arg("button1OFF");
103 digitalWrite(pinBackward, HIGH);
104 int wait = sumDelay > step ? step : sumDelay;
105 delay(wait);
106 sumDelay -= wait;
107 digitalWrite(pinBackward, LOW);
108 }
109
110 if (server.hasArg("button4"))
111 {
112 buttonOFF = server.arg("button4");
113 calibrate();
114 sumDelay = 0;
115 }
116
117 if (server.hasArg("button3"))
118 {
119 buttonOFF = server.arg("button3");
120 digitalWrite(pinBackward, HIGH);
121 int wait = maxDelay - sumDelay;
122 delay(wait);
123 sumDelay -= wait;
124 digitalWrite(pinBackward, LOW);
125 }
126
127 server.send(200, "text/html", getPage()); //Response to the HTTP request
128
129}
130
131
132// ===================================================
133// Handle root
134// ===================================================
135void handleRoot()
136{
137 if (server.args() )
138 {
139 handleSubmit();
140 }
141 else
142 {
143 server.send(200, "text/html", getPage());
144 }
145}
146
147void calibrate() {
148 while(digitalRead(D3)) {
149 digitalWrite(pinForward, HIGH);
150 delay(10);
151 }
152 digitalWrite(pinForward, LOW);
153}
154
155
156// ===================================================
157// Setup
158// ===================================================
159void setup()
160{
161 pinMode(D6, OUTPUT);
162 pinMode(D7, OUTPUT);
163 digitalWrite(D6, LOW);
164 digitalWrite(D7, LOW);
165
166 delay(1000);
167 Serial.begin(9600);
168
169 pinMode(D3, INPUT_PULLUP);
170
171 calibrate();
172
173 // Connect to Wi-Fi network with SSID and password
174 Serial.print("Connecting to ");
175 Serial.println(ssid);
176 Serial.print(WiFi.begin(ssid,password));
177 while (WiFi.status() != WL_CONNECTED)
178 {
179 delay(500);
180 Serial.print(".");
181 Serial.print(WiFi.status());
182 }
183 // Print local IP address and start web server
184 Serial.println("");
185 Serial.println("WiFi connected.");
186 Serial.println("IP address: ");
187 Serial.println(WiFi.localIP());
188 server.begin();
189 server.on("/", handleRoot);
190 server.onNotFound(handleNotFound);
191
192 server.begin();
193 delay(500);
194}
195
196
197// ===================================================
198// Loop
199// ===================================================
200void loop()
201{
202 server.handleClient();
203 delay(50);
204}
205