HTTPS s certifikatom
Što ovaj primjer prikazuje
Preuzmite sliku s web-stranice putem HTTPS-a, pri čemu se certifikat web-stranice provjerava pri uspostavi veze, i prikažite je na zaslonu. Skica zatim pokušava učitati sliku s druge web-stranice s istim certifikatom. To ne uspijeva jer certifikat nije valjan za tu stranicu, a zaslon to i prikazuje.
Certifikat u skici je onaj za https://varipass.org. Zaglavlje skice navodi da otvara .bmp datoteke dubine boje 1, 4, 8 ili 24 bita.
Prije prijenosa upišite naziv svoje mreže i lozinku između navodnika kod ssid i password.
Primjer koda
#include "Inkplate.h" // Include Inkplate library to the sketch
Inkplate display;
const char ssid[] = ""; // Your WiFi SSID
const char *password = ""; // Your WiFi password
//This is the certificate for the website https://varipass.org
const char* certificate = \
"-----BEGIN CERTIFICATE-----\n" \
"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\n" \
"-----END CERTIFICATE-----\n";
void setup()
{
display.begin(); // Init Inkplate library (you should call this function ONLY ONCE)
display.clearDisplay(); // Clear frame buffer of display
display.display(); // Put clear image on display
display.print("Connecting to WiFi...");
display.display();
display.connectWiFi(ssid, password);
while (!display.isConnected())
{
delay(500);
display.print(".");
display.display();
}
display.println("\nWiFi OK! Downloading...");
display.display();
//Apply the certificate previously defined
display.applyHttpsCertificate(certificate);
//Here we will draw the image using a valid certificate. Photo taken by: Roberto Fernandez
if (!display.image.draw("https://varipass.org/neowise_mono.bmp", 0, 0, false, true))
{
// If is something failed (wrong filename or wrong bitmap format), write error message on the screen.
// REMEMBER! You can only use Windows Bitmap file with color depth of 1, 4, 8 or 24 bits with no compression!
display.println("Image open error");
display.display();
}
display.display();
delay(3000);
display.clearDisplay();
//Next we will try to load an image from a different website, which will not work as the certificate is
//not valid for this page
if (!display.image.draw("https://raw.githubusercontent.com/SolderedElectronics/Inkplate-Arduino-library/master/examples/Inkplate5V2/Advanced/WEB_WiFi/Inkplate5V2_Show_JPG_With_HTTPClient/image.jpg", 0, 100, true, false))
{
display.println("This image wont load as the certificate is invalid");
display.display();
}
display.display();
display.disconnect();
}
void loop()
{
// Nothing...
}
Ovaj primjer koristi i delay(), koji dolazi s paketom za ESP32 pločicu (arduino-esp32) i nije dio Inkplate biblioteke.
Korištene funkcije
Inkplate()returns NoneStvara Inkplate objekt. Inkplate 7SPECTRA ima samo jedan način rada sa šest boja, pa konstruktor ne prima argument načina rada.
ReturnsKonstruktor; nema povratne vrijednosti.
display.begin()returns voidInicijalizira biblioteku, periferne jedinice i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
display.clearDisplay()returns voidIspunjava međuspremnik slike bijelom bojom. Ne mijenja zaslon.
ReturnsNišta.
display.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na zaslon i osvježava ga.
ReturnsNišta.
display.print(value)returns size_tIspisuje tekst u međuspremnik slike, kao Serial.print(). Skica ga koristi za tekst statusa i točkice povezivanja.
ReturnsBroj ispisanih bajtova.
display.println(value)returns size_tIspisuje tekst u međuspremnik slike i prelazi u sljedeći redak, kao Serial.println().
ReturnsBroj ispisanih bajtova.
display.connectWiFi(const char *ssid, const char *pass, int timeout = WIFI_TIMEOUT, bool printToSerial = false)returns boolPovezuje se na Wi-Fi mrežu. timeout je zadano 23, što je WIFI_TIMEOUT biblioteke. printToSerial je zadano false.
Returnstrue ako se povezala.
display.isConnected()returns boolProvjerava je li pločica povezana na Wi-Fi. Skica čeka u petlji i svakih pola sekunde ispisuje točku dok se ne poveže.
Returnstrue dok je povezana.
display.applyHttpsCertificate(const char *certificate)returns voidDaje biblioteci certifikat prema kojem provjerava HTTPS veze. Ovdje je to certifikat za varipass.org, pa zahtjev prema drugoj web-stranici ne uspijeva.
ReturnsNišta.
display.image.draw(const char *path, int x, int y, bool dither = 1, bool invert = 0)returns boolIscrtava sliku na x, y; biblioteka bira dekoder prema nastavku datoteke u adresi. Prvi poziv iscrtava bitmapu s varipass.org na 0, 0 s isključenim ditheringom i uključenom inverzijom. Drugi poziv iscrtava JPEG s raw.githubusercontent.com na 0, 100 s uključenim ditheringom i isključenom inverzijom.
Returnstrue ako je slika iscrtana.
display.disconnect()returns voidPrekida vezu s Wi-Fi mrežom.
ReturnsNišta.
delay(unsigned long ms)returns voidČeka zadani broj milisekundi: 500 između točkica povezivanja i 3000 između dviju slika.
ReturnsNišta.
Što očekivati
Zaslon prikazuje Connecting to WiFi..., a zatim točku svakih pola sekunde dok se pločica ne poveže, nakon čega prikazuje WiFi OK! Downloading.... Zatim se iscrta slika s varipass.org. Nakon tri sekunde zaslon se briše i skica pokušava učitati drugu sliku; budući da certifikat nije valjan za tu web-stranicu, zaslon prikazuje This image wont load as the certificate is invalid. Ako se prva slika ne može otvoriti, zaslon prikazuje Image open error. Skica ništa ne ispisuje u Serial Monitor.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Advanced/WEB_WiFi/Inkplate7SPECTRA_HTTPS_With_Certificate