ESP8266 Webserver: GET-Variablen auslesen

von cooper.bin
veröffentlicht am 17.02.2024 aktualisiert am 17.02.2024

In der Welt des Internets und insbesondere in der Entwicklung von Webanwendungen spielen GET-Variablen eine Schlüsselrolle. Sie sind ein einfaches aber mächtiges Werkzeug, um Daten über die URL an einen Webserver zu übermitteln. Du hast sicherlich schon einmal eine URL gesehen, die mit einem Fragezeichen ? endet. Das sind GET-Variablen.

Auch auf makesmart werden GET-Variablen verwendet. Mit GET-Variablen können einfach Informationen in der URL übergeben werden, zum Beispiel https://makesmart.net/blog?tag=esp8266.

Wenn man diese URL aufruft, wird dem Webserver mitgeteilt, dass Artikel mit dem Tag esp8266 angefragt werden. Der Server kann entsprechend reagieren und die gewünschten Artikel anzeigen.

Das Praktische daran ist, dass mehrere solcher Variablen übergeben werden können, indem man sie mit einem & verbindet: https://makesmart.net/blog?tag=esp8266&page=2. So kann kann man noch spezifischere Informationen übermitteln.

Dieses Prinzip ist nicht nur auf Webseiten beschränkt, sondern kann auch auf einem ESP8266 angewendet werden. Man kann den Webserver auf dem ESP8266 so programmieren, dass diese GET-Variablen ausgelesen und darauf basierend Aktionen ausgeführt werden.

Zum Beispiel könnte man den Wert eines Timers setzen, indem man die entsprechenden Werte über eine URL übermittelt.

Zum Kapitel springen Hardware

Für die Einrichtung eines Webservers, der GET-Parameter auslesen kann, ist die benötigte Hardware sehr überschaubar. Im Kern des Projekts steht natürlich der ESP8266 selbst. Der ESP8266 ist in unterschiedlichsten Ausführungen erhältlich, von einfachen Modellen wie dem ESP-01s, der für einfache Aufgaben geeignet ist, bis hin zu fortgeschritteneren Versionen wie dem D1 Mini oder einem NodeMCU-Board. Letztere beiden verfügen über zusätzliche Pins und einem integrierten USB-Anschluss für eine unkomplizierte Programmierung.

Solltest du nicht wissen, wie man einen ESP8266 programmiert, kannst du dir gerne diese Schritt-für-Schritt Anleitung anschauen. Darin wird der Start mit dem ESP8266, speziell dem D1 Mini erklärt und beinhaltet alle notwendigen Informationen die zu zum Programmieren eines ESP8266 Boards brauchst.

Zum Kapitel springen Programmcode

Der folgende Programmcode basiert auf dem Programmcode aus meinem anderen Tutorial ESP8266 - Ein einfacher Webserver mit mDNS. Mit lediglich ein paar Anpassungen lassen sich GET-Parameter sehr einfach auslesen und verarbeiten.

Der Code ist so gestaltet, dass er praktisch "Plug & Play" ist. Nachdem du deine WLAN-Zugangsdaten angepasst hast, kannst du den Code direkt auf den ESP8266 hochladen. Der Sketch umfasst die Einrichtung des Webservers, eine einfache Behandlung von Webanfragen und die Integration zum Auslesen eines GET-Parameters.

