Hallo Zusammen
Habe da mal eine Frage
Der Webserver Hello Server hat die folgenden Event Handler siehe code
wie kann man weitere erstellen Ich moechte das senden http://192.168.1.52/?sol0=
Dann kommt es in void handleNotFound()
Moechte einen anderen Event Handler haben
und Ich moechte es im Webserver einlesen
wo kann Ich dann den header einlesen
Ich moechte den Webserver auch parallel im Browser aufrufen
habe gesucht aber nichts gefunden
Ich danke schon mal
Gruss juergen
void handleRoot() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from esp8266!");
digitalWrite(led, 0);
}
void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
noiasca
November 28, 2019, 10:42am
2
unvollständiger Sketch. Keine Diagnose.
Moechte einen anderen Event Handler haben
neuen Event-Handler definieren,
separate Funktion nach Muster handleRoot() machen
die neue Funktion im neuen Event-Handler aufrufen.
Tommy56
November 28, 2019, 10:42am
3
Dann darfst Du nicht alles ins Root hängen. z.B Aufruf
http://192.168.1.52/setVal?sol0=
dann brauchst Du den Event /setVal.
Für die Parameter schaue mal in die .h vom Webserver. Welcher das ist, sieht man in Deinem Fragment nicht.
Gruß Tommy
Hallo noiasca
Ist aus den Beispiel HelloServer
Gruss Juergen
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
const char* ssid = "........";
const char* password = "........";
WebServer server(80);
const int led = 13;
void handleRoot() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from esp8266!");
digitalWrite(led, 0);
}
void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("esp32")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void) {
server.handleClient();
}
Hallo Tommy56
Ist das Beispiel Helloserver hatte Ich in Meine Post geschrieben
habe Ich als Quote in Meiner vorigen Post angehangen
Gruss Juergen
Tommy56
November 28, 2019, 2:01pm
6
Wir haben Dir den Weg doch bereits gezeigt.
Gruß Tommy
agmue
November 29, 2019, 9:49pm
7
juergen01:
wie kann man weitere erstellen Ich moechte das senden http://192.168.1.52/?sol0=
Dann kommt es in void handleNotFound()
Nee, das landet auch in handleRoot, weil "/" root ist.
Anders bei http://192.168.1.52/test?sol0=5
File Not Found
URI: /test
Method: GET
Arguments: 1
sol0: 5
Mit
void handleTest() {
digitalWrite(led, 1);
server.send(200, "text/plain", "hello from esp32 mit test!");
digitalWrite(led, 0);
}
...
server.on("/test", handleTest);
wird dann "hello from esp32 mit test!" angezeigt.
Hallo agmue
Du hast Mir schon den Richtigen Weg gezeigt
Ich Danke auch Dafür
Habe noch eine Frage möchte es vom Client einlesen Klappt auch
mit server.argName() server.arg()
wie muss die anfrage dann aussehen wenn Ich mehrere Argumente
abfragen will hiermit bekomme Ich nur eines
http://192.168.1.52/test?sol0=5
Gruss juergen
Derfips
November 30, 2019, 2:20pm
9
juergen01:
wie muss die anfrage dann aussehen wenn Ich mehrere Argumente
abfragen will hiermit bekomme Ich nur eines
http://192.168.1.52/test?sol0=5
Gruss juergen
Suchmaschienen deiner Wahl: Eingabe: Query-String
Gruß Fips
Tommy56
November 30, 2019, 2:20pm
10
z.B. so:
void handleTest() {
int anzahl = server.args(); // Achtung Eigene + 1 für plain (als letztes)
String param;
Serial.print("Anzahl Arg: ");
Serial.println(anzahl);
for(int i=0; i<anzahl;i++) {
param = server.argName(i);
Serial.print(param);
Serial.print(" = ");
if (server.hasArg(param)) {
Serial.println(server.arg(param));
}
else {
Serial.print(i);
Serial.println(" fehlt");
}
}
server.send(200,"text/plain","OK");
}
Gruß Tommy
Hallo Zusammen
Ich Danke allen
Ich habe mir den Query-String angesehen jetzt klappt es
Guss juergen