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:
Wie man den ESP8266 verwendet, um HTTP-Anfragen zu senden (GET und POST)
Wie man die Sensordaten in eine HTTP-Anfrage einbindet
Oder Sie können die folgenden Kits kaufen:
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.
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.
#include <WiFi.h>
#include <HTTPClient.h>
const char WIFI_SSID[] = "YOUR_WIFI_SSID";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
String HOST_NAME = "http://YOUR_DOMAIN.com";
String PATH_NAME = "/products/arduino";
String queryString = "temperature=26&humidity=70";
http.begin(HOST_NAME + PATH_NAME);
int httpCode = http.GET();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
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
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
int temp =
int humi =
String queryString = String("temperature=") + String(temp) + String("&humidity=") + String(humi);
http.begin(HOST_NAME + PATH_NAME + "?" + queryString);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.GET();
http.begin(HOST_NAME + PATH_NAME);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.POST(queryString);
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
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();
Der folgende Text ist der vollständige ESP8266-Code zur Durchführung von HTTP-GET- und HTTP-POST-Anfragen.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char WIFI_SSID[] = "YOUR_WIFI_SSID";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
String HOST_NAME = "http://YOUR_DOMAIN.com";
String PATH_NAME = "/products/arduino.php";
WiFiClient client;
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);
int httpCode = http.GET();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
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() {
}
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char WIFI_SSID[] = "YOUR_WIFI_SSID";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
String HOST_NAME = "http://YOUR_DOMAIN.com";
String PATH_NAME = "/products/arduino";
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;
HTTPClient http;
http.begin(client, HOST_NAME + PATH_NAME + "?" + queryString);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.GET();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
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() {
}
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char WIFI_SSID[] = "YOUR_WIFI_SSID";
const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";
String HOST_NAME = "http://YOUR_DOMAIN.com";
String PATH_NAME = "/products/arduino";
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;
HTTPClient http;
http.begin(client, HOST_NAME + PATH_NAME);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.POST(queryString);
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
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() {
}