Hallo zusammen.
Leider habe ich ein Verständnisproblem beim Senden einer Seite eines Webservers. Es werden über Tastendrücke ein Wert nach oben oder unten geändert.
Der stark gekürzte Sketch welcher funktioniert ist hier:
#include <WiFi.h>
#include <WebServer.h>
// Generator variables
bool newval = 0;
float val1 = 10.0;
uint8_t maxval1 = 100;
// Network credentials
const char* ssid = "esptest"; // Enter SSID here
const char* password = "esptest"; // Enter Password here
/* Put IP Address details */
IPAddress local_ip(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
// Set web server port number to 80
WebServer server(80);
void setup() {
Serial.begin(115200);
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_OnConnect);
server.on("/val1sub", handle_val1sub);
server.on("/val1add", handle_val1add);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
if (newval == 1) {
Serial.println("newval");
newval = 0;
}
server.handleClient();
}
void handle_OnConnect() {
server.send(200, "text/html", SendHTML());
}
void handle_val1sub() {
if (val1 > 1.0) {
val1--;
newval = 1;
}
server.send(200, "text/html", SendHTML());
}
void handle_val1add() {
if (val1 < maxval1) {
val1++;
newval = 1;
}
server.send(200, "text/html", SendHTML());
}
void handle_NotFound() {
server.send(404, "text/plain", "Page not found.");
}
String SendHTML() {
String ptr = "<!DOCTYPE html> <html>\n";
ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr += "<title>esptest</title>\n";
ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr += "body{margin-top: 10px;} h1 {color: #000000;margin: 10px auto 10px;} p {font-size: 14px;color: #000000;margin-bottom: 10px;}\n";
ptr += ".button1 {display: block;width: 40px;background-color: #2e9afe;border: none;color: white;padding: 10px 10px; text-align: center; text-decoration: none;display: inline-block;font-size: 20px;margin: 0px auto;vertical-align: middle;cursor: pointer;border-radius: 4px;}\n";
ptr += ".button2 {display: block;width: 40px; height: 40px;background-color: #2e9afe;border: none;color: white;padding: 30px 30px; text-align: center; text-decoration: none;display: inline-block;font-size: 30px;margin: 0px auto;vertical-align: middle;cursor: pointer;border-radius: 4px;}\n";
ptr += ".button1:active {background-color: #40ff00;}\n"; // Button1 color if pressed
ptr += ".button2:active {background-color: #40ff00;}\n"; // Button2 color if pressed
ptr += "</style>\n";
ptr += "</head>\n";
ptr += "<body>\n";
ptr += "<p><h1>esptest</h1></p><br>\n";
ptr += "<b><p>val1 = " + String(val1, 0) + "</p></b>\n";
ptr += "<a class=\"button1\" href=\"/val1sub\">-</a>\n";
ptr += "<a class=\"button1\" href=\"/val1add\">+</a>\n";
ptr += "<br><br>\n";
ptr += "</body>\n";
ptr += "</html>\n";
return ptr;
}
Nun würde ich aber gerne das Senden der Seite in die Loop verfrachten. Daher wird bei einem Tastendruck festgestellt dass sich der Wert geändert hat (newval = 1;
) und server.send(200, "text/html", SendHTML());
ausgeführt. Danach newval = 0;
.
Leider scheint das nicht zu funktionieren obwohl ich nicht ganz verstehe was der Unterschied in der Abfolge zum vorherigen Sketch sein soll. Der Fehler lautet "ERR_EMPTY_RESPONSE":
#include <WiFi.h>
#include <WebServer.h>
// Generator variables
bool newval = 0;
float val1 = 10.0;
uint8_t maxval1 = 100;
// Network credentials
const char* ssid = "esptest"; // Enter SSID here
const char* password = "esptest"; // Enter Password here
/* Put IP Address details */
IPAddress local_ip(192, 168, 0, 1);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
// Set web server port number to 80
WebServer server(80);
void setup() {
Serial.begin(115200);
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_OnConnect);
server.on("/val1sub", handle_val1sub);
server.on("/val1add", handle_val1add);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
if (newval == 1) {
Serial.println("newval");
server.send(200, "text/html", SendHTML());
newval = 0;
}
server.handleClient();
}
void handle_OnConnect() {
server.send(200, "text/html", SendHTML());
}
void handle_val1sub() {
if (val1 > 1.0) {
val1--;
newval = 1;
}
}
void handle_val1add() {
if (val1 < maxval1) {
val1++;
newval = 1;
}
}
void handle_NotFound() {
server.send(404, "text/plain", "Page not found.");
}
String SendHTML() {
String ptr = "<!DOCTYPE html> <html>\n";
ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr += "<title>esptest</title>\n";
ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr += "body{margin-top: 10px;} h1 {color: #000000;margin: 10px auto 10px;} p {font-size: 14px;color: #000000;margin-bottom: 10px;}\n";
ptr += ".button1 {display: block;width: 40px;background-color: #2e9afe;border: none;color: white;padding: 10px 10px; text-align: center; text-decoration: none;display: inline-block;font-size: 20px;margin: 0px auto;vertical-align: middle;cursor: pointer;border-radius: 4px;}\n";
ptr += ".button2 {display: block;width: 40px; height: 40px;background-color: #2e9afe;border: none;color: white;padding: 30px 30px; text-align: center; text-decoration: none;display: inline-block;font-size: 30px;margin: 0px auto;vertical-align: middle;cursor: pointer;border-radius: 4px;}\n";
ptr += ".button1:active {background-color: #40ff00;}\n"; // Button1 color if pressed
ptr += ".button2:active {background-color: #40ff00;}\n"; // Button2 color if pressed
ptr += "</style>\n";
ptr += "</head>\n";
ptr += "<body>\n";
ptr += "<p><h1>esptest</h1></p><br>\n";
ptr += "<b><p>val1 = " + String(val1, 0) + "</p></b>\n";
ptr += "<a class=\"button1\" href=\"/val1sub\">-</a>\n";
ptr += "<a class=\"button1\" href=\"/val1add\">+</a>\n";
ptr += "<br><br>\n";
ptr += "</body>\n";
ptr += "</html>\n";
return ptr;
}
Wahrscheinlich ist die Erklärung relativ simpel