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:
- Erstellen Sie ein kostenloses Konto auf ThingSpeak.com und öffnen Sie den Tab Channels.
- Erstellen Sie einen neuen Kanal mit einem Feld. Der Sketch sendet
field1, und das Feld muss genau diesen Namen tragen. - Öffnen Sie den Kanal, wechseln Sie zum Tab API Keys und kopieren Sie Ihren Write API Key.
- Tragen Sie Ihren Netzwerknamen und das Passwort zwischen den Anführungszeichen von
ssidundpassein, und den Schlüssel zwischen den Anführungszeichen vonwriteAPIKey.
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
#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 NoneErstellt 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 voidInitialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.
ReturnsNichts.
display.clearDisplay()returns voidFüllt den Framebuffer mit Weiß. Das Panel wird nicht verändert.
ReturnsNichts.
display.setTextColor(uint16_t c)returns voidLegt die Textfarbe fest, hier INKPLATE_BLACK.
ReturnsNichts.
display.setTextSize(uint8_t s)returns voidLegt die Textvergrößerung fest, hier 3.
ReturnsNichts.
display.printf(format, ...)returns size_tGibt 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 voidSendet den gesamten Framebuffer an das Panel und aktualisiert es.
ReturnsNichts.
WiFi.mode(wifi_mode_t mode)returns boolESP32-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_tESP32-Board-Package: beginnt mit dem Verbinden zum Netzwerk.
ReturnsVerbindungsstatus.
WiFi.status()returns wl_status_tESP32-Board-Package: der Verbindungsstatus; WL_CONNECTED, sobald die Verbindung besteht.
ReturnsVerbindungsstatus.
WiFi.localIP()returns IPAddressESP32-Board-Package: die IP-Adresse, die das Board im Netzwerk erhalten hat.
ReturnsDie IP-Adresse des Boards.
WiFiClient()returns NoneESP32-Board-Package: ein TCP-Client-Objekt. Der Sketch erstellt eines als `client`.
ReturnsKonstruktor; kein Rückgabewert.
client.connect(host, port)returns intWiFiClient: ö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_tWiFiClient: 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_tWiFiClient: 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 voidWiFiClient: 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