ESP32 Webserver Event Hantler

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

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.

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

Wir haben Dir den Weg doch bereits gezeigt.

Gruß Tommy

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

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

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