HTTP POST na ThingSpeak
Što prikazuje ovaj primjer
Povežite se na svoju Wi-Fi mrežu i svakih 20 sekundi šaljite nasumični broj na ThingSpeak kanal HTTP POST zahtjevom. Zaslon samo jednom, na početku, prikazuje kratku poruku; napredak se ispisuje na serijskom monitoru.
Prije prijenosa programa:
- Izradite besplatan račun na ThingSpeak.com i otvorite karticu Channels.
- Izradite novi kanal s jednim poljem. Skica šalje
field1, pa polje mora imati upravo taj naziv. - Otvorite kanal, idite na karticu API Keys i kopirajte svoj Write API Key.
- Upišite naziv svoje mreže i lozinku između navodnika kod
ssidipass, a ključ između navodnika kodwriteAPIKey.
Komentar u samoj skici navodi da besplatna ThingSpeak licenca dopušta najmanje 15 sekundi između zahtjeva; POSTING_INTERVAL_IN_SESCS iznosi 20. Kada je zahtjev poslan, otvorite svoj kanal kako biste vidjeli graf poslanih podataka.
Ovaj primjer koristi i WiFi i WiFiClient (arduino-esp32), koji nisu dio Inkplate biblioteke i dolaze s paketom pločice ESP32.
Primjer koda
#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();
}
}
Korištene funkcije
Inkplate()returns NoneStvara Inkplate objekt, ovdje nazvan display. Inkplate 7SPECTRA ima jedan šesterobojni način rada, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
display.begin()returns voidInicijalizira biblioteku, periferiju i međuspremnik okvira. Pozovite ga jednom u setup().
ReturnsNišta.
display.clearDisplay()returns voidIspunjava međuspremnik okvira bijelom bojom. Ne mijenja zaslon.
ReturnsNišta.
display.setTextColor(uint16_t c)returns voidPostavlja boju teksta, ovdje INKPLATE_BLACK.
ReturnsNišta.
display.setTextSize(uint8_t s)returns voidPostavlja povećanje teksta, ovdje 3.
ReturnsNišta.
display.printf(format, ...)returns size_tIspisuje formatirani tekst u međuspremnik okvira, kao Serial.printf(). Skica ga koristi za poruku u dva dijela koja vas poziva da otvorite serijski monitor pri 115200 baud.
ReturnsBroj ispisanih bajtova.
display.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik okvira na zaslon i osvježava ga.
ReturnsNišta.
WiFi.mode(wifi_mode_t mode)returns boolPaket pločice ESP32: postavlja Wi-Fi način rada. Skica koristi WIFI_MODE_STA, način za povezivanje na mrežu.
Returnstrue ako je način rada postavljen.
WiFi.begin(ssid, pass)returns wl_status_tPaket pločice ESP32: započinje povezivanje na mrežu.
ReturnsStatus veze.
WiFi.status()returns wl_status_tPaket pločice ESP32: status veze; WL_CONNECTED nakon povezivanja.
ReturnsStatus veze.
WiFi.localIP()returns IPAddressPaket pločice ESP32: IP adresa koju je pločica dobila na mreži.
ReturnsIP adresa pločice.
WiFiClient()returns NonePaket pločice ESP32: objekt TCP klijenta. Skica ga stvara pod nazivom `client`.
ReturnsKonstruktor; nema povratne vrijednosti.
client.connect(host, port)returns intWiFiClient: otvara vezu s poslužiteljem. Skica se povezuje na api.thingspeak.com na portu 80.
Returns1 ako je veza uspostavljena, 0 ako nije.
client.println(data)returns size_tWiFiClient: šalje tekst praćen prijelomom retka. Skica uz njega šalje redak zahtjeva i HTTP zaglavlja, uključujući Write API Key u zaglavlju X-THINGSPEAKAPIKEY.
ReturnsBroj poslanih bajtova.
client.print(data)returns size_tWiFiClient: šalje tekst takav kakav jest. Skica uz njega šalje vrijednost zaglavlja Content-Length, prazan redak i tijelo `field1=<number>`.
ReturnsBroj poslanih bajtova.
client.stop()returns voidWiFiClient: zatvara vezu.
ReturnsNišta.
Što očekivati
Na zaslonu se prikazuju HTTP POST request example i redak koji traži da otvorite serijski monitor pri 115200 baud. U serijskom monitoru pri 115200 baud vidite Connecting to Wifi i točku svakih pola sekunde dok se pločica ne poveže, zatim Connected to WiFi network with IP Address: , a iza toga adresu koju je pločica dobila. Nakon toga, svakih 20 sekundi skica ispisuje The POST request is done: field1=, a iza toga nasumični broj od 0 do 39 koji je poslala, ili Connection failed kada ne može doći do poslužitelja.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/WEB_WiFi/Inkplate7SPECTRA_HTTP_POST_ThingSpeak