const char* ssid = "makesmartWLAN";
const char* password = "makesmart_passwort";
/*
    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 = "makesmartWLAN";
const char* password = "makesmart_passwort";

// http://makesmart-esp.local/ 
const char* dns_name = "makesmart-esp";

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());

  if (MDNS.begin(dns_name)) {
    Serial.println("DNS gestartet, erreichbar unter: ");
    Serial.println("http://" + String(dns_name) + ".local/");
  }

  server.onNotFound([](){
    // Es wird keine spezielle Route definiert, sodass bei jeder URL IMMER die Funktion
    // get_hook() aufgerufen wird
    get_hook();
  });

  server.begin();
  
  Serial.println("Der Webserver wurde gestartet.");
  
}



void loop() {
  server.handleClient();
  MDNS.update();  
}


void get_hook() {


    if( server.hasArg("name") ){

      // Variable "name" wurde übergeben
      Serial.println("Variable 'name' übergeben!");

      // Anschließend die Prüfung, ob die Variable 'name' einen Inhalt hat
      if( server.arg("name") != "" ){
        
        // Die Ausgabe des übergebenen Wertes über den seriellen Monitor
        Serial.println( "Name wurde übergeben: " + server.arg("name") );
        
        // Die Ausgabe im Webbrowser HTTP-Code 200: Ok
        server.send( 200, "text/plain", "Name wurde übergeben: " + server.arg("name") );

        
      }else{
        
        // Wenn Variable die 'name' übergeben wurde, aber leer ist:
        Serial.println( "Name ist da - besitzt aber keinen Wert." );
        server.send(200, "text/plain","Name ist da - besitzt aber keinen Wert.");  
        
      }
      
    }else{
      //Wenn gar keine Variablen übergeben wurden
      Serial.println( "Es wurde keine Variable `name` übergeben." );
      server.send( 200, "text/plain", "Es wurde keine Variable `name` übergeben." ); 
    }

}

Sobald man das Programm auf den ESP8266 hochgeladen hat, werden ein paar Meldungen über den seriellen Monitor ausgegeben. Diese Meldungen bestätigen, dass eine Verbindung zum WLAN hergestellt wurde und der Webserver läuft:

Verbindung wird hergestellt ..........
Verbunden! IP-Adresse: 192.168.178.89
DNS gestartet, erreichbar unter:
http://makesmart-esp.local/
Der Webserver wurde gestartet.

Beim Aufruf der IP-Adresse des ESP8266 und dem Übergeben vom GET-Parameter name werden dementsprechende Meldungen über den seriellen Monitor und auf der Webseite ausgegeben.

http://makesmart-esp.local/?name=cooper.bin

Name wurde übergeben: cooper.bin

http://makesmart-esp.local/?name=

Name ist da - besitzt aber keinen Wert.

http://makesmart-esp.local/

Es wurde keine Variable `name` übergeben.

Zum Kapitel springen Inspirationen

GET-Parameter bieten eine flexible Möglichkeit, um Einstellungen und Werte von Variablen auf dem ESP8266 in Echtzeit anzupassen. Sie ermöglichen es, Parameter eines laufenden Programms direkt über die URL zu ändern, ohne dass eine Neuprogrammierung des Mikrocontrollers erforderlich ist. Nehmen wir als Beispiel das belibete Blink-Programm: Standardmäßig ist der Intervall, in dem die LED blinkt fest im Code definiert. Durch die Nutzung von GET-Parametern können wir diesen Intervall dynamisch anpassen.

In meinem MisterT Projekt habe ich GET-Parameter verwendet, um eine API zu realisieren.

GET-Variablen können schlichtweg dazu dienen, Funktionen auf deinem ESP8266 auszuführen

Die Themen server und arduino-ide gibt es auch auf dem makesmart Discord-Server! Trete bei, um dich auszutauschen.

mehr erfahren

Teile diesen Beitrag



Diese Artikel könnten dich auch interessieren

ESP8266 D1 Mini WLAN-Relais mit HTTP API

Mit diesem einfachem Webserver auf dem ESP8266 mit HTTP API kannst du ein Relais smart machen! Steuere das Relais über deinen Webbrowser oder automatisiert durch andere Dienste.

Titelbild ersetzen Bearbeiten

cooper.bin am 20.02.2024

ESP8266 Webserver mit echten HTML Dateien

Mit dem ESPAsyncWebserver kann man einen dateibasierten Webserver auf dem ESP8266 realisieren. Dieser kann HTML, CSS, Javascript und jede andere Art von Datei ausliefern.

Titelbild ersetzen Bearbeiten

cooper.bin am 28.04.2024

ESP8266 - Ein einfacher Webserver mit mDNS

Während Webserver wie Apache2 oder NGNIX auf Rechnern laufen, kann man auch auf einem ESP8266 einen Webserver verwenden. In diesem Tutorial werden wir ein Grundgerüst implementieren.

Titelbild ersetzen Bearbeiten

cooper.bin am 13.02.2024

ESP8266 Websocket Server für Echtzeitkommunikation

Mit einem Websocket-Server auf dem ESP8266 kann man Daten in Echtzeit austauschen. Im Gegensatz zu HTTP kann der Server den Client über neue Events benachrichtigen, ohne vorher angefragt zu werden.

Titelbild ersetzen Bearbeiten

cooper.bin am 02.05.2024

ESP8266 GET-Request für HTTP und HTTPS

In diesem Tutorial erfährst du, wie du mit einem ESP8266 HTTP- und HTTPS-GET-Anfragen an Webserver senden kannst, um Daten abzurufen.

Titelbild ersetzen Bearbeiten

cooper.bin am 12.04.2024