ESP32 REST-API-Server mit JSON - Komplettes Tutorial
WebServerJson-Beispiel - REST-API-Server
Übersicht
Dieses Beispiel zeigt, wie man einen REST-API-Server auf dem ESP32 erstellt, der JSON-Anfragen und -Antworten verarbeitet, ideal für moderne Webanwendungen und Backends mobiler Apps.
Funktionen
- REST-API-Endpunkte mit der Verarbeitung von JSON-Anfragen und JSON-Antworten
- POST-Anfrageverarbeitung mit dem Parsen von JSON-Daten
- GET-Endpunkte zur Datenabfrage
- Professionelle JSON-Antworten mit passenden HTTP-Statuscodes
- Fehlerbehandlung mit passenden JSON-Fehlernachrichten
- CORS-Unterstützung für Cross-Origin-Anfragen
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 Starter-Kit (ESP32 enthalten) | |
| 1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Bibliotheksinstallation
Folgen Sie diesen Anweisungen Schritt für Schritt:
- Wenn dies das erste Mal ist, dass Sie den ESP32 verwenden, sehen Sie sich das Tutorial zur Einrichtung der ESP32-Umgebung in der Arduino IDE an: Einrichtung der ESP32-Umgebung in der Arduino IDE
- Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
- Starten Sie die Arduino IDE auf Ihrem Computer.
- Wählen Sie das passende ESP32-Board (z. B. ESP32) und den COM-Port aus.
- Öffnen Sie den Bibliotheksverwalter, indem Sie auf das Symbol Bibliotheksverwalter auf der linken Seite der Arduino IDE klicken.
- Suchen Sie nach Web Server for ESP32 und finden Sie die mWebSockets von DIYables.
- Klicken Sie auf die Schaltfläche Installieren, um die mWebSockets-Bibliothek hinzuzufügen.

