JPG s weba pomoću HTTPClienta
Što ovaj primjer prikazuje
Povežite se na Wi-Fi, preuzmite JPG sliku pomoću HTTPClient u memoriju i prikažite je na zaslonu. Za razliku od vlastite funkcije biblioteke image.draw() s adresom, ovdje skica sama obavlja preuzimanje, pa možete vidjeti svaki korak.
Prije učitavanja upišite naziv svoje mreže i lozinku između navodnika kod ssid i pass. Za prikaz druge slike promijenite adresu u url. Adresa s kojom je skica isporučena upućuje na sliku u mapi primjera Inkplate10 u repozitoriju biblioteke.
Ovaj primjer koristi i WiFi i HTTPClient (arduino-esp32), koji nisu dio Inkplate biblioteke i dolaze s paketom za ESP32 pločicu.
Primjer koda
#include "HTTPClient.h"
#include "Inkplate.h"
#include "WiFi.h"
Inkplate inkplate;
char *ssid = ""; // Your WiFi SSID
char *pass = ""; // Your WiFi password
// Add the URL of the image you want to show on Inkplate
String url = "https://raw.githubusercontent.com/SolderedElectronics/Inkplate-Arduino-library/master/examples/Inkplate10/Advanced/WEB_WiFi/Inkplate10_Show_JPG_With_HTTPClient/image.jpg";
void setup()
{
Serial.begin(115200); // Init serial communication
inkplate.begin(); // Init Inkplate library (you should call this function ONLY ONCE)
inkplate.clearDisplay(); // Clear frame buffer of display
// Let's connect to the WiFi
// You can see the progress on the Serial Monitor
Serial.print("Connecting to WiFi");
// Actually connect to the WiFi network
WiFi.mode(WIFI_MODE_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
// Print a dot every half second when connecting
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi OK! Downloading...");
// Make an object for the HTTP client
HTTPClient http;
http.begin(url);
// Do a get request to get the image
int httpCode = http.GET();
// If everything is OK
if (httpCode == HTTP_CODE_OK)
{
// Get the size of the image
int32_t size = http.getSize();
int32_t len = size; // Copy whose value we will change, but the original must not be lost
if (size > 0)
{
// Allocate the memory for the image
uint8_t *buffer = (uint8_t *)ps_malloc(size);
uint8_t *buffPtr = buffer; // Copy of the buffer pointer so that the original one is not lost
// Temporary buffer for retrieving parts of the image and storing them in the real buffer
uint8_t buff[512] = {0};
// Let's fetch the data
WiFiClient *stream = http.getStreamPtr(); // We need a stream pointer to know how much data is available
// Repeat as long as we have a connection and while there is data to read
while (http.connected() && (len > 0 || len == -1))
{
// Get the number of available bytes
size_t size = stream->available();
// If there are available bytes, read them
if (size)
{
// Read available bytes from the stream and store them in the buffer
int c = stream->readBytes(buff, ((size > sizeof(buff)) ? sizeof(buff) : size));
memcpy(buffPtr, buff, c);
// As we read the data, we subtract the length we read and the remaining length is in the variable
// len
if (len > 0)
len -= c;
// Likewise for the buffer pointer
buffPtr += c;
}
else if (len == -1)
{
len = 0;
}
}
// Draw image into the frame buffer of Inkplate
inkplate.image.drawJpegFromBuffer(buffer, size, 0, 0, true, false);
// Free the memory where the image was stored because it is now in the frame buffer
free(buffer);
}
else
{
// Show an error message
inkplate.setCursor(0, 0);
inkplate.println("Invalid response length " + String(size) + " (HTTP " + String(httpCode) + ")");
}
}
else
{
// Show an error message
inkplate.setCursor(0, 0);
inkplate.println("HTTP error" + String(httpCode) + "...");
}
// Draw image on the screen
inkplate.display();
}
void loop()
{
// Nothing
}
Korištene funkcije
Inkplate()returns NoneStvara Inkplate objekt. Inkplate 7SPECTRA ima jedan šestobojni način rada, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
inkplate.begin()returns voidInicijalizira biblioteku, periferne jedinice i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
inkplate.clearDisplay()returns voidIspunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.
ReturnsNišta.
inkplate.image.drawJpegFromBuffer(uint8_t *buf, int32_t len, int x, int y, bool dither, bool invert)returns boolDekodira JPEG iz memorije i crta ga u međuspremnik slike s gornjim lijevim kutom u (x, y). Skica predaje preuzeti međuspremnik i njegovu veličinu, položaj (0, 0), dithering uključen i invertiranje isključeno.
Returnstrue ako je slika nacrtana.
inkplate.setCursor(int16_t x, int16_t y)returns voidPostavlja mjesto gdje počinje sljedeći ispisani tekst. Skica ga prije poruke o pogrešci premješta u gornji lijevi kut.
ReturnsNišta.
inkplate.println(text)returns size_tIspisuje tekst u međuspremnik slike i prelazi u sljedeći redak. Skica ga koristi za dvije poruke o pogrešci.
ReturnsBroj ispisanih bajtova.
inkplate.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na zaslon i osvježava ga.
ReturnsNišta.
WiFi.mode(wifi_mode_t mode)returns boolPaket za ESP32 pločicu: 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 za ESP32 pločicu: počinje povezivanje na mrežu.
ReturnsStatus veze.
WiFi.status()returns wl_status_tPaket za ESP32 pločicu: status veze; WL_CONNECTED kad je veza uspostavljena.
ReturnsStatus veze.
HTTPClient()returns NoneKlasa HTTPClient, paket za ESP32 pločicu: objekt HTTP klijenta. Skica stvara jedan pod nazivom `http`.
ReturnsKonstruktor; nema povratne vrijednosti.
http.begin(url)returns boolHTTPClient: priprema zahtjev prema URL-u.
Returnstrue ako se URL mogao obraditi.
http.GET()returns intHTTPClient: šalje GET zahtjev. Skica nastavlja samo ako je odgovor HTTP_CODE_OK.
ReturnsHTTP statusni kôd ili negativni kôd pogreške.
http.getSize()returns intHTTPClient: veličina tijela odgovora, preuzeta iz zaglavlja Content-Length.
ReturnsVeličina u bajtovima ili -1 ako je poslužitelj nije dao.
http.getStreamPtr()returns WiFiClient *HTTPClient: pokazivač na tok iz kojeg se čita tijelo odgovora.
ReturnsPokazivač na tok.
http.connected()returns boolHTTPClient: je li veza s poslužiteljem još otvorena. Skica čita podatke dok jest.
Returnstrue dok je veza uspostavljena.
stream->available()returns intWiFiClient: broj bajtova spremnih za čitanje.
ReturnsBroj bajtova.
stream->readBytes(uint8_t *buffer, size_t length)returns size_tWiFiClient: čita do length bajtova u međuspremnik. Skica čita najviše 512 bajtova odjednom.
ReturnsBroj pročitanih bajtova.
ps_malloc(size_t size)returns void *Paket za ESP32 pločicu: dodjeljuje memoriju iz vanjskog PSRAM-a. Skica dodjeljuje međuspremnik veličine slike i oslobađa ga pomoću free() nakon što je slika u međuspremniku slike.
ReturnsPokazivač na memoriju ili NULL ako se memorija nije mogla dodijeliti.
Što očekivati
Serijski monitor pri 115200 baud prikazuje Connecting to WiFi, točku svakih pola sekunde dok se povezuje, a zatim WiFi OK! Downloading.... Kad se preuzimanje završi, zaslon se osvježi i prikaže sliku u gornjem lijevom kutu. Ako poslužitelj ne odgovori s HTTP_CODE_OK, zaslon umjesto slike prikazuje HTTP error i kôd; ako odgovor nema veličinu, prikazuje Invalid response length s veličinom i HTTP kôdom.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/WEB_WiFi/Inkplate7SPECTRA_Show_JPG_With_HTTPClient