Skip to main content

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​

Select Board
Inkplate7SPECTRA_Show_JPG_With_HTTPClient.ino
#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 None

Stvara 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 void

Inicijalizira biblioteku, periferne jedinice i međuspremnik slike. Pozovite je jednom u setup().

ReturnsNišta.

inkplate.clearDisplay()returns void

Ispunjava 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 bool

Dekodira 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 void

Postavlja 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_t

Ispisuje 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 bool

Paket 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_t

Paket za ESP32 pločicu: počinje povezivanje na mrežu.

ReturnsStatus veze.

WiFi.status()returns wl_status_t

Paket za ESP32 pločicu: status veze; WL_CONNECTED kad je veza uspostavljena.

ReturnsStatus veze.

HTTPClient()returns None

Klasa HTTPClient, paket za ESP32 pločicu: objekt HTTP klijenta. Skica stvara jedan pod nazivom `http`.

ReturnsKonstruktor; nema povratne vrijednosti.

http.begin(url)returns bool

HTTPClient: priprema zahtjev prema URL-u.

Returnstrue ako se URL mogao obraditi.

http.GET()returns int

HTTPClient: š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 int

HTTPClient: 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 bool

HTTPClient: je li veza s poslužiteljem još otvorena. Skica čita podatke dok jest.

Returnstrue dok je veza uspostavljena.

stream->available()returns int

WiFiClient: broj bajtova spremnih za čitanje.

ReturnsBroj bajtova.

stream->readBytes(uint8_t *buffer, size_t length)returns size_t

WiFiClient: č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

→