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 programmieren - Der Start mit der Arduino IDE

Erfahre, wie du den ESP8266 D1 Mini mit der Arduino IDE programmierst. Dank den kostenlosen Entwicklungswerkzeugen und der microUSB-Buchse ist das für jeden ein Kinderspiel.

cooper.bin am 10.02.2024

Der DS18B20 Temperatursensor am ESP8266 D1 Mini - Einfache Temperaturmessung

Lerne, wie du mit der Arduino IDE, dem ESP8266 und einem DS18B20 Temperatursensor einfache und schnelle Temperaturmessungen durchführen kannst.

cooper.bin am 05.03.2024

HC-SR04 und JSN-SR04T - Entfernungen messen mit Ultraschallsensoren am ESP8266

Lerne in diesem Tutorial, wie die Ultraschallsensoren HC-SR04 und JSN-SR04T mit ESP8266 D1 Mini für Distanzmessungen eingesetzt werden, die Grundlagen, Anwendungen und mehr.

cooper.bin am 09.03.2024

Der DHT22 am ESP8266 - Wie man die Temperatur und Luftfeuchtigkeit misst

In diesem Tutorial lernst du, wie du mit einem DHT22 und einem ESP8266 D1 Mini die Luftfeuchtigkeit und die Temperatur einfach messen kannst.

cooper.bin am 12.03.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.

cooper.bin am 13.02.2024