Go Down

Topic: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten (Read 957 times) previous topic - next topic

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:
Code: [Select]

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.

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

agmue

In einem anderen Thema abgeschaut:

Code: [Select]
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() {
}
Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Derfips

#3
Oct 05, 2018, 05:07 pm Last Edit: Oct 05, 2018, 05:28 pm by Derfips
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:
Code: [Select]

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.

Code: [Select]

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
Meine Esp8266 & ESP32 Projekte => https://fipsok.de

jbaben

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

<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><br>
</p>
<p<br>
<button type="submit" class="button_on" id="led4" >START</button></p>
</body>


ESP32
Code: [Select]

// 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.

foto2004

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

Tommy56

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
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)


Tommy56

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

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

foto2004

#9
Aug 28, 2019, 01:22 pm Last Edit: Aug 28, 2019, 01:26 pm by foto2004
Ja logisch, gerne.
Entschuldigung.

Code: [Select]




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

.........
}




Go Up