Eigene Projekte einfach umsetzen
Hosten Sie Ihr Projekt einfach selbst auf einem NAS mit passenden Festplatten!
Jetzt mehr erfahren
Anzeige

    Webserver auf dem ESP32: Schritt-für-Schritt-Anleitung

    KI-generiert
    10.10.2026 119 mal gelesen 5 Kommentare
    • Installiere in der Arduino IDE das ESP32-Boardpaket, wähle dein passendes ESP32-Modell aus und lege WLAN-Zugangsdaten sowie die benötigte Bibliothek WebServer.h fest.
    • Verbinde den ESP32 mit dem WLAN, starte einen HTTP-Server auf Port 80 und registriere Routen, die HTML-Inhalte ausgeben oder GPIO-Pins per Browser steuern.
    • Lade den Sketch hoch, öffne die im seriellen Monitor angezeigte IP-Adresse im Browser und sichere den Webserver anschließend durch Authentifizierung, Eingabeprüfung und ein geschütztes WLAN ab.

    ESP32 vorbereiten und Entwicklungsumgebung einrichten

    Bevor der erste Sketch kompiliert wird, braucht der ESP32 eine stabile Stromversorgung, eine passende USB-Verbindung und eine sauber eingerichtete Entwicklungsumgebung. Für dieses Tutorial eignet sich ein gängiges ESP32-DevKit mit USB-Anschluss. Die genaue Pin-Belegung kann je nach Board abweichen. Prüfe deshalb die Beschriftung auf der Platine.

    Werbung

    Benötigt werden:

    Eigene Projekte einfach umsetzen
    Hosten Sie Ihr Projekt einfach selbst auf einem NAS mit passenden Festplatten!
    Jetzt mehr erfahren
    Anzeige

    Viele ESP32-Modelle unterstützen kein 5-GHz-WLAN. Für die erste Einrichtung sollte der Router daher ein 2,4-GHz-Netz bereitstellen. Notiere den Netzwerknamen und das WLAN-Passwort. Sonderzeichen im Passwort sind grundsätzlich erlaubt, verursachen beim Eintragen in C++ aber leicht Fehler.

    Installiere anschließend die aktuelle Arduino IDE über die offizielle Arduino-Webseite. Öffne danach Datei → Voreinstellungen und ergänze bei Zusätzliche Boardverwalter-URLs diese Adresse:

    https://espressif.github.io/arduino-esp32/package_esp32_index.json

    Unter Werkzeuge → Board → Boardverwalter suchst du nach esp32 und installierst das Paket von Espressif Systems. Wähle danach unter Werkzeuge → Board das Modell, das deinem Modul entspricht. Bei einem verbreiteten ESP32-DevKit ist ESP32 Dev Module meist die passende Auswahl. Ein falsches Boardprofil kann zu Upload-Fehlern, falscher Flash-Konfiguration oder unerwartetem Verhalten führen.

    Verbinde das Board jetzt mit dem USB-Kabel. Erscheint kein neuer serieller Anschluss, liegt es oft am Kabel oder am USB-Treiber des verbauten Wandlers. Häufig verwendet werden Chips der Reihen CP210x oder CH34x. Im Menü Werkzeuge → Port sollte anschließend ein neuer Anschluss auftauchen. Unter Linux lässt er sich meist als /dev/ttyUSB0 oder /dev/ttyACM0 erkennen.

    Lege ein neues Projekt an und speichere es unter einem eindeutigen Namen. Verwende für WLAN-Zugangsdaten zunächst Platzhalter:

    const char* ssid = "DEIN_WLAN";
    const char* password = "DEIN_PASSWORT";

    Eine praktische Alternative ist eine separate Datei wie secrets.h. Diese Datei bleibt lokal und wird nicht in ein öffentliches Repository hochgeladen. Ergänze sie in der Versionsverwaltung durch einen passenden Eintrag in .gitignore.

    Zum Abschluss der Vorbereitung öffnest du Werkzeuge → Serieller Monitor und stellst dieselbe Baudrate ein, die später im Programm verwendet wird, häufig 115200. Drücke einmal die Reset-Taste des Boards. Werden lesbare Startmeldungen angezeigt, funktionieren USB-Verbindung, Portauswahl und Stromversorgung.

    Benötigte Bibliotheken installieren und WLAN-Zugangsdaten hinterlegen

    Für einen schlanken ESP32-Webserver reichen die integrierten Netzwerkfunktionen des ESP32-Kerns aus. Zusätzliche Bibliotheken brauchst du erst, wenn dein Projekt etwa Sensoren, JSON-Daten, MQTT oder eine externe Benachrichtigung einbindet. Installiere deshalb nicht vorsorglich viele Pakete. Jede zusätzliche Abhängigkeit kann den Flash-Speicher belasten und spätere Versionsfehler verursachen.

    Prüfe im Bibliotheksverwalter zunächst, ob das Boardpaket von Espressif Systems korrekt eingebunden ist. Der Sketch kann danach unter anderem diese Header verwenden:

    • WiFi.h für die Verbindung mit dem WLAN
    • WebServer.h für HTTP-Anfragen und Antworten
    • HTTPClient.h für ausgehende HTTP-Anfragen, falls später ein externer Dienst angesprochen wird
    • ArduinoJson nur dann, wenn strukturierte Messwerte als JSON verarbeitet werden

    WiFi.h und WebServer.h gehören beim üblichen ESP32-Boardpaket bereits zum Lieferumfang. Sie werden nicht wie eine gewöhnliche Bibliothek über den Bibliotheksverwalter nachinstalliert. Zusätzliche Pakete sollten möglichst über den offiziellen Bibliotheksverwalter bezogen werden. Achte dort auf den korrekten Autor und eine gepflegte Version.

    Lege die Zugangsdaten getrennt vom eigentlichen Programm ab. Eine einfache Datei secrets.h sieht so aus:

    const char* WIFI_SSID = "MeinNetz";
    const char* WIFI_PASSWORD = "LangesPasswort";

    Diese Datei bindest du am Anfang des Sketches ein. Benenne die Konstanten eindeutig und verwende sie später unverändert für den Verbindungsaufbau. Bei einem öffentlichen Projekt gehört secrets.h nicht in die Versionsverwaltung.

    Für die WLAN-Anmeldung sind außerdem drei technische Punkte wichtig:

    • Nutze den exakten Netzwerknamen. Groß- und Kleinschreibung können relevant sein.
    • Vermeide unsichtbare Leerzeichen am Anfang oder Ende der Zeichenketten.
    • Verwende ein ausreichend langes WLAN-Passwort und teile es nicht über den Quelltext.

    Ein ESP32 kann sich nach einem Verbindungsabbruch selbstständig erneut anmelden. Dafür sollte der Code den Status regelmäßig prüfen. Ein endloses Warten beim Start ist ungünstig: Fällt der Router aus, bleibt der Webserver sonst unter Umständen dauerhaft blockiert. Besser ist ein begrenzter Anmeldeversuch mit anschließendem erneuten Versuch im Hauptprogramm.

    Wenn die Zugangsdaten korrekt übernommen wurden, kompiliere den Sketch zunächst ohne Sensor- oder Bedienlogik. Dadurch lässt sich ein Bibliotheksproblem klar von einem Fehler im späteren Webserver-Code trennen. Eine kleine, aufgeräumte Projektstruktur spart hier Zeit: Hauptsketch, optionale Geheimdatei und nur die Bibliotheken, die tatsächlich verwendet werden.

    Webserver-Grundgerüst für den ESP32 programmieren

    Das Grundgerüst besteht aus drei Teilen: Der ESP32 nimmt eine WLAN-Verbindung an, startet einen HTTP-Server und beantwortet eine erste Route. Für den Anfang genügt eine kleine Statusseite. Sensorwerte, Schaltflächen und die vollständige Gestaltung kommen später hinzu.

    Füge im Sketch diese Komponenten ein:

    • WiFi stellt die Netzwerkverbindung her.
    • WebServer verarbeitet HTTP-Anfragen.
    • Eine Route für / liefert die Startseite.
    • Eine Funktion sendet HTTP-Status und Inhalt an den Browser zurück.

    Das zentrale Muster sieht so aus:

    WebServer server(80);

    void handleRoot() {
      server.send(200, "text/html; charset=utf-8", "

    ESP32 ist erreichbar

    ");
    }

    void setup() {
      server.on("/", handleRoot);
      server.begin();
    }

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

    Die Route wird mit server.on() registriert. Der erste Parameter ist der Pfad, der zweite verweist auf die Funktion zur Verarbeitung. Mit server.send() antwortet der ESP32. Der Statuscode 200 bedeutet „OK“. Der MIME-Typ text/html weist den Browser an, die Antwort als Webseite darzustellen.

    Der Aufruf server.handleClient() gehört in die Hauptschleife. Er prüft, ob eine Anfrage eingetroffen ist, und führt dann die passende Funktion aus. Fehlt dieser Aufruf, startet der Server zwar scheinbar, reagiert aber nicht zuverlässig auf Browserzugriffe.

    Für einen vollständigen ersten Test ergänzt du im Startablauf die WLAN-Anmeldung aus der zuvor angelegten Konfigurationsdatei. Warte nicht unbegrenzt auf eine Verbindung. Nach einer festgelegten Zeit kann der Sketch den Verbindungsversuch abbrechen oder später erneut starten.

    Die Webserver-Instanz verwendet Port 80, den Standardport für unverschlüsseltes HTTP im lokalen Netz. Ein Browser erreicht die Startseite später über die IP-Adresse des Boards und den Pfad /. Der Port muss bei Port 80 nicht in die Adresse geschrieben werden.

    Halte die Handler zunächst kurz. Längere Wartezeiten, etwa durch delay(), blockieren die Verarbeitung weiterer Anfragen. Zeitkritische Aufgaben gehören deshalb später in eine nicht blockierende Ablaufsteuerung mit millis().

    Nach dem Upload öffnest du die im seriellen Monitor ausgegebene lokale IP-Adresse im Browser. Erscheint die Statusmeldung, funktionieren Routing, Serverstart und Antwortverarbeitung.

    Eigene HTML-Oberfläche im ESP32 speichern und ausliefern

    Eine eigene HTML-Oberfläche lässt sich direkt als Zeichenkette im Sketch ausliefern. Für kurze Seiten ist das schnell umgesetzt. Bei mehreren Elementen wird der Quelltext jedoch unübersichtlich. Verwende deshalb ein Raw-String-Literal. Darin bleiben Zeilenumbrüche, Anführungszeichen und einfache HTML-Strukturen gut lesbar.

    Ein kleines Beispiel:

    const char indexHtml[] PROGMEM = R"rawliteral(



      
      
      ESP32-Steuerung


      

    Haussteuerung


      

    Der Webserver läuft.




    )rawliteral";

    Die Endmarke )rawliteral muss exakt zur Startmarke passen. Taucht diese Zeichenfolge später im HTML auf, endet der Text zu früh. Wähle in diesem seltenen Fall eine andere Markierung.

    Die Kennzeichnung PROGMEM legt die Zeichenkette im Programmspeicher ab. Das schont den knappen Arbeitsspeicher des Mikrocontrollers. Beim Ausliefern übergibst du den Inhalt an den bereits angelegten Handler:

    server.send(200, "text/html; charset=utf-8", indexHtml);

    Die Angabe charset=utf-8 ist wichtig, damit Umlaute und Sonderzeichen korrekt erscheinen. Ergänze im HTML außerdem das Viewport-Meta-Element. CSS kann zunächst direkt im stehen, JavaScript meist am Ende des .

    • Komprimiere wiederholte Leerzeichen und Kommentare erst nach erfolgreicher Prüfung.
    • Nutze kurze Klassennamen, wenn der Flash-Speicher knapp wird.
    • Lagere CSS und JavaScript später in eigene Routen aus, sobald die Startseite schwer wartbar wird.
    • Vermeide eingebettete Bilder in Base64, da sie den Speicherbedarf stark erhöhen können.

    Für externe Dateien registrierst du beispielsweise eine zusätzliche Route für /style.css. Der Browser lädt diese Datei dann separat. Die Antwort erhält den passenden Medientyp text/css. Für JavaScript verwendest du text/javascript. Stimmen Pfad und Medientyp nicht, bleibt die Oberfläche oft ohne sichtbare Fehlermeldung ungestaltet.

    Eine robuste HTML-Seite enthält außerdem sichtbare Statusbereiche. Lege etwa ein Element für Verbindung, Temperatur oder Alarmzustand an. Diese Platzhalter werden später durch JavaScript mit Daten vom ESP32 gefüllt.

    Teste die Seite zunächst mit statischen Beispielwerten. Erst wenn Darstellung, mobile Breite und Zeichencodierung stimmen, bindest du echte Messdaten ein.

    Routen für Webseiten, Sensorwerte und Schaltbefehle anlegen

    Lege die Endpunkte klar nach ihrer Aufgabe an. Eine HTML-Seite liefert keine Messdaten und ein Schaltbefehl sollte keine Webseite zurückgeben. Diese Trennung macht die Oberfläche übersichtlich und verhindert, dass der Browser unnötig große Antworten verarbeitet.

    • / liefert die Startseite.
    • /api/status gibt den aktuellen Gerätezustand zurück.
    • /api/temperature liefert einen Temperaturwert.
    • /api/switch nimmt einen Schaltbefehl entgegen.

    Für Messwerte eignet sich das JSON-Format. Ein Beispiel kann so aussehen: {"temperature":22.8,"gas":false,"relay":true}. Die Feldnamen bleiben am besten stabil. Dann muss die JavaScript-Oberfläche nicht bei jeder kleinen Änderung angepasst werden.

    Messdaten sollten auf eine Anfrage hin frisch gelesen oder aus einem kurzen Zwischenspeicher geliefert werden. Manche Sensoren brauchen Zeit, liefern nur in bestimmten Abständen neue Werte oder reagieren empfindlich auf parallele Abfragen. Speichere deshalb den letzten gültigen Messwert und ergänze ihn um einen Zeitstempel.

    Schaltbefehle gehören ausschließlich in eine passende POST-Route. Ein Browseraufruf per GET sollte keine Heizung, Pumpe oder Relais einschalten. GET ist für das Lesen gedacht, POST für eine Zustandsänderung. Diese Regel verhindert versehentliche Aktionen durch Seitenaktualisierungen, Vorschauen oder gecachte Links.

    Prüfe im Handler jede Eingabe. Erlaubt sind beispielsweise nur die Werte on und off. Unbekannte Parameter beantwortet der ESP32 mit einem passenden Fehlercode. Bei ungültigen Daten ist 400 sinnvoll; bei einem nicht vorhandenen Pfad 404. Eine erfolgreiche Zustandsänderung kann mit 200 und dem neuen Status bestätigt werden.

    Für die Datenantwort kann ein kleines JSON von Hand erzeugt werden. Achte dabei auf gültige Syntax und auf korrekt maskierte Zeichenketten. Bei mehreren Feldern ist eine JSON-Bibliothek weniger fehleranfällig. Zahlen dürfen nicht versehentlich als Text ausgegeben werden, wenn die Webseite sie später berechnen soll.

    Die Oberfläche ruft die API etwa alle zwei bis fünf Sekunden auf oder fordert Daten erst nach einer Benutzeraktion an. Ein sehr kurzes Intervall erzeugt unnötige WLAN-Last und kann den ESP32 ausbremsen. Für Alarmzustände ist dagegen eine sofortige Aktualisierung sinnvoll.

    Dokumentiere für jede Route Methode, Pfad, Eingaben und Antwort. Diese kleine Übersicht spart beim Ausbau viel Zeit:

    • GET /api/status: liefert Sensor- und Aktorzustände.
    • GET /api/temperature: liefert Temperatur, Einheit und Messzeitpunkt.
    • POST /api/switch: erwartet einen ausdrücklich erlaubten Zielzustand.
    • Fehlerantwort: enthält einen kurzen, verständlichen Fehlercode.

    Vermeide Zustandsänderungen über URL-Parameter wie /relay?state=on. Solche Adressen können in Browser-Historien, Protokollen oder fremden Referrer-Daten auftauchen. Für ungefährliche Lesezugriffe ist GET passend; für steuernde Aktionen bleibt POST die bessere Wahl.

    Sensoren und Aktoren sicher über die Weboberfläche steuern

    Steuere Aktoren nie allein durch das Anzeigen eines Buttons. Der ESP32 muss jeden Befehl prüfen, bevor ein Relais, Ventil oder Motor schaltet. Gerade bei Heizungen, Pumpen und Türöffnern kann ein kleiner Softwarefehler große Folgen haben.

    Trenne zunächst drei Ebenen: den gemessenen Zustand, den gewünschten Zustand und die tatsächliche Ausgabe am GPIO. Ein Sensorwert darf nicht direkt als Schaltentscheidung an den Ausgang durchgereicht werden. Prüfe Grenzwerte, Betriebsart und Sicherheitsbedingungen in einer zentralen Funktion.

    Für ein Relais ist eine eindeutige Logik sinnvoll:

    • Nur bekannte Aktor-Namen akzeptieren.
    • Nur die Zustände on und off zulassen.
    • Unzulässige Kombinationen ablehnen, etwa Heizung und Kühlung gleichzeitig.
    • Nach jeder Änderung den tatsächlich gesetzten Zustand zurückmelden.
    • Bei einem Neustart einen sicheren Standardzustand herstellen.

    Viele Relaismodule sind active-low. Dann schaltet der Ausgang bei LOW ein und bei HIGH aus. Setze den Pin daher schon früh im Startablauf auf den sicheren Pegel. Noch besser: Wähle für kritische Lasten eine Hardware-Schaltung, die beim Booten zuverlässig ausgeschaltet bleibt.

    Sensoren sollten einen Qualitätsstatus besitzen. Neben dem Messwert sind Angaben wie valid, age_ms oder error hilfreich. Ein alter Temperaturwert darf nicht wie eine aktuelle Messung aussehen. Wird ein Sensor länger als ein festgelegtes Zeitfenster nicht aktualisiert, sollte die Steuerung in einen sicheren Zustand wechseln.

    Bei Gas- oder Rauchmeldern gilt: Software ersetzt keine zugelassene Warnanlage. Der ESP32 kann einen zusätzlichen Hinweis liefern, darf aber nicht die einzige Schutzmaßnahme sein. Lege für kritische Sensoren eine lokale Reaktion fest, die auch ohne Browser funktioniert. Dazu gehören etwa ein akustischer Alarm, das Abschalten einer Last oder eine Notfallbeleuchtung.

    Verwende für Schaltvorgänge eine Sperrzeit, wenn ein Aktor nicht ständig umschalten darf. Eine Pumpe kann beispielsweise mindestens 30 Sekunden laufen müssen, bevor sie wieder abgeschaltet wird. Für Temperaturregelungen verhindert eine Hysterese von etwa 0,5 bis 2 °C ein hektisches Ein- und Ausschalten. Der konkrete Wert hängt von Sensor, Raum und Last ab.

    Schutzfunktionen gehören nicht nur in JavaScript. Ein versteckter Button oder eine deaktivierte Eingabe bietet keinen Schutz, weil Anfragen auch direkt an den Endpunkt gesendet werden können. Die entscheidende Prüfung muss auf dem ESP32 erfolgen. Zusätzlich sollte jede Aktion protokollieren, wann sie ausgelöst wurde und ob sie erfolgreich war.

    Bei Neustart, WLAN-Ausfall oder ungültigen Messwerten braucht das System einen definierten Fallback. Für gefährliche Lasten ist aus oft richtig, bei einer sicherheitsrelevanten Lüftung kann jedoch ein erforderlich sein. Diese Entscheidung muss zur Anlage passen.

    Teste die Steuerung anschließend mit abgezogenem Verbraucher oder einer ungefährlichen Testlast. Prüfe dabei auch Stromausfall, Sensorausfall, doppelte Klicks und widersprüchliche Befehle. Erst wenn diese Fälle sauber behandelt werden, sollte die Weboberfläche reale Aktoren bedienen.

    Webserver starten und die lokale Verbindung testen

    Nach dem Start muss zuerst geprüft werden, ob der ESP32 tatsächlich auf HTTP-Anfragen reagiert. Öffne die lokale Geräteadresse im Browser und rufe die Startseite vollständig auf. Teste danach jede vorhandene Route einzeln. So erkennst du schnell, ob nur die Oberfläche oder auch die dahinterliegende Logik funktioniert.

    Führe den Test am besten in dieser Reihenfolge durch:

    • Startmeldung und IP-Adresse im seriellen Monitor ablesen.
    • Die Adresse ohne zusätzliche Suchbegriffe im Browser öffnen.
    • Die Seite mehrmals neu laden und auf vollständige Darstellung achten.
    • API-Adressen direkt aufrufen und die Antwort prüfen.
    • Eine ungefährliche Testaktion auslösen und den Rückgabestatus kontrollieren.

    Verwende die lokale IPv4-Adresse des ESP32, nicht die USB-Schnittstelle des Computers. Eine typische Adresse sieht etwa wie 192.168.1.57 aus. Die konkrete Zahl ist in jedem Netzwerk anders. Smartphone und Computer müssen dabei mit demselben WLAN verbunden sein. Ein aktiviertes Gastnetz kann den Zugriff auf Geräte im Heimnetz blockieren.

    Wenn der Browser keine Verbindung aufbaut, prüfe zunächst die naheliegenden Ursachen: Ist das Board eingeschaltet? Stimmt die angezeigte Adresse? Befinden sich beide Geräte im gleichen IP-Netz? Ein Rechner mit 192.168.1.20 und ein ESP32 mit 10.0.0.57 gehören meist nicht zum selben lokalen Segment.

    Ein erfolgreicher Ping ist hilfreich, aber kein vollständiger Beweis. Manche Geräte beantworten ICMP-Anfragen nicht, obwohl der HTTP-Dienst funktioniert. Aussagekräftiger ist ein direkter Browseraufruf oder ein Test mit einem Werkzeug wie curl. Dabei sollte neben dem Inhalt auch der HTTP-Statuscode sichtbar werden.

    Öffne in den Entwicklerwerkzeugen des Browsers den Bereich Netzwerk. Lade die Seite neu und kontrolliere:

    • den Statuscode jeder Anfrage
    • die Ladezeit und mögliche Zeitüberschreitungen
    • den Inhalt von JSON-Antworten
    • Fehler bei JavaScript oder fehlende Dateien
    • ob ein Schaltbefehl tatsächlich eine Antwort erhält

    Ein häufiger Fehler sind falsche relative Pfade. Verweist das HTML etwa auf /app.js, muss der ESP32 genau diese Route anbieten. Ein Unterschied bei Groß- und Kleinschreibung kann genügen, damit eine Datei unter Linux funktioniert, auf dem Mikrocontroller aber nicht gefunden wird. Auch nachträgliche Änderungen werden manchmal durch den Browser-Cache verdeckt. Nutze beim Testen deshalb eine harte Aktualisierung.

    Beobachte währenddessen die serielle Ausgabe. Ergänze für kurze Tests Meldungen beim Eingang einer Anfrage, beim Lesen eines Sensors und beim Setzen eines Ausgangs. Gib keine Passwörter oder geheimen Tokens aus. Nach der Fehlersuche entfernst du die ausführlichen Debug-Meldungen wieder.

    Teste anschließend zwei Geräte gleichzeitig. Lädt nur ein Browser zuverlässig, kann eine blockierende Funktion im Programm die Ursache sein. Bleibt die Oberfläche auch nach mehreren parallelen Aufrufen stabil, ist die lokale Basis geschaffen.

    Feste lokale IP-Adresse und stabile Erreichbarkeit einrichten

    Eine feste lokale IP-Adresse verhindert, dass sich die Adresse des ESP32 nach einem Router-Neustart ändert. Dafür gibt es zwei praktikable Wege: eine DHCP-Reservierung im Router oder eine manuell konfigurierte Adresse im Sketch. Die Router-Reservierung ist meist die bessere Wahl.

    Bei einer DHCP-Reservierung ordnet der Router der MAC-Adresse des ESP32 immer dieselbe IPv4-Adresse zu. Öffne dazu die Netzwerkverwaltung des Routers, suche das verbundene Gerät und lege eine Reservierung außerhalb des automatisch wechselnden Bereichs an. Nutze beispielsweise 192.168.1.50, wenn der DHCP-Bereich erst bei 192.168.1.100 beginnt. Die genaue Menübezeichnung unterscheidet sich je nach Router.

    Eine feste Adresse im Sketch kann sinnvoll sein, wenn kein Router diese Funktion anbietet:

    IPAddress localIp(192, 168, 1, 50);
    IPAddress gateway(192, 168, 1, 1);
    IPAddress subnet(255, 255, 255, 0);
    IPAddress dns(192, 168, 1, 1);

    Vor der WLAN-Anmeldung übergibst du diese Werte an die Netzwerkschnittstelle. Prüfe vorher das tatsächliche Heimnetz. Bei einem Gateway von 192.168.178.1 wäre eine Adresse aus dem Bereich 192.168.1.x falsch. Eine doppelt vergebene Adresse führt zu schwer nachvollziehbaren Ausfällen.

    Die manuelle Konfiguration hat Nachteile: Ändert sich der Router oder das lokale Subnetz, ist der ESP32 nicht mehr erreichbar. Außerdem muss die gewählte Adresse außerhalb des DHCP-Pools liegen. Eine Reservierung im Router bleibt deshalb wartungsärmer und verhindert Adresskonflikte.

    Für einen stabilen Betrieb solltest du zusätzlich diese Punkte prüfen:

    • Wähle eine Adresse aus demselben Subnetz wie die Steuergeräte.
    • Verwende keine Adresse, die bereits ein Drucker, Fernseher oder anderer IoT-Knoten nutzt.
    • Notiere IP-Adresse, Gateway und MAC-Adresse in der Projektdokumentation.
    • Vermeide Energiesparfunktionen des WLAN-Moduls, wenn schnelle Antworten wichtig sind.
    • Prüfe nach Router-Updates, ob die Reservierung weiterhin vorhanden ist.

    Ein verständlicher Gerätename erleichtert die Suche in der Routeroberfläche. Er ersetzt jedoch keine feste Adresse: Hostnamen werden nicht von jedem Gerät gleich zuverlässig aufgelöst. Für Wartungsarbeiten ist die MAC-Adresse die eindeutigere Zuordnung.

    Eine feste private IP-Adresse gilt nur innerhalb des Heimnetzes. Sie ist keine öffentliche Adresse und macht den ESP32 nicht automatisch aus dem Internet erreichbar. Für den späteren Fernzugriff brauchst du eine zusätzliche, abgesicherte Verbindungslösung.

    Nach der Einrichtung solltest du den Router neu starten und anschließend prüfen, ob der ESP32 dieselbe Adresse erhält. Wiederhole den Test auch nach einem Neustart des Boards.

    Fernzugriff ohne Portweiterleitung mit einem sicheren Tunnel ermöglichen

    Für den weltweiten Zugriff sollte der ESP32 keine Verbindung von außen annehmen. Stattdessen baut ein Gerät im Heimnetz eine ausgehende Verbindung zu einem Vermittlungsdienst auf. Der Dienst stellt eine feste HTTPS-Adresse bereit und leitet nur freigegebene Sitzungen zum lokalen Webserver weiter. Dadurch bleiben Router-Ports geschlossen.

    Für Einsteiger ist ein Overlay-VPN meist die sauberste Lösung. Installiere den VPN-Client nicht auf dem ESP32, sondern auf einem dauerhaft laufenden Gerät im Heimnetz, etwa einem Raspberry Pi, einem Mini-PC oder dem Router selbst. Dieses Gerät erreicht den ESP32 über dessen lokale Adresse. Das Smartphone oder Notebook verbindet sich unterwegs mit demselben privaten Netzwerk.

    Ein Dienst wie Tailscale arbeitet auf Basis von WireGuard und benötigt normalerweise keine manuelle Portweiterleitung. Die Geräte erhalten private VPN-Adressen. In der mobilen App kann der Nutzer anschließend die lokale ESP32-Adresse oder einen vorgeschalteten Proxy aufrufen. Für die vollständige HTML-Oberfläche ist das ideal, weil Browser, CSS, JavaScript und API-Aufrufe unverändert funktionieren.

    Eine andere Variante ist ein Reverse-Tunnel über einen kleinen Rechner im Haus. Der Tunnel verbindet den lokalen HTTP-Dienst mit einem Anbieter, der eine öffentliche Subdomain und HTTPS bereitstellt. Der ESP32 bleibt dabei ein internes Gerät. Diese Architektur eignet sich, wenn die Oberfläche direkt über eine feste Webadresse erreichbar sein soll, ohne dass jedes Endgerät Mitglied eines VPNs werden muss.

    Bei einem solchen Tunnel müssen drei Ebenen getrennt betrachtet werden:

    • Transport: Der Tunnel verbindet den Dienst mit dem Heimnetz.
    • Verschlüsselung: HTTPS schützt die Strecke zwischen Browser und Einstiegspunkt.
    • Identität: Eine Anmeldung entscheidet, wer die Oberfläche öffnen darf.

    Ein bloßes Geheimnis in der URL ist keine ausreichende Anmeldung. URLs landen in Verlauf, Protokollen und manchmal in Analysewerkzeugen. Nutze stattdessen eine Zugangskontrolle mit Benutzerkonto, Einmalcode oder Hardware-Schlüssel. Für reine Gerätekommunikation können kurzlebige Tokens eingesetzt werden. Speichere sie nicht dauerhaft im HTML und übertrage sie nicht ungeschützt per GET-Parameter.

    Der Tunnel sollte nur den benötigten Dienst veröffentlichen. Öffne keine Verwaltungsoberflächen, SSH-Dienste oder Router-Seiten. Begrenze außerdem die erlaubten HTTP-Methoden und setze eine automatische Sitzungssperre. Bei einer Smart-Home-Steuerung ist eine erneute Bestätigung vor gefährlichen Aktionen sinnvoll.

    Ein Tunnel ersetzt keine lokale Sicherheitslogik. Fällt der Tunnelanbieter aus, muss der ESP32 weiterhin sichere Zustände einhalten. Ebenso darf ein kompromittiertes Benutzerkonto nicht automatisch uneingeschränkten Zugriff auf alle Aktoren erhalten. Teile Rechte nach Funktion auf, etwa Lesen, Schalten und Konfiguration.

    Für Einsteiger ergibt sich damit eine klare Auswahl:

    • VPN auf einem Heimgerät: private Erreichbarkeit, keine öffentliche Oberfläche, meist die kleinste Angriffsfläche.
    • Reverse-Tunnel: feste HTTPS-Adresse für die eigene HTML-Seite, aber zusätzliche Konten- und Proxy-Konfiguration.
    • Direkte Cloud-Anbindung: sinnvoll für Daten und Befehle, jedoch nicht automatisch für die unveränderte HTML-Oberfläche.

    Teste den Fernzugriff zuerst über ein Mobilfunknetz. Prüfe dabei Seitenaufrufe, API-Anfragen, Sitzungsablauf und Schaltbefehle. Kontrolliere auch, ob die Oberfläche nach einem Neustart des Heimgeräts wieder erreichbar ist.

    Token, HTTPS und Benutzerzugriff für den Webserver absichern

    Ein erreichbarer Webserver braucht mehr als eine lange URL. Schütze den Zugriff auf drei Ebenen: verschlüsselte Übertragung, nachprüfbare Identität und möglichst geringe Berechtigungen. Ein Token kann dabei helfen, ersetzt aber keine sichere Transportverbindung.

    HTTPS zuerst: Rufe den Dienst ausschließlich über https:// auf. Das Zertifikat muss zur verwendeten Domain passen und darf nicht abgelaufen sein. Ein selbst signiertes Zertifikat erzeugt im Browser Warnungen und ist für einen weltweiten Zugriff nur mit eigener Zertifikatsverwaltung sinnvoll. Bei einem vorgeschalteten Tunnel endet HTTPS meist am Proxy; die Strecke vom Proxy bis zum ESP32 bleibt dann separat zu betrachten. Für sensible Steuerbefehle ist ein verschlüsselter Tunnel oder ein lokales TLS-fähiges Gateway die bessere Variante.

    Auf dem ESP32 selbst ist vollständiges TLS für größere Weboberflächen oft speicherintensiv. Ein vorgeschaltetes Gateway kann TLS, Anmeldung, Sitzungen und Protokollierung übernehmen. Der Mikrocontroller bleibt dadurch einfacher, darf aber niemals ungeschützt aus dem lokalen Netz erreichbar sein. Begrenze den Zugriff des Gateways auf genau die benötigte Zieladresse und den benötigten Port.

    Tokens richtig einsetzen: Verwende zufällig erzeugte Werte mit mindestens 128 Bit Entropie. Ein Token sollte nicht aus Gerätename, Datum oder WLAN-Passwort abgeleitet werden. Übermittle es als Authorization: Bearer-Header oder als sichere Sitzungscookie-Information, nicht als URL-Parameter.

    • Erzeuge für jedes Gerät und jeden Benutzer ein eigenes Token.
    • Lege Ablaufzeiten und eine Möglichkeit zum Widerruf fest.
    • Speichere Tokens nicht im HTML-Quelltext.
    • Übertrage Tokens niemals über unverschlüsseltes HTTP.
    • Protokolliere keine vollständigen Tokens, sondern nur gekürzte Kennungen.

    Ein langlebiges Token im Browser-Local-Storage ist bequem, aber bei einer manipulierten Seite auslesbar. Für eine Steueroberfläche ist eine kurzlebige Sitzung mit HttpOnly-, Secure- und SameSite-Cookie meist robuster. Der Cookie sollte außerdem nur für den erforderlichen Pfad gelten. Bei einer mobilen Anwendung kann ein sicherer Gerätespeicher verwendet werden.

    Benutzerrechte begrenzen: Trenne Leserechte von Steuerrechten. Ein Familienmitglied darf vielleicht Temperaturwerte ansehen, aber keine Alarmanlage deaktivieren. Für Wartung und Firmware-Updates sollte ein eigenes Administratorkonto mit zusätzlicher Bestätigung existieren. Zwei-Faktor-Anmeldung ist besonders sinnvoll, sobald der Dienst öffentlich über eine Domain erreichbar ist.

    Schütze Änderungen gegen sogenannte Cross-Site-Request-Forgery. Bei Cookie-basierten Sitzungen gehören ein CSRF-Token oder eine gleichwertige Origin-Prüfung zu jeder zustandsändernden Anfrage. Zusätzlich sollte der Server die erwartete Methode, den Content-Type und die maximale Nutzlast prüfen. Große oder ungewöhnliche Anfragen werden früh abgewiesen.

    Vermeide aussagekräftige Fehlermeldungen für nicht angemeldete Nutzer. Eine Antwort wie „Benutzer existiert, Passwort falsch“ erleichtert das Erraten von Konten. Nutze außerdem eine Begrenzung für fehlgeschlagene Anmeldungen und eine kurze Verzögerung zwischen Versuchen. Ein vollständiger Login-Versuchszähler gehört auf die Gateway-Seite, nicht in den flüchtigen Speicher des ESP32.

    Teste die Absicherung mit abgelaufenen, manipulierten und widerrufenen Tokens. Prüfe auch den Zugriff ohne Header, mit falscher Methode sowie über eine fremde Origin. Erst wenn jede Route unabhängig ihre Berechtigung kontrolliert, ist die Oberfläche belastbar.

    Push-Benachrichtigungen für Temperatur, Gas und kritische Ereignisse einrichten

    Push-Nachrichten sollten nicht bei jeder kleinen Messschwankung entstehen. Der ESP32 erfasst Werte, bewertet sie lokal und sendet nur ein Ereignis an einen Benachrichtigungsdienst. Dadurch sinkt die Zahl der Meldungen, und ein kurzer Ausfall der Internetverbindung blockiert nicht die lokale Sicherheitslogik.

    Für die Übertragung eignen sich HTTPS- oder MQTT-Verbindungen zu einem eigenen Gateway oder einem IoT-Dienst. Ein kleiner Heimserver kann Ereignisse an E-Mail, eine Messenger-App oder einen mobilen Push-Dienst weiterreichen. Der ESP32 muss dafür keine vollständige Benutzerverwaltung und keine App-Kommunikation beherrschen.

    Trenne Messwert und Ereignis. Eine Temperatur von 25 °C ist zunächst nur ein Messwert. Ein Ereignis entsteht etwa, wenn die Temperatur länger als fünf Minuten über 30 °C liegt, der Wert ungewöhnlich schnell steigt oder ein Sensor ausfällt. Für Gaswarnungen gelten eigene Grenzwerte aus dem Datenblatt des Sensors. Übernimm keine pauschalen Werte aus Internetbeispielen.

    • Lege eine Einschalt- und eine Rücksetzschwelle fest.
    • Verlange bei langsamen Messgrößen mehrere aufeinanderfolgende Messungen.
    • Verhindere Wiederholungen mit einer Sperrzeit oder Ereignis-ID.
    • Sende eine Entwarnung erst, wenn der Wert stabil unter der Rücksetzschwelle liegt.
    • Markiere Sensorfehler als eigenes kritisches Ereignis.

    Eine Hysterese verhindert Meldungsfluten. Bei einer Temperaturwarnung kann die Alarmschwelle bei 30 °C und die Rückkehrschwelle bei 28 °C liegen. Bei einem Gassensor ist zusätzlich eine Aufwärmphase wichtig. Während dieser Zeit sind Messwerte oft nicht belastbar und sollten als „noch nicht bereit“ gekennzeichnet werden.

    Der ESP32 sollte Ereignisse zunächst in einer kleinen Warteschlange speichern. Fällt die Verbindung aus, kann die Nachricht später erneut übertragen werden. Begrenze die Warteschlange und versehe jeden Eintrag mit Zeitstempel, Typ und Messwert. Kritische Meldungen dürfen nicht endlos wiederholt werden; ein bestätigter Alarm braucht einen klaren Status.

    Für sicherheitsrelevante Warnungen sind mindestens zwei Wege sinnvoll, etwa Push und E-Mail oder Push und lokaler Summer. Ein einzelner Cloud-Dienst kann ausfallen, das Smartphone kann stummgeschaltet sein oder keine Verbindung haben. Eine Push-Nachricht ist deshalb eine Ergänzung und kein Ersatz für eine zugelassene Gas- oder Brandwarnanlage.

    Verwende für die Nachricht nur die nötigen Daten: Ereignistyp, Zeitpunkt, Messwert und Gerätekennung. Übermittle keine WLAN-Zugangsdaten und keine vollständigen Zugangstokens. API-Schlüssel gehören in eine geschützte Konfiguration und sollten bei Verdacht sofort widerrufen werden.

    Teste die gesamte Kette mit künstlichen Messwerten:

    • Normale Messung ohne Benachrichtigung
    • Grenzwertüberschreitung mit genau einer Warnung
    • anhaltender Alarm ohne Nachrichtenflut
    • Rückkehr in den Normalbereich mit Entwarnung
    • unterbrochene Internetverbindung mit späterer Zustellung
    • Neustart während eines aktiven Alarms

    Dokumentiere außerdem, wann ein Alarm ausgelöst, bestätigt und beendet wird. Für die eigentliche Hardware-Warnung bleiben lokale, vom Netzwerk unabhängige Funktionen entscheidend.

    Fazit: ESP32-Webserver sicher weltweit erreichbar machen

    Ein ESP32-Webserver wird weltweit erreichbar, wenn der Zugriff sauber in mehrere Schichten geteilt wird: lokale Geräteanbindung, sicherer Transport, Benutzerkonto und Ereignisübermittlung. Die eigene HTML-Oberfläche bleibt dabei erhalten und wird nicht durch ein starres Cloud-Dashboard ersetzt.

    Für ein Einsteigerprojekt ist ein VPN auf einem dauerhaft laufenden Heimgerät meist der vernünftigste Abschluss. Der ESP32 bleibt im privaten Netz, während berechtigte Geräte über das VPN auf die vollständige Oberfläche zugreifen. Wer eine direkt aufrufbare HTTPS-Adresse benötigt, kann stattdessen einen Reverse-Tunnel mit vorgeschaltetem Gateway verwenden. Dieses Gateway übernimmt Anmeldung, TLS und Weiterleitung.

    Cloud-Dienste sind vor allem dann sinnvoll, wenn Messwerte, Befehle und Benachrichtigungen unabhängig von der HTML-Seite verarbeitet werden sollen. Eine direkte Geräteanbindung über MQTT oder HTTPS kann Daten an einen eigenen Dienst senden. Die Oberfläche ruft diese Daten anschließend über eine kontrollierte API ab. So bleiben Darstellung und Datenhaltung getrennt.

    Die wichtigste Architekturentscheidung lautet daher:

    • Komplette eigene Oberfläche: VPN oder Reverse-Tunnel verwenden.
    • Nur Messwerte und Schaltbefehle: Cloud-API oder MQTT-Gateway prüfen.
    • Kritische Warnungen: lokale Alarmfunktion mit einem unabhängigen Benachrichtigungsweg kombinieren.

    Vor dem produktiven Betrieb gehört eine kurze Abnahme dazu. Prüfe Firmware-Updates, Geräte-Neustart, Internetausfall, abgelaufene Sitzungen, widerrufene Zugänge und Wiederherstellung nach Stromausfall. Halte außerdem fest, welche Komponente welche Aufgabe übernimmt. Dann bleibt nachvollziehbar, ob ein Fehler im ESP32, im Gateway, im Tunnel oder beim Benachrichtigungsdienst liegt.

    Aktualisiere das Boardpaket, Bibliotheken und Gateway regelmäßig. Sichere die Konfiguration verschlüsselt oder zumindest mit restriktiven Dateirechten. Ein Ersatzgerät für das Gateway kann sinnvoll sein, wenn der Fernzugriff im Alltag wichtig ist. Für Sicherheitsfunktionen gilt jedoch: Eine Internetverbindung darf niemals die einzige Schutzebene bilden.

    Ein kleiner, klar abgegrenzter Webserver, ein abgesicherter Zugang und lokal funktionierende Notfallregeln bieten oft mehr Verlässlichkeit als eine überladene IoT-Plattform. Damit bleibt die individuelle HTML-Oberfläche erhalten und der ESP32 wird trotzdem weltweit erreichbar, ohne offene Router-Ports als Einladung ins Heimnetz.


    Häufige Fragen zum ESP32-Webserver

    Wie richte ich einen Webserver auf dem ESP32 ein?

    Installiere zunächst die Arduino IDE und das ESP32-Boardpaket von Espressif Systems. Hinterlege anschließend die WLAN-Zugangsdaten im Sketch, stelle mit WiFi.h eine Verbindung her und initialisiere mit WebServer server(80) den HTTP-Server. Nach der Registrierung einer Route und dem Aufruf von server.handleClient() in loop() kann der ESP32 Webseiten ausliefern.

    Wie wird eine eigene HTML-Oberfläche auf dem ESP32 gespeichert?

    Eine eigene HTML-Seite kann als Raw-String-Literal im Sketch gespeichert und über eine Route wie / ausgeliefert werden. Die Kennzeichnung PROGMEM legt den Inhalt im Programmspeicher ab und schont den Arbeitsspeicher. Für CSS und JavaScript können separate Routen mit den passenden MIME-Typen eingerichtet werden.

    Wie bindet der ESP32 Sensorwerte und Schaltbefehle in die Webseite ein?

    Sensorwerte werden am besten über getrennte API-Routen wie /api/status oder /api/temperature als JSON bereitgestellt. Schaltbefehle sollten ausschließlich über geprüfte POST-Anfragen verarbeitet werden. Der ESP32 muss Eingaben, erlaubte Zustände und Sicherheitsbedingungen serverseitig kontrollieren, bevor ein Aktor geschaltet wird.

    Wie kann der ESP32-Webserver aus dem Internet erreichbar sein?

    Für einen sicheren Fernzugriff sollte der ESP32 nicht direkt über eine Portweiterleitung veröffentlicht werden. Stattdessen kann ein VPN auf einem dauerhaft laufenden Gerät im Heimnetz oder ein Reverse-Tunnel mit vorgeschaltetem Gateway verwendet werden. Das Gateway übernimmt idealerweise HTTPS, Benutzeranmeldung und die Weiterleitung zur lokalen ESP32-Adresse.

    Wie lassen sich Temperatur- und Gaswarnungen als Push-Nachricht versenden?

    Der ESP32 sollte Messwerte lokal bewerten und nur bei definierten Ereignissen eine Nachricht an einen HTTPS-, MQTT- oder Benachrichtigungsdienst senden. Grenzwerte, Hysterese, Sperrzeiten und Entwarnungen verhindern eine Nachrichtenflut. Bei Gas- und Brandwarnungen muss zusätzlich eine lokale, netzwerkunabhängige Alarmfunktion vorhanden sein, da Push-Nachrichten allein keine zuverlässige Sicherheitsmaßnahme darstellen.

    Hinweis zum Einsatz von Künstlicher Intelligenz auf dieser Webseite

    Ihre Meinung zu diesem Artikel

    Bitte geben Sie eine gültige E-Mail-Adresse ein.
    Bitte geben Sie einen Kommentar ein.
    Der Hinweis auf die DHCP-Reservierung im Router ist für mich besonders hilfreich, das wird oft mit einer fest im Sketch eingetragenen IP verwechselt. Gut finde ich auch, dass beim Fernzugriff klar von Portweiterleitungen abgeraten wird – gerade bei kleinen Bastelprojekten denkt man sonst schnell, „wird schon passen“.
    Die Sicherheits- und Fernzugriffsteile fand ich diesmal deutlich spannender als die reine Einrichtung. Gerade der Hinweis, den ESP32 nicht direkt ins Internet zu hängen, sondern VPN oder einen Reverse-Tunnel über ein separates Gerät zu nutzen, ist Gold wert. Viele Anleitungen hören ja bei „Port 80 im Router weiterleiten“ auf und wundern sich dann, wenn irgendwann fremde Zugriffe im Log stehen.

    Auch die Trennung zwischen VPN und Reverse-Tunnel ist gut erklärt. Für mich wäre ein VPN auf dem Raspberry Pi wahrscheinlich die angenehmere Lösung, weil dann keine öffentliche Webseite nötig ist. Wer aber tatsächlich von unterwegs eine feste Adresse für die eigene Oberfläche braucht, kommt mit dem vorgeschalteten Gateway vermutlich besser klar. Wichtig ist nur, dass man nicht aus Bequemlichkeit gleich noch SSH, Router-Oberfläche und irgendwelche Adminseiten mit veröffentlicht.

    Gut finde ich außerdem, dass Tokens nicht als URL-Parameter empfohlen werden. Das wird erstaunlich oft übersehen, obwohl solche Links schnell im Browserverlauf oder in Logs landen. Die Hinweise zu ablaufenden Tokens, getrennten Benutzerrechten und CSRF-Schutz gehen für ein ESP32-Tutorial schon erfreulich weit. Gerade bei Relais oder einer Heizung sollte ein eingeloggter Nutzer nicht automatisch alles schalten dürfen.

    Bei den Push-Benachrichtigungen gefällt mir die Unterscheidung zwischen Messwert und Ereignis. Wenn bei jeder kleinen Temperaturschwankung eine Meldung kommt, stellt man die Benachrichtigungen nach zwei Tagen sowieso stumm. Hysterese, Sperrzeit und eine eigene Entwarnung sind da viel sinnvoller. Und der Satz, dass eine Push-Nachricht keine zugelassene Gas- oder Brandwarnanlage ersetzt, sollte wirklich jeder lesen, der mit solchen Sensoren herumprobiert.

    Ein kleiner Punkt, den ich aus eigener Erfahrung noch ergänzen würde: Nach einem Stromausfall sollte nicht nur der Ausgang in einen sicheren Zustand gehen, sondern auch der bisherige Alarmzustand nachvollziehbar wiederhergestellt werden. Sonst weiß man nach dem Neustart womöglich nicht, ob gerade ein echter Alarm aktiv war oder nur der Sensor beim Booten kurz ungültige Werte geliefert hat. Insgesamt aber eine sehr solide Anleitung, besonders weil sie nicht beim blinkenden LED-Demo stehen bleibt, sondern die ganzen unangenehmen Praxisfälle mitdenkt.
    Die Router-Reservierung fand ich auch erstmahl am verstänlichsten, weil man da nicht gleich im Sketch mit festen IPs rumfummeln muss. Bei mir war aber eher das USB Kabel der übeltäter, sah aus wie ein normales Ladekabel und es ging einfach garnichts beim hochladen, bis ich ein anderes genommen hab. Diese CP210x und CH34x Treiber sache ist auch so ein kleiner Stolperstein, davon hab ich vorher noch nie gehöhrt.

    Gut finde ich das mit dem begrenzten WLAN Verbindungsversuch. Endlos warten klingt zwar erstmal simpel, aber wenn der Router aus ist hängt der ESP32 dann wohl ewig fest und der Webserver macht nix. Mit millis statt delay muss ich mich noch genauer beschäftigen, da steig ich ehrlich gesagt noch nicht ganz durch, aber das scheint bei mehreren Anfragen schon wichtig zu sein.

    Die Trennung von GET und POST bei Schaltbefehlen leuchtet mir ein, auch wenn ich vorher einfach alles über einen Link gemacht hätte. Gerade bei Relais ist active-low bestimmt eine fiese falle, weil an und aus dann genau andersrum sind als man denkt. Das sollte man wirklich mit einer kleinen LED oder Testlast ausprobieren und nicht direkt an eine Pumpe anschliesen.

    Beim Thema HTML im ESP32 war ich überrascht, dass man da komplette Seiten reinpacken kann. Mit diesen Raw-Strings sieht es deutlich lesbarer aus als lauter Anführungszeichen und Backslashs. Ich frag mich aber wie schnell der Speicher bei CSS und JavaScript voll wird, wenn die Seite etwas moderner werden soll. Base64 Bilder würde ich jetzt nach dem lesen jedenfalls auch lieber lassen, die werden bestimmt riesig.

    Die Hinweise zu Sensorfehlern und alten Messwerten sind wichtig, weil ein Wert von vor 10 Minuten ja nicht wirklich aktuell ist, auch wenn er im Browser noch normal aussieht. Bei Gas oder Rauch sollte man aber wirklich nicht nur auf so einen Bastel ESP vertrauen, da kann ein falscher Messwert schlimmer sein als gar keiner. Ein lokaler Summer zusätzlich zur Push Nachricht scheint da sinvoller.

    Was mir etwas kompliziert vorkommt ist der weltweite Zugriff mit VPN, Gateway, Tunnel, Token und HTTPS. Ich dachte früher immer man macht einfach einen Port im Router auf und fertig, aber genau das soll man ja offenbar nicht machen, und wahrscheinlich zurecht. Tailscale auf einem Raspberry klingt noch am ehesten machbar, wobei dann natürlich der Raspberry dauerhaft laufen muss und auch wieder updates braucht. Irgendwie wird aus dem kleinen Webserver dann doch ein ziemlich großes Projekt.

    Die Stelle mit dem Token in der URL fand ich neu, da denkt man garnicht dran das sowas im Browserverlauf oder in Logs landen kann. Für meine einfache Temperaturanzeige wäre das vieleicht übertrieben, aber sobald man damit Türen, Heizung oder andere Geräte steuert sollte man nicht einfach irgendeinen geheimen Link verwenden. Insgesamt viele Infos, teilweise etwas viel auf einmal, aber als Überblick für die ganzen Stolperfallen echt hilfreich.
    Die Hinweise zum Testen mit zwei Geräten und über das Mobilfunknetz finde ich besonders praxisnah. Erst da merkt man oft, ob wirklich alles funktioniert oder nur der eigene Rechner noch etwas aus dem Cache anzeigt. Gut ist auch der Hinweis, Debug-Ausgaben nach der Fehlersuche wieder zu entfernen – sonst landen am Ende doch noch sensible Infos im seriellen Monitor.
    Das mit dem Gastnetz und den zwei Geräten gleichzeitig testen war mir neu, ich dachte WLAN ist WLAN und fertig damit lol

    Zusammenfassung des Artikels

    Der Artikel erklärt die Einrichtung von ESP32, Arduino-IDE und WLAN sowie den Aufbau eines einfachen Webservers mit HTML-Oberfläche.

    Eigene Projekte einfach umsetzen
    Hosten Sie Ihr Projekt einfach selbst auf einem NAS mit passenden Festplatten!
    Jetzt mehr erfahren
    Anzeige

    Nützliche Tipps zum Thema:

    1. Verwende ein USB-Datenkabel und wähle in der Arduino IDE das passende ESP32-Boardprofil sowie den richtigen seriellen Port aus, um typische Upload-Fehler zu vermeiden.
    2. Lege WLAN-SSID und Passwort in einer separaten secrets.h-Datei ab und schließe diese Datei über .gitignore von öffentlichen Repositories aus.
    3. Rufe in loop() regelmäßig server.handleClient() auf und vermeide lange delay()-Pausen, damit der Webserver auch bei mehreren Anfragen reaktionsfähig bleibt.
    4. Trenne Lese- und Steuerfunktionen: Nutze GET für Status- und Sensordaten sowie POST für Schaltbefehle und prüfe jede Eingabe direkt auf dem ESP32.
    5. Veröffentliche den ESP32 nicht per direkter Portweiterleitung im Internet. Nutze für den Fernzugriff besser ein VPN oder einen abgesicherten Reverse-Tunnel mit HTTPS und Benutzeranmeldung.

    Anbieter im Vergleich (Vergleichstabelle)

    Verschiedene Pakete
    Günstigstes Monatspaket 5,99 €
    Serverstandort Deutschland
    Sicherheitsfeatures
    Guter Support
    Verschiedene Pakete
    Günstigstes Monatspaket 1,90 €
    Serverstandort Deutschland
    Sicherheitsfeatures
    Guter Support
    Verschiedene Pakete
    Günstigstes Monatspaket 6,95€
    Serverstandort Deutschland
    Sicherheitsfeatures
    Guter Support
    Verschiedene Pakete
    Günstigstes Monatspaket 4,40 €
    Serverstandort Deutschland Unter Anderem
    Sicherheitsfeatures
    Guter Support
    Verschiedene Pakete
    Günstigstes Monatspaket 4,90 €
    Serverstandort Deutschland Unter Anderem
    Sicherheitsfeatures
    Guter Support
      dogadoKI-generiert ZAP-HostingKI-generiert webgoKI-generiert easynameKI-generiert checkdomainKI-generiert
      dogado ZAP-Hosting webgo easyname checkdomain
    Verschiedene Pakete
    Günstigstes Monatspaket 5,99 € 1,90 € 6,95€ 4,40 € 4,90 €
    Serverstandort Deutschland Unter Anderem Unter Anderem
    Sicherheitsfeatures
    Guter Support
      » ZUR WEBSEITE » ZUR WEBSEITE » ZUR WEBSEITE » ZUR WEBSEITE » ZUR WEBSEITE
    Tabelle horizontal scrollen für mehr Anbieter
    Counter