Arduino Forum

International => Deutsch => Topic started by: jbaben on Oct 05, 2018, 03:58 pm

Title: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: jbaben on Oct 05, 2018, 03:58 pm
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.
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: Tommy56 on Oct 05, 2018, 04:09 pm
Schau Dir mal die Grundlagen von HTML / HTTP (https://wiki.selfhtml.org/) an. Dann wirst Du merken, dass Deine Parameterübergabe so nicht funktionieren wird.

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

Gruß Tommy
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: agmue on Oct 05, 2018, 04:20 pm
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() {
}
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: Derfips on Oct 05, 2018, 05:07 pm
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 (https://fipsok.de/sketch32/espboardled32tab.html) schalten nochmal genau anschauen.

Oder schau dir die Beispiele zum Esp32 Webserver (https://github.com/espressif/arduino-esp32/tree/master/libraries/WebServer/examples) 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
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: jbaben on Oct 06, 2018, 05:56 pm
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.
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: foto2004 on Aug 27, 2019, 01:30 pm
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
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: Tommy56 on Aug 27, 2019, 01:59 pm
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
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: foto2004 on Aug 27, 2019, 06:05 pm
Danke hab es gelöst.
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: Tommy56 on Aug 27, 2019, 06:06 pm
Dann wäre es für später Suchende sinnvoll, wenn Du diese Lösung hier präsentierst.

Gruß Tommy
Title: Re: Eingabe (Zahl 1-30) an ESP32 senden u. verarbeiten
Post by: foto2004 on Aug 28, 2019, 01:22 pm
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");
  });

.........
}