Zum Hauptinhalt springen

HTTPS-POST-Anfrage

Was dieses Beispiel zeigt​

Das Beispiel verbindet sich mit Ihrem WLAN und sendet alle 10 Sekunden eine JSON-POST-Anfrage über HTTPS. Anschließend gibt es den Statuscode und die Antwort im Serial Monitor aus. Der Sketch sendet an JSONPlaceholder, eine Fake-API zum Testen: Sie erhalten eine Antwort wie von einer echten API, aber nichts wird gespeichert. Eine echte API benötigt meist einen API-Schlüssel und weitere Parameter. Der Sketch verwendet HTTPS, ohne das Zertifikat des Servers zu prüfen. Eine Anfrage, die ein Zertifikat prüft, finden Sie unter HTTPS mit Zertifikat.

Tragen Sie vor dem Hochladen Ihren Netzwerknamen und Ihr Passwort zwischen die Anführungszeichen von ssid und pass ein. Öffnen Sie den Serial Monitor mit 115200 Baud, um zu sehen, was passiert.

Beispielcode​

Select Board
Inkplate7SPECTRA_HTTPS_POST_Request.ino
// Include needed libraries
#include "Inkplate.h"
#include "ArduinoJson.h"
#include "HTTPClient.h"
#include "WiFi.h"
#include <WiFiClientSecure.h>

// Enter your WiFi credentials
const char *ssid = "";
const char *pass = "";

// Specify the API URL to send a POST request
const char *apiUrl = "https://jsonplaceholder.typicode.com/posts";

// Specify the delay time between 2 POST requests in milliseconds
#define DELAY_BETWEEN_REQUESTS 10000

// Create objects from included libraries
WiFiClientSecure client;
HTTPClient http;
Inkplate display;

