Zum Hauptinhalt springen

HTTP POST an ThingSpeak

Was dieses Beispiel zeigt​

Verbinden Sie sich mit Ihrem WLAN und senden Sie alle 20 Sekunden mit einer HTTP-POST-Anfrage eine Zufallszahl an einen ThingSpeak-Kanal. Der Bildschirm zeigt nur einmal zu Beginn eine kurze Meldung; der Fortschritt wird im Serial Monitor ausgegeben.

Vor dem Hochladen:

  1. Erstellen Sie ein kostenloses Konto auf ThingSpeak.com und öffnen Sie den Tab Channels.
  2. Erstellen Sie einen neuen Kanal mit einem Feld. Der Sketch sendet field1, und das Feld muss genau diesen Namen tragen.
  3. Öffnen Sie den Kanal, wechseln Sie zum Tab API Keys und kopieren Sie Ihren Write API Key.
  4. Tragen Sie Ihren Netzwerknamen und das Passwort zwischen den Anführungszeichen von ssid und pass ein, und den Schlüssel zwischen den Anführungszeichen von writeAPIKey.

Der Kommentar im Sketch selbst besagt, dass eine kostenlose ThingSpeak-Lizenz mindestens 15 Sekunden zwischen den Anfragen erlaubt; POSTING_INTERVAL_IN_SESCS ist 20. Wenn eine Anfrage gesendet wurde, öffnen Sie Ihren Kanal, um das Diagramm der gesendeten Daten zu sehen.

Dieses Beispiel verwendet außerdem WiFi und WiFiClient (arduino-esp32), die nicht Teil der Inkplate-Bibliothek sind und mit dem ESP32-Board-Package geliefert werden.

Beispielcode​

Select Board
Inkplate7SPECTRA_HTTP_POST_ThingSpeak.ino
#include "Inkplate.h"
#include "WiFi.h"

Inkplate display;
WiFiClient client;

#define POSTING_INTERVAL_IN_SESCS 20

const char *ssid = "";
const char *pass = "";

char *server = "api.thingspeak.com";
String writeAPIKey = ""; // Enter your Write API Key

unsigned long lastConnectionTime = 0;

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

// Init Inkplate library (you should call this function ONLY ONCE)
display.begin();

// Clear frame buffer of display
display.clearDisplay();

// Set text color and size
display.setTextColor(INKPLATE_BLACK);
display.setTextSize(3);

// Display a message
display.printf("HTTP POST request example\n\n");
display.printf("Open Serial Monitor at \n115200 baud rate to see \nwhat's happening.");
display.display();

// Connect to the WiFi network
WiFi.mode(WIFI_MODE_STA);
WiFi.begin(ssid, pass);
Serial.print("Connecting to Wifi ");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
}


void loop()
{
// Every POSTING_INTERVAL_IN_SESCS seconds make the POST request
if ((unsigned long)(millis() - lastConnectionTime) > POSTING_INTERVAL_IN_SESCS * 1000LL)
{
// Clear frame buffer of display
display.clearDisplay();

// Connect the WiFi client to the server via port 80
if (!client.connect(server, 80))
{
// If it fails, print a message, remember time, stop the client and reset the loop
Serial.println("Connection failed");
lastConnectionTime = millis();
client.stop();
return;
}
else
{
// If you have any sensor or something else, here you have to put data to send instead of a random number
int field1Data = random(40);

// Create data string to send to ThingSpeak
String data = "field1=" + String(field1Data); // shows how to include additional field data in http post

// POST data to ThingSpeak
if (client.connect(server, 80))
{
client.println("POST /update HTTP/1.1");
client.println("Host: api.thingspeak.com");
client.println("Connection: close");
client.println("User-Agent: ESP32WiFi/1.1");
client.println("X-THINGSPEAKAPIKEY: " + writeAPIKey);
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.print(data.length());
client.print("\n\n");
client.print(data);

Serial.print("The POST request is done: ");
Serial.println(data);
lastConnectionTime = millis();
delay(250);
}
}
client.stop();
}
}

