Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten

Hallo,
ich möchte eine Eingabe (Input Webseite) an den ESP32 übergeben und verarbeiten.
Mein HTML-Code sendet folgenden Wert: " tled?1 bis tled?30"

Empfangen kann ich das mit:

server.on("/tled", []() {

Auswertung ?

 });

Wie kann ich daraus den Wert 1 bis 30 erhalten ?
Oder wie kann ich die Eingabe auf den ESP32 übertragen und auswerten ? :slight_smile: >:(

MfG

Juergen B.

Schau Dir mal die Grundlagen von HTML / HTTP an. Dann wirst Du merken, dass Deine Parameterübergabe so nicht funktionieren wird.

Ansonsten schau mal beim Webserver nach args() und hasArg(...).

Gruß Tommy

In einem anderen Thema abgeschaut:

byte z1 = 0, z2 = 0; // Hier sollen die Zahlenwerte landen
char input[] = "tled?1 bis tled?30";
 
void setup() { 
  Serial.begin(9600);
  Serial.println("Start");
  sscanf(input, "tled?%hhu bis tled?%hhu", &z1, &z2);
  Serial.print(z1); Serial.print(" ");
  Serial.print(z2); Serial.println();
}

void loop() {
}

jbaben:
Hallo,
ich möchte eine Eingabe (Input Webseite) an den ESP32 übergeben und verarbeiten.
Mein HTML-Code sendet folgenden Wert: " tled?1 bis tled?30"

Empfangen kann ich das mit:

server.on("/tled", []() {

Auswertung ?

});




Wie kann ich daraus den Wert 1 bis 30 erhalten ?
Oder wie kann ich die Eingabe auf den ESP32 übertragen und auswerten ? :) >:( 

MfG

Juergen B.

Hallo Jürgen,
meine Webseite kennst du ja schon. Vieleicht solltest du dir den Sketch zum Board Led schalten nochmal genau anschauen.

Oder schau dir die Beispiele zum Esp32 Webserver an.

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

Damit kannst du sehen was beim Server ankommt!

Gruß Fips

Hallo,
Danke für Eure Antworten.
Es funktioniert nun.
Hier mein Programm-Code:
HTML

<head>
<script type="text/javascript">
// Funktion Wert (Geyser-Time) an ESP32 senden
         function once4(arg) {
             console.log("arg: " + arg);
            var swot = document.querySelector("#time").value;
           fetch('tled' + arg + swot).then(function (response) {
             return response.text();
           }).then(function (text_4) {
             //elem4.innerHTML = 'Time ' + text_4;
            
	   console.log("Text4: " + text_4);
	   console.log("Time: " + swot);
          
           });
         }
         
         var elem4 = document.querySelector('#led4');
         var swot = document.querySelector("#time").value; 
         elem4.addEventListener('click', function () {
           once4('?time=');
         });
         once4('');

      </script>
</head>
<body
<p>Enter Geyser Switch On Time: 
<input type="number"  id="time" name="v" min="1" max="30" value="15" 
maxlength="2" size="2" required> <em>(1-30 min)</em>

</p>
<p

<button type="submit" class="button_on" id="led4" >START</button></p>
</body>

ESP32

// Test GEYSER Time
server.on("/tled", []() {
     int n = server.args();
     Serial.print("args_tled ");
     Serial.println(n);
    if (server.hasArg("time")) {
      String swot = server.argName(n);
      for (uint8_t i = 0; i < server.args(); i++) {
         //swot += " " + server.argName(i) + ": " + server.arg(i) + "\n";
         swot += server.arg(i) + "\n";
  }
      int switch_on_time = swot.toInt();     // Sting to Integer
      Serial.print("Eingabe Zeit = ");
      Serial.println(switch_on_time);
    }
    server.send(200, "text/plain", "");
  });

Die Webseite ist im “SPIFFS” gespeichert.

MfG

Juergen B.

Hallo Leute,

ich habe da ein Verständnisproblem,

ich möchte z.B. per Script (aus einer CCU3) eine URL an den esp32 schicken die in etwa so aufgebaut ist:

http://192.168.x.x/daten?dat1=xy&dat1=z

jetzt möchte ich möchte ich gerne mit den übergeben dat1 und dat2 (oder auch noch mehr ) im Sketch weiterarbeiten um irgend welche Sachen zu schalten oder auf einem Display anzeigen zu lassen.

Bei obigen Code bringt er mir aber immer nur die erste (dat1).

was ist da zu beachten oder zu ändern damit ich da weiterarbeiten kann?

lg Immanuel

Was hat das mit dem vorhergehenden Thread zu tun?

Schau Dir mal server.args(), server.arg(i), server.argName(i) an. Dann hast Du alles, was Du brauchst.
Naja ein paar Grundkenntnisse in C++ wären auch nicht schädlich.

Gruß Tommy

Danke hab es gelöst.

Dann wäre es für später Suchende sinnvoll, wenn Du diese Lösung hier präsentierst.

Gruß Tommy

Ja logisch, gerne.
Entschuldigung.

String HTMLarg[7];
String HTMLdat[7];
int zal;

void setup(){

......

// Test HTML-Aray 
server.on("/daten", []() {
      Serial.print("Anzahl der Argumente: ");
      Serial.println(server.args());
      Serial.println();
      for (uint8_t i = 0; i < server.args(); i++) {
      
      int AGN = i;
      String ARG = server.argName(i);
      String INH = server.arg(i);
      HTMLarg[i] = ARG;
      HTMLdat[i] = INH;
      zal = server.args();
          }

      int count;
      for (count=0;count<zal;count++) {
        Serial.print("Argument Nummer: ");
        Serial.println(count);
        Serial.print("HTML-Argument:  ");
        Serial.println(HTMLarg[count]);
        Serial.print("HTML-Daten:  ");
        Serial.println(HTMLdat[count]);
        Serial.println();
        Serial.println();
      }
   server.send(200, "text/plain", "OK");
  });

.........
}