ESP8266 - HTTP-Anfrage

Dieses Tutorial zeigt Ihnen, wie Sie den ESP8266 verwenden, um HTTP-Anfragen an einen Webserver, eine API oder einen Webdienst zu senden. Genauer gesagt erfahren Sie Folgendes:

ESP8266 NodeMCU Web-Client

Erforderliche Hardware

1×ESP8266 NodeMCU
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Breadboard
1×Verbindungskabel
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Grundlegende Konzepte von Web-Client und Web-Server

Es gibt einige grundlegende Konzepte des Webs, wie z. B.: Webadresse (URL), Hostname, Pfadname, Abfragezeichenfolge, HTTP-Anfrage... Sie können dazu ausführlich in HTTP-Tutorial nachlesen.

So erstellen Sie eine HTTP-Anfrage

  • Bibliotheken einbinden
#include <WiFi.h> #include <HTTPClient.h>
  • Deklarieren Sie WLAN-SSID und Passwort
const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // ÄNDERE ES const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // ÄNDERE ES
  • Deklariere Hostname, Pfadname, Abfragezeichenfolge
String HOST_NAME = "http://YOUR_DOMAIN.com"; // ÄNDERN SIE ES String PATH_NAME = "/products/arduino"; // ÄNDERN SIE ES //String PATH_NAME = "/products/arduino.php"; // ÄNDERN SIE ES String queryString = "temperature=26&humidity=70"; // OPTIONAL
  • Deklariere ein HTTP-Client-Objekt
HTTPClient http;
  • Wenn eine Verbindung zum Server besteht und eine HTTP-Anfrage gesendet wird. Zum Beispiel HTTP GET
http.begin(HOST_NAME + PATH_NAME); //Hypertext-Uebertragungsprotokoll int httpCode = http.GET();
  • Lies die Antwortdaten vom Webserver
// httpCode wird im Fehlerfall negativ sein if (httpCode > 0) { // Datei auf dem Server gefunden if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP-Header wurde gesendet und der Server-Antwort-Header wurde verarbeitet Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end();

Wie man Daten in eine HTTP-Anfrage einschließt

Wir können Daten an den Webserver senden, indem wir Daten in die HTTP-Anfrage aufnehmen. Das Datenformat hängt von der HTTP-Anfragemethode ab:

  • Für HTTP GET-Anfrage
    • Daten können nur in der Abfragezeichenfolge des Pfads gesendet werden.
  • HTTP POST-Anfrage
    • Daten können NICHT NUR in der Abfragezeichenfolge gesendet werden, SONDERN AUCH in jedem anderen Format wie JSON, XML, Bilddateien ...
    • Daten werden im Body der HTTP-Anfrage platziert.

    Lass uns lernen, wie man Daten im Abfragezeichenfolgenformat sowohl für HTTP GET als auch für POST sendet

    • Erstelle eine Abfragezeichenfolge.
    int temp = // vom Sensor int humi = // vom Sensor String queryString = String("temperature=") + String(temp) + String("&humidity=") + String(humi);
    • HTTP GET: füge Abfragezeichenfolge zum Pfad hinzu
    http.begin(HOST_NAME + PATH_NAME + "?" + queryString); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.GET();
    • HTTP POST: lege Abfragezeichenfolge in den HTTP-Body
    http.begin(HOST_NAME + PATH_NAME); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST(queryString);
    • Sowohl bei GET als auch bei POST die Antwortdaten vom Webserver lesen.
    // httpCode wird bei Fehlern negativ sein if (httpCode > 0) { // Datei auf dem Server gefunden if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // Der HTTP-Header wurde gesendet und der Server-Antwort-Header wurde verarbeitet Serial.printf("[HTTP] GET/POST... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET/POST... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end();

Vollständiger ESP8266-Code zum Senden einer HTTP-Anfrage

Der folgende Text ist der vollständige ESP8266-Code zur Durchführung von HTTP-GET- und HTTP-POST-Anfragen.

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-http-request */ #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE IT const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT String PATH_NAME = "/products/arduino.php"; // CHANGE IT WiFiClient client; // Create a WiFiClient object HTTPClient http; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); http.begin(client, HOST_NAME + PATH_NAME); //HTTP int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // file found at server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been sent and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { // Your loop code here (if needed) }

Vollständiger ESP8266-Code zum Senden einer HTTP-GET-Anfrage mit Daten

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-http-request */ #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE IT const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT String PATH_NAME = "/products/arduino"; // CHANGE IT //String PATH_NAME = "/products/arduino.php"; // CHANGE IT String queryString = "temperature=26&humidity=70"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); WiFiClient client; // Create a WiFiClient object HTTPClient http; http.begin(client, HOST_NAME + PATH_NAME + "?" + queryString); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // file found at the server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been sent, and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { // Your loop code here (if needed) }

Vollständiger ESP8266-Code zum Senden einer HTTP-POST-Anfrage mit Daten

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp8266/esp8266-http-request */ #include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE IT const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT String PATH_NAME = "/products/arduino"; // CHANGE IT //String PATH_NAME = "/products/arduino.php"; // CHANGE IT String queryString = "temperature=26&humidity=70"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); WiFiClient client; // Create a WiFiClient object HTTPClient http; http.begin(client, HOST_NAME + PATH_NAME); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST(queryString); // httpCode will be negative on error if (httpCode > 0) { // file found at server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been sent and Server response header has been handled Serial.printf("[HTTP] POST... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { // Your loop code here (if needed) }

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!