ESP8266 GET-Variablen auslesen

ESP8266 Apr. 24, 2020
makesmart.shop - ESP8266 D1 Mini
ESP8266 D1 Mini Entwicklerboard für Arduino IDE. Integrierte USB-Schnittstelle zum Programmieren und eingebaute WLAN-Funktion onBoard. Perfekt für Io…
https://my.makesmart.net/topic/69/esp8266-get-variablen-auslesen

GET-Variablen sind Variablen, die über die URL übergeben werden. Das kann einerseits manuell durch eintippen der URL im Browser geschehen, oder durch andere Programme oder Geräte. Grundlegend lässt sich sagen, dass GET-Variablen im Webbrowser immer an einem ? erkennbar sind. Anschließend folgen die Variablen mit ihren Inhalten.

Wenn man die URL http://example.com?variable=wert aufruft, wird die Variable variable mit dem Inhalt wert übergeben. Man kann auch mehrere Variablen übergeben, diese werden dann mit einem & voneinander getrennt.

http://example.com/?name=cooper&alias=brain
Variable: name = cooper
Variable: alias = brain

GET-Variablen kann man immer und überall übergeben - macht meistens aber keinen Sinn. Erst wenn der Server dementsprechend programmiert ist, werden die übergebenen Daten verarbeitet. Und genau das macht dieser Code.


Beispiel

Auf dem ESP8266 läuft ein Webserver. Die IP-Adresse meines ESPs lautet 192.168.178.47.

Beim Aufruf der URL des ESPs wird die Variable name übergeben. Der Inhalt der Variable wird vom ESP ausgelesen und kann dann verarbeitet werden. Im Beispiel ist die Verarbeitung die einfache Ausgabe im Webbrowser und im seriellen Monitor.

http://192.168.178.47/?name=cooper
Output: Name: cooper

http://192.168.178.47/?name=makesmart
Output: Name: makesmart

http://192.168.178.47/?name=gehtdichgarnixan
Output: Name: gehtdichgarnixan

Code

/*    HTTP-GET Request verarbeiten    Basic-Code für GET-Request Verarbeitung auf dem ESP8266    Created by cooper, 2020    makesmart.net*/#include <ESP8266WiFi.h>#include <ESP8266WebServer.h>#include <ESP8266mDNS.h>ESP8266WebServer server(80);const char* ssid = "WLAN_SSID";const char* password = "WLAN_PASS";void setup(){  Serial.begin(115200);  Serial.println("ESP Gestartet");  WiFi.begin(ssid, password);  Serial.print("Verbindung wird hergestellt ...");  while (WiFi.status() != WL_CONNECTED)  {    delay(500);    Serial.print(".");  }  Serial.println();  Serial.print("Verbunden! IP-Adresse: ");  Serial.println(WiFi.localIP());  server.onNotFound([](){    // Es wird keine Seite definiert, sodass bei jeder URL IMMER die Funktion    // get_hook() aufgerufen wird        get_hook();      });  server.begin();    Serial.println("Webserver gestartet.");}void loop() {  server.handleClient();  }void get_hook() {    if(server.hasArg("name")){      // Variable "name" wird übergeben      Serial.println("Variable 'name' übergeben!");      // Anschließend die Prüfung, ob die Variable 'name' leer ist:            if(server.arg("name") != ""){                // Falls Variable 'name' nicht leer ist:        Serial.println(server.arg("name"));                // Ausgabe im Webbrowser HTTP-Code 200: Ok        server.send(200, "text/plain", "Name: " + server.arg("name"));              }else{                // Wenn Variable die 'name' übergeben wurde, aber leer ist:        // Ausgabe im Webbrowser HTTP-Code 200: Ok        server.send(200, "text/plain","Name ist da! .. Aber ohne Inhalt.");                }              }else{      //Wenn gar keine Variablen übergeben wurden      server.send(200, "text/plain", "Es wurden keine Variablen übergeben");     }}

Einstellungen

Das übliche. Wie immer die WLAN-Daten:

const char* ssid = "SSID";const char* password = "PSK";

Es wurde keine spezielle Seite definiert. Es wird immer die Funktion get_hook() aufgerufen:

server.onNotFound([](){        get_hook();    });

Natürlich kann der Webserver auch nur bei bestimmten Links die Funktion aufrufen:

server.on("/set_data", []() {    get_hook();});

http://192.168.178.47/set_data?name=cooper
Output: Name: cooper


Anwendung

GET-Variablen könnten z.B Variablen auf dem ESP überschreiben, um Parameter im laufenden Betrieb zu ändern. Mit dem Link

http://192.168.178.47/?delay=5000

könnte zum Beispiel der delay() des Blink-Programmes geändert werden.


In einem Projekt von mir habe ich GET-Variablen verwendet, um Zeiten und Abläufe in einem Programm im laufenden Betrieb zu ändern.


GET-Variablen können auch dazu dienen, Funktionen aufzurufen um I/O-Pins zu schalten oder andere Prozesse & Abläufe einzuleiten.

http://192.168.178.47/?timer=50
http://192.168.178.47/?delay=300
http://192.168.178.47/?sensor=active


Mit so ziemlich jeder Programmiersprache kann man HTTP-GET Requests senden. Unter anderem auch mit einem ESP.

Diese Methode ist eine sehr einfache Möglichkeit, den ESP mit anderer Software & auch Hardware zu verbinden um mit variablen Werten zu arbeiten.


Viel Spaß mit euren Projekten,

cooper

Community

Die makesmart Community ist der Ort, an dem du deine Ideen mitteilen und deine Erfahrungen austauschen kannst.

Großartig! Das Abonnement wurde erfolgreich abgeschlossen.
Großartig! Schließe als Nächstes die Kaufabwicklung ab, um vollen Zugriff zu erhalten.
Willkommen zurück! Du hast dich erfolgreich angemeldet.
Erfolg! Dein Konto ist vollständig aktiviert, du hast jetzt Zugang zu allen Inhalten.