void setup()
{
// Init serial communication
Serial.begin(115200);

// Init the display
display.begin();

// Connect to WiFi
WiFi.begin(ssid, pass);
Serial.println("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("Connected to WiFi with IP address ");
Serial.println(WiFi.localIP());

// Use https but don't use a certificate
client.setInsecure();
}

void loop()
{
// Init HTTP client with secure wifi client and the API URL
http.begin(client, apiUrl);

// Add header. In your case maybe you must add more depending on your API
http.addHeader("Content-Type", "application/json");

// Create a JSON document for serializing data
const size_t CAPACITY = JSON_OBJECT_SIZE(1);
StaticJsonDocument<CAPACITY> doc;

// Convert the JSON document to a JSON object in order to add data
JsonObject object = doc.to<JsonObject>();

// Add data in the JSON object
object["title"] = "Hello Inkplate";

// Serialize the JSON object with your data to a JSON document for sending
char jsonOutput[128];
serializeJson(doc, jsonOutput);

// Send the POST request and save returned code
int httpCode = http.POST(String(jsonOutput));

// If the code is smaller than 0, something went wrong
if (httpCode > 0)
{
// Get the string returned by the HTTPS request and print the response
String payload = http.getString();
Serial.println("Status code: " + String(httpCode));
Serial.println(payload);

// End connection
http.end();
}
else
{
Serial.println("Error on HTTPS request");
}

// Wait for sending next request
delay(DELAY_BETWEEN_REQUESTS);
}

Dieses Beispiel verwendet außerdem WiFi, HTTPClient und WiFiClientSecure (arduino-esp32). Sie gehören zum ESP32-Board-Paket und sind nicht Teil der Inkplate-Bibliothek. Es verwendet auch ArduinoJson (arduinojson.org), das ebenfalls nicht Teil der Inkplate-Bibliothek ist. Ihre Funktionen werden unten so beschrieben, wie der Sketch sie verwendet.

Verwendete Funktionen​

Inkplate()returns None

Erstellt das Inkplate-Objekt. Inkplate 7SPECTRA hat nur einen Sechs-Farben-Modus, daher erwartet der Konstruktor kein Modus-Argument.

ReturnsKonstruktor; kein Rückgabewert.

display.begin()returns void

Initialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.

ReturnsNichts.

Serial.begin(unsigned long baud)returns void

Startet die serielle Kommunikation mit der angegebenen Baudrate, hier 115200.

ReturnsNichts.

Serial.print(value)returns size_t

Gibt Text ohne Zeilenumbruch im Serial Monitor aus.

ReturnsAnzahl der ausgegebenen Bytes.

Serial.println(value)returns size_t

Gibt Text mit anschließendem Zeilenumbruch im Serial Monitor aus.

ReturnsAnzahl der ausgegebenen Bytes.

WiFi.begin(const char *ssid, const char *pass)returns wl_status_t

Beginnt mit dem Verbindungsaufbau zum WLAN.

ReturnsDer Verbindungsstatus.

WiFi.status()returns wl_status_t

Gibt den Verbindungsstatus zurück. Der Sketch wartet, bis er WL_CONNECTED lautet.

ReturnsDer Verbindungsstatus.

WiFi.localIP()returns IPAddress

Gibt die IP-Adresse zurück, die das Board im Netzwerk erhalten hat.

ReturnsDie IP-Adresse des Boards.

WiFiClientSecurereturns None

WLAN-Client-Klasse für HTTPS-Verbindungen. Der Sketch erstellt ein Objekt, client, und übergibt es an den HTTP-Client.

ReturnsTyp; kein Rückgabewert.

HTTPClientreturns None

HTTP-Client-Klasse. Der Sketch erstellt ein Objekt, http, und sendet damit die POST-Anfrage.

ReturnsTyp; kein Rückgabewert.

JsonObjectreturns None

ArduinoJson-Typ für ein JSON-Objekt. Der Sketch holt eines aus dem Dokument und fügt ihm den Schlüssel title hinzu.

ReturnsTyp; kein Rückgabewert.

WiFiClientSecure.setInsecure()returns void

Lässt den Client HTTPS verwenden, ohne das Zertifikat des Servers zu prüfen.

ReturnsNichts.

HTTPClient.begin(WiFiClient &client, String url)returns bool

Startet eine Anfrage an die Adresse über den angegebenen Client, hier den sicheren Client und die JSONPlaceholder-Adresse.

Returnstrue, wenn die Anfrage gestartet werden konnte.

HTTPClient.addHeader(const String &name, const String &value)returns void

Fügt der Anfrage einen Header hinzu. Der Sketch setzt Content-Type auf application/json.

ReturnsNichts.

StaticJsonDocumentreturns None

ArduinoJson-Dokument mit fester Speichergröße, hier JSON_OBJECT_SIZE(1), Platz für einen Schlüssel mit Wert.

ReturnsTyp; kein Rückgabewert.

doc.to()returns JsonObject

ArduinoJson-Funktion, die das Dokument in ein leeres JSON-Objekt verwandelt, dem Sie Daten hinzufügen können. Der Sketch fügt den Schlüssel title mit dem Wert Hello Inkplate hinzu.

ReturnsDas JSON-Objekt.

serializeJson(doc, char *output)returns size_t

ArduinoJson-Funktion, die das Dokument als JSON-Text in den Puffer schreibt.

ReturnsAnzahl der geschriebenen Bytes.

HTTPClient.POST(String payload)returns int

Sendet den Text als Body einer POST-Anfrage.

ReturnsDer HTTP-Statuscode oder eine negative Zahl bei einem Fehler.

HTTPClient.getString()returns String

Gibt den Body der Antwort als Text zurück.

ReturnsDer Antwort-Body.

HTTPClient.end()returns void

Beendet die Anfrage und gibt ihre Ressourcen frei.

ReturnsNichts.

delay(unsigned long ms)returns void

Wartet die angegebene Anzahl von Millisekunden: 500 zwischen den Verbindungspunkten und 10000 zwischen den Anfragen.

ReturnsNichts.

Was Sie erwarten können​

Der Serial Monitor zeigt den Verbindungsfortschritt und danach alle 10 Sekunden den Statuscode und die Antwort des Servers. Das Display wird nicht verwendet.

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
Connecting to WiFi

Auf diese Zeile folgt alle 0,5 Sekunden ein Punkt, bis das Board verbunden ist, dann Connected to WiFi with IP address und die Adresse des Boards. Danach gibt jede Anfrage Status code: mit dem HTTP-Statuscode aus, den der Server geantwortet hat, und anschließend den Antworttext.

Schlägt die Anfrage fehl, gibt der Sketch stattdessen Error on HTTPS request aus.

🔗Das vollständige Beispiel öffnen

examples/Inkplate7SPECTRA/Advanced/WEB_WiFi/Inkplate7SPECTRA_HTTPS_POST_Request

→