Verwendete Funktionen​

Inkplate()returns None

Erstellt das Inkplate-Objekt, hier display genannt. Inkplate 7SPECTRA hat einen einzigen Sechs-Farben-Modus, daher erhält 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.

display.clearDisplay()returns void

Füllt den Framebuffer mit Weiß. Das Panel wird nicht verändert.

ReturnsNichts.

display.setTextColor(uint16_t c)returns void

Legt die Textfarbe fest, hier INKPLATE_BLACK.

ReturnsNichts.

display.setTextSize(uint8_t s)returns void

Legt die Textvergrößerung fest, hier 3.

ReturnsNichts.

display.printf(format, ...)returns size_t

Gibt formatierten Text in den Framebuffer aus, wie Serial.printf(). Der Sketch verwendet sie für die zweiteilige Meldung, die Sie auffordert, den Serial Monitor mit 115200 Baud zu öffnen.

ReturnsAnzahl der ausgegebenen Bytes.

display.display(bool _leaveOn = 0)returns void

Sendet den gesamten Framebuffer an das Panel und aktualisiert es.

ReturnsNichts.

WiFi.mode(wifi_mode_t mode)returns bool

ESP32-Board-Package: legt den WLAN-Modus fest. Der Sketch verwendet WIFI_MODE_STA, den Modus zum Verbinden mit einem Netzwerk.

Returnstrue, wenn der Modus gesetzt wurde.

WiFi.begin(ssid, pass)returns wl_status_t

ESP32-Board-Package: beginnt mit dem Verbinden zum Netzwerk.

ReturnsVerbindungsstatus.

WiFi.status()returns wl_status_t

ESP32-Board-Package: der Verbindungsstatus; WL_CONNECTED, sobald die Verbindung besteht.

ReturnsVerbindungsstatus.

WiFi.localIP()returns IPAddress

ESP32-Board-Package: die IP-Adresse, die das Board im Netzwerk erhalten hat.

ReturnsDie IP-Adresse des Boards.

WiFiClient()returns None

ESP32-Board-Package: ein TCP-Client-Objekt. Der Sketch erstellt eines als `client`.

ReturnsKonstruktor; kein Rückgabewert.

client.connect(host, port)returns int

WiFiClient: öffnet eine Verbindung zum Server. Der Sketch verbindet sich mit api.thingspeak.com an Port 80.

Returns1, wenn die Verbindung hergestellt wurde, 0, wenn nicht.

client.println(data)returns size_t

WiFiClient: sendet den Text gefolgt von einem Zeilenumbruch. Der Sketch sendet damit die Anforderungszeile und die HTTP-Header, einschließlich des Write API Key im Header X-THINGSPEAKAPIKEY.

ReturnsAnzahl der gesendeten Bytes.

client.print(data)returns size_t

WiFiClient: sendet den Text unverändert. Der Sketch sendet damit den Wert des Content-Length-Headers, eine Leerzeile und den Body `field1=<number>`.

ReturnsAnzahl der gesendeten Bytes.

client.stop()returns void

WiFiClient: schließt die Verbindung.

ReturnsNichts.

Was Sie erwarten können​

Auf dem Bildschirm erscheinen HTTP POST request example und eine Zeile, die Sie auffordert, den Serial Monitor mit 115200 Baud zu öffnen. Im Serial Monitor mit 115200 Baud sehen Sie Connecting to Wifi und alle halbe Sekunde einen Punkt, bis das Board verbunden ist, danach Connected to WiFi network with IP Address: gefolgt von der Adresse, die das Board erhalten hat. Anschließend gibt der Sketch alle 20 Sekunden The POST request is done: field1= aus, gefolgt von der gesendeten Zufallszahl von 0 bis 39, oder Connection failed, wenn er den Server nicht erreichen kann.

🔗Vollständiges Beispiel öffnen

examples/Inkplate7SPECTRA/Advanced/WEB_WiFi/Inkplate7SPECTRA_HTTP_POST_ThingSpeak

→