In diesem DIYTechAdventure zeige ich dir, wie du mit einer NodeMCU über WLAN einen HTTP-Request durchführen und die erhaltenen Daten in eine Datenbank auf einem Webserver schreiben kannst. Die NodeMCU ist ein Mikrocontroller auf Basis des ESP8266, der sich ideal für IoT-Projekte eignet.
Hierbei sollen uns die Beiträge ESP8266 ins WLAN bringen. Lies gerne nach, wenn du unsicher bist.
Einführung in HTTP-Requests
HTTP (Hypertext Transfer Protocol) ist das Protokoll, das den Austausch von Daten über das Internet ermöglicht. Es bildet die Grundlage für die Kommunikation zwischen Webbrowsern und Webservern.
HTTP-Requests bestehen aus verschiedenen Komponenten, darunter:
- Request-Line: Dies ist die erste Zeile eines HTTP-Requests und enthält die Methode (GET, POST, PUT, DELETE, etc.), die URL und die HTTP-Version.
- Headers: Diese Zeilen liefern zusätzliche Informationen über den Request, wie z.B. den User-Agent, Content-Type und viele mehr.
- Body: Der Body enthält die Daten, die an den Server gesendet werden sollen, insbesondere bei POST-Requests.
HTTP-Methoden
- GET: Fordert Daten von einem Server an. Die Daten werden in der URL übermittelt.
- POST: Sendet Daten an einen Server, oft um neue Ressourcen zu erstellen. Die Daten werden im Body des Requests übermittelt.
- PUT: Aktualisiert bestehende Ressourcen mit den gesendeten Daten.
- DELETE: Löscht eine Ressource auf dem Server.
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: text/html
Jetzt, da du ein grundlegendes Verständnis von HTTP-Requests hast, lass uns sehen, wie man diese mit einer NodeMCU durchführt und Daten in eine Datenbank auf einem Webserver schreibt.
Voraussetzungen
- Eine NodeMCU (ESP8266) -> bekommst du günstig bei AzDelivery oder Aliexpress
- Zugang zu einem WLAN-Netzwerk
- Ein Webserver mit einer Datenbank (z.B. MySQL)
- Grundkenntnisse in Arduino-Programmierung und SQL
Schritt 1: NodeMCU einrichten
- Arduino IDE installieren:
Stelle sicher, dass du die Arduino IDE auf deinem Computer installiert hast. Füge das ESP8266-Board hinzu, indem du in den Voreinstellungen der Arduino IDE die URL http://arduino.esp8266.com/stable/package_esp8266com_index.json unter „Zusätzliche Boardverwalter-URLs“ hinzufügst und dann unter „Werkzeuge“ -> „Board“ -> „Boardverwaltung“ nachesp8266
suchst und installierst.
2. Bibliotheken installieren:
Du benötigst die Bibliotheken ESP8266WiFi
und ESP8266HTTPClient
. Diese kannst du über den Bibliotheksverwalter in der Arduino IDE installieren.
Schritt 2: Verbindung zum WLAN herstellen
Erstelle ein neues Sketch und füge folgenden Code hinzu, um die NodeMCU mit deinem WLAN zu verbinden:
// Dieser Code wird im nächsten Schritt auch verwendet, musst du nicht kopieren #include <ESP8266WiFi.h> const char* ssid = "DEIN_SSID"; const char* password = "DEIN_PASSWORT"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi verbunden"); Serial.print("IP-Adresse: "); Serial.println(WiFi.localIP()); } void loop() { // Hier wird nichts benötigt }
// diese beiden Konstanten nehmen dein WLAN-Namen und das Passwort auf
const char* ssid = „DEIN_SSID“;
const char* password = „DEIN_PASSWORT“;
// Serielle Schnittstelle zur Ausgabe der Printanweisungen
// WLAN initialisieren
Serial.begin(115200);
WiFi.begin(ssid, password);
//Schleife durchlaufen -> Solange WiFi.status auf nicht connectet steht -> 500 ms warten -> einen Punkt ausgeben, als Fortschrittsanzeige
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(„.“);
Danach wird mit serial.print die beim Verbindungsaufbau vom WLAN Router erhaltene IP Adresse ausgegeben.
Schritt 3: HTTP-POST-Request senden
Jetzt fügen wir den Code hinzu, um einen HTTP-POST-Request zu senden und die Daten an den Webserver zu übermitteln:
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> const char* ssid = "Dein WLAN Name"; const char* password = "Dein WLAN Passwort"; const char* serverName = "http://Dein Server/empfangsscript.php"; // URL zu deinem PHP-Skript void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi verbunden"); Serial.print("IP-Adresse: "); Serial.println(WiFi.localIP()); if (WiFi.status() == WL_CONNECTED) { WiFiClient client; // WiFiClient-Objekt erstellen HTTPClient http; http.begin(client, serverName); // Übergibt den WiFiClient an HTTPClient http.addHeader("Content-Type", "application/x-www-form-urlencoded"); String postData = "name=NodeMCU&wert=123"; // Beispiel-Daten int httpResponseCode = http.POST(postData); if (httpResponseCode > 0) { String response = http.getString(); Serial.println(httpResponseCode); Serial.println(response); } else { Serial.print("Error on sending POST: "); Serial.println(httpResponseCode); } http.end(); } } void loop() { // Hier wird nichts benötigt }
In diesem Code:
- WiFiClient client; erstellt eine Instanz der WiFiClient-Klasse.
- HTTPClient http; erstellt eine Instanz der HTTPClient-Klasse.
- http.begin(client, serverName); initialisiert die Verbindung zum Server mit der angegebenen URL.
- http.addHeader(„Content-Type“, „application/x-www-form-urlencoded“); fügt einen Header hinzu, der den Content-Type des Requests spezifiziert.
- http.POST(postData); sendet einen POST-Request mit den angegebenen Daten an den Server und gibt den HTTP-Response-Code zurück.
- Danach werden die Rückmeldungen vom Server ausgegeben
- http.end(); beendet den aufgebauten Client
Schritt 4: PHP-Skript auf dem Server
Erstelle ein PHP-Skript auf deinem Webserver (z.B. empfangsscript.php), das die empfangenen Daten in die Datenbank schreibt:
<?php // Logindaten für die Datenbankverbindung bereitstellen $servername = "localhost"; $username = "dein_db_username"; $password = "dein_db_passwort"; $dbname = "deine_db_name"; // Verbindung zur Datenbank herstellen $conn = new mysqli($servername, $username, $password, $dbname); // Verbindung überprüfen if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Daten aus dem POST-Request auslesen $name = $_POST['name']; $wert = $_POST['wert']; // SQL-Abfrage zum Einfügen der Daten $sql = "INSERT INTO deine_tabelle (name, wert) VALUES ('$name', '$wert')"; // Prüfen ob die Daten in die Datenbank geschrieben wurden if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } // Datenbankverbindung wieder schließen $conn->close(); ?>
Oben genannte Skripte zeigen dir die grundsätzliche Vorgehensweise, wie Daten an ein Webserver gesendet werden.
Aber nun zur Ausgabe der Printanweisungen des Skriptes:
18:57:46.487 -> WiFi verbunden
18:57:46.487 -> IP-Adresse: xxx.xxx.xx.xx
18:57:46.583 -> 200
18:57:46.583 -> New record created successfully
Die Datensätze sind anstandslos in die Datenbank übernommen worden.
Ich würde sagen – Ziel erreicht!
In diesem DIYTechAdventure hast du grundsätzlich gelernt, wie du mit einer NodeMCU über WLAN einen HTTP-Request senden und die Daten in eine Datenbank auf einem Webserver speichern kannst. Dieses Wissen bildet die Grundlage für viele spannende IoT-Projekte, bei denen Daten aus der realen Welt erfasst und verarbeitet werden.
Im nächsten Adventure zeige ich dir konkret, wie du Temperaturdaten sendest. In weiteren Beiträgen zeige ich dir auch, wie du vorgehst, wenn du keinen Webserver hast.
Viel Erfolg bei deinen Projekten und happy coding!