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