Webserver JSON-Beispiel
- In der Arduino IDE, gehen Sie zu Datei Beispiele Webserver für ESP32 WebServerJson Beispiel, um den Beispielcode zu öffnen
API-Endpunkte
GET /api/daten
Gibt eine Erfolgsmeldung mit Zeitstempel im JSON-Format zurück.
Antwort:
Der Zeitstempelwert gibt Millisekunden seit dem Start des ESP32 an (aus der Funktion millis()).
POST /api/daten
Nimmt JSON-Daten entgegen und gibt den empfangenen Schlüsselwert zurück.
Anfrage:
Antwort:
Installationsanweisungen
1. Netzwerkkonfiguration
Bearbeiten Sie die WLAN-Zugangsdaten in der WebServerJson.ino-Datei:
2. Code hochladen und Ausgabe überwachen
- Verbinden Sie Ihren ESP32 mit Ihrem Computer
- Wählen Sie das richtige Board und den richtigen Port in der Arduino IDE aus
- Laden Sie die WebServerJson.ino-Skizze hoch
- Öffnen Sie den Serial Monitor (9600 Baud)
- Warten Sie auf die WiFi-Verbindung
- Notieren Sie die angezeigte IP-Adresse
- Wenn Sie die IP-Adresse im Serial Monitor nicht sehen, drücken Sie die Reset-Taste am ESP32-Board
Verwendung
Testen mit cURL
Ersetze your-esp32-ip durch die tatsächliche IP-Adresse, die in Ihrem seriellen Monitor angezeigt wird.
Test-GET-Anfrage
Erwartete Ausgabe:
Der Zeitstempel zeigt Millisekunden seit dem Start des ESP32 an.
Test-POST-Anfrage mit JSON-Daten
Erwartete Ausgabe:
Test-POST-Anfrage mit unterschiedlichen Daten
Erwartete Ausgabe:
Test: Ungültiges JSON (Fehlerantwort)
Erwartete Ausgabe:
Test fehlender JSON-Body (Fehlerantwort)
Erwartete Ausgabe:
Test Nicht unterstützte Methode (Fehlerantwort)
Erwartete Ausgabe:
Test eines nicht vorhandenen Endpunkts (404-Fehler)
Erwartete Ausgabe:
Testen mit Postman
Test GET-Anfrage
- Erstelle eine neue GET-Anfrage
- Setze die URL auf http://your-esp32-ip/api/data
- Sende die Anfrage
- Überprüfe, ob die Antwort Status, Nachricht und Zeitstempel enthält
Test-POST-Anfrage
- Erstelle eine neue POST-Anfrage
- Setze die URL auf http://your-esp32-ip/api/data fest
- Füge Header hinzu: Content-Type: application/json
- Füge den JSON-Body hinzu: {"key": "test_value"}
- Sende die Anfrage
- Überprüfe, ob die Antwort den empfangenen Schlüsselwert anzeigt
Fehlerantworten testen
Testen Sie die Fehlerbehandlung, indem Sie ungültige Anfragen senden, wie im Beispielcode gezeigt:
Fehlende JSON-Daten
{"status": "error","message": "Keine JSON-Daten empfangen"}
Ungültiges JSON-Format
Erwartet: {"status": "Fehler","message": "Ungültiges JSON"}
Fehlendes Schlüsselfeld
Erwartet: Der Schlüssel wird standardmäßig auf "none" gesetzt, wie im Beispielcode: doc["key"] | "none"
Nicht unterstützte HTTP-Methode
{"status": "error","message": "Methode nicht erlaubt"}
Code-Erklärung
Routen-Konfiguration
Funktionssignatur des Handlers
Alle Handler-Funktionen müssen diese Signatur befolgen:
Methodenerkennung und JSON-Verarbeitung
Integrationsbeispiele
JavaScript-Frontend
Python-Client
LED steuern
Status abrufen
Verwendung
Fehlerbehandlung
HTTP-Statuscodes
- 200: Erfolg
- 400: Ungültige Anfrage (ungültiges JSON, fehlende Parameter)
- 404: Endpunkt nicht gefunden
- 405: Methode nicht erlaubt
- 500: Interner Serverfehler
Format der Fehlermeldung
Basierend auf dem tatsächlichen Beispielcode geben verschiedene Fehler spezifische Meldungen zurück:
Fehler: Fehlende JSON-Daten
Zurückgegeben, wenn: POST-Anfrage wird ohne JSON-Body gesendet
Ungültiger JSON-Formatfehler
Zurückgegeben, wenn: JSON-Daten können nicht analysiert werden (Syntaxfehler)
Fehler: Methode nicht erlaubt
Wird zurückgegeben, wenn: Nicht unterstützte HTTP-Methoden (PUT, DELETE, PATCH usw.) verwendet werden.
Fehler 404 – Seite nicht gefunden
Zurückgegeben, wenn: Zugriff auf nicht vorhandene Endpunkte
Anpassung
Neue Handler-Funktionen hinzufügen
Vorlagenbasierte JSON-Antworten
Das Beispiel verwendet Template-Strings für eine konsistente JSON-Formatierung:
Fehlerbehebung
Häufige Probleme
Verbindungsprobleme
Wenn Sie sich nicht mit den API-Endpunkten verbinden können:
- Vergewissern Sie sich, dass Ihr ESP32 mit WiFi verbunden ist (prüfen Sie den seriellen Monitor).
- Stellen Sie sicher, dass Ihr Client und der ESP32 im selben Netzwerk sind.
- Überprüfen Sie, ob die IP-Adresse korrekt ist.
- Vergewissern Sie sich, dass der ESP32 nicht zurückgesetzt wurde (was die IP-Adresse ändern würde).
JSON-Parsing-Fehler
Wenn Sie auf „Invalid JSON“-Antworten stoßen:
- Stellen Sie sicher, dass der Content-Type-Header auf application/json gesetzt ist
- Überprüfen Sie, ob Ihre JSON-Syntax gültig ist
- Überprüfen Sie, dass Sonderzeichen ordnungsgemäß maskiert sind
- Stellen Sie sicher, dass die JSON-Nutzlast nicht zu groß ist (aktuelles Limit: 200 Bytes)
POST-Anfrageprobleme
Wenn POST-Anfragen „Keine JSON-Daten empfangen“ zurückgeben:
- Stellen Sie sicher, dass die Anfrage einen JSON-Body enthält
- Prüfen Sie, ob der Content-Length-Header korrekt gesetzt ist
- Stellen Sie sicher, dass die HTTP-Methode tatsächlich POST ist
- Testen Sie es mit einem einfachen JSON wie {"key": "test"}
Gedächtnisprobleme
Wenn der ESP32 nicht mehr reagiert:
- Überwache den Speicherverbrauch - das StaticJsonDocument verwendet 200 Byte
- Reduziere bei Bedarf die Größe der JSON_RESPONSE-Vorlage
- Erwäge die Verwendung von DynamicJsonDocument für Daten variabler Größe
- Überprüfe Speicherlecks in benutzerdefinierten Handler-Funktionen
Tipps zur Leistung
JSON-Verarbeitung optimieren
Effiziente Antwortverarbeitung
Nächste Schritte
- Erkunde WebServerQueryStrings.ino zur Verarbeitung von URL-Parametern
- Probiere WebServerWithWebSocket.ino für die Echtzeit-Kommunikation
- Erwäge die Integration mit Datenbanken oder Cloud-Diensten