microSD galerija
Što ovaj primjer prikazuje
Odabire nasumičnu sliku iz korijenske mape microSD kartice, iscrtava je i odlazi u duboki san na 5 minuta. Kad se pločica probudi, skica se ponovno pokreće od početka i odabire drugu sliku. Prije početka stavite nekoliko datoteka .bmp, .jpg ili .png u korijensku mapu kartice.
Ovaj primjer koristi i funkcije dubokog sna za ESP32 (arduino-esp32), koje nisu dio biblioteke Inkplate, nego dolaze s paketom pločice ESP32. SdFile i FsFile dolaze iz biblioteke SdFat koju biblioteka Inkplate uključuje.
Primjer koda
#include "Inkplate.h" // Include Inkplate library to the sketch
Inkplate inkplate; // Create an object on Inkplate library and also set library into 1 Bit mode (BW)
SdFile file; // Create SdFile object used for accessing files on SD card
#define DELAY_MS 5 * 60 * 1000
// Here we store possible image paths
String files[100];
int fileCount = 0;
// Generic helper function to see if null terminated c string ends with other string
// https://stackoverflow.com/questions/744766/how-to-compare-ends-of-strings-in-c
int endsWith(const char *str, const char *suffix)
{
if (!str || !suffix)
return 0;
size_t lenstr = strlen(str);
size_t lensuffix = strlen(suffix);
if (lensuffix > lenstr)
return 0;
return strncmp(str + lenstr - lensuffix, suffix, lensuffix) == 0;
}
void setup()
{
// Initialize serial
Serial.begin(115200);
inkplate.begin(); // Init Inkplate library (you should call this function ONLY ONCE)
// Init SD card. Display if SD card is init propery or not.
if (inkplate.sdCardInit())
{
// Temporary buffer for file name
char a[50];
FsFile f, root = inkplate.getSdFat().open("/"); // Currently open file and the directory we want images from e.g. root /
while (f.openNext(&root, O_RDONLY) && f.getName(a, 40)) // Iterate over all files in directory
{
if (f.isFile() && !f.isHidden() && a[0] != '.' && // Check if current file isn't a directory
(endsWith(a, ".bmp") || endsWith(a, ".jpg") || endsWith(a, ".png"))) // Check if the file is an image
Serial.println(files[fileCount++] = String(a)); // Print the file name and add it to all files
f.close(); // Close the file
}
Serial.println(); // Blank print to separate all files from the chosen one
if (fileCount != 0) // If there we're any files choose one and draw it
{
String s = files[random(0, fileCount)];
inkplate.image.draw(s, 0, 0);
Serial.println("Drawn image: ");
Serial.println(s);
inkplate.display();
}
}
else
{
Serial.println("failed opening sd");
}
// Go to sleep for DELAY_MS
esp_sleep_enable_timer_wakeup(1000L * DELAY_MS);
// Put SD card into deep sleep
inkplate.sdCardSleep();
// Start deep sleep (this function does not return). Program stops here.
esp_deep_sleep_start();
}
void loop()
{
// Never here! If you are using deep sleep, the whole program should be in setup() because the board restarts each
// time. loop() must be empty!
}
Korištene funkcije
Inkplate()returns NoneStvara objekt Inkplate. Inkplate 7SPECTRA ima jedan šestobojni način rada, pa konstruktor ne prima argument načina rada (komentar o 1-bitnom načinu dolazi iz drugih pločica Inkplate).
ReturnsKonstruktor; nema povratne vrijednosti.
SdFile()returns NoneSdFat: objekt datoteke. Skica ga stvara kao `file`, ali ga ne koristi; karticu čita pomoću objekata FsFile.
ReturnsKonstruktor; nema povratne vrijednosti.
inkplate.begin()returns voidInicijalizira biblioteku, periferiju i međuspremnik slike. Pozovite je jednom u setup().
ReturnsNišta.
inkplate.sdCardInit()returns int16_tUključuje napajanje microSD kartice, pokreće njezinu SPI sabirnicu i montira karticu.
Returns1 ako je kartica montirana, 0 ako nije.
inkplate.getSdFat()returns SdFat &Omogućuje pristup objektu SdFat koji biblioteka koristi za karticu. Skica pomoću njega otvara korijensku mapu kartice.
ReturnsReferenca na objekt SdFat.
f.openNext(&root, O_RDONLY)returns boolSdFat (FsFile): otvara sljedeći unos u mapi. Skica prolazi petljom kroz svaki unos korijenske mape, otvorene samo za čitanje.
Returnstrue ako je unos otvoren.
f.getName(char *name, size_t size)returns size_tSdFat (FsFile): kopira naziv otvorenog unosa u međuspremnik.
ReturnsDuljina naziva, 0 u slučaju greške.
f.isFile()returns boolSdFat (FsFile): je li unos datoteka, a ne mapa.
Returnstrue za datoteku.
f.isHidden()returns boolSdFat (FsFile): je li unos skriven. Skica preskače skrivene datoteke i nazive koji počinju točkom.
Returnstrue za skriveni unos.
f.close()returns boolSdFat (FsFile): zatvara unos.
Returnstrue u slučaju uspjeha.
random(long min, long max)returns longArduino core: pseudonasumičan broj od min do max, ali bez max. Skica ga koristi za odabir jednog od prikupljenih naziva datoteka.
ReturnsNasumičan broj.
inkplate.image.draw(const String path, int x, int y, bool dither = 1, bool invert = 0)returns boolIscrtava datoteku slike s tim nazivom s microSD kartice, s gornjim lijevim kutom u (x, y); biblioteka dekoder bira prema ekstenziji datoteke (bmp, jpg ili png). Skica iscrtava odabranu datoteku na (0, 0) s uključenim zadanim ditheringom i isključenom inverzijom.
Returnstrue ako je slika iscrtana.
inkplate.display(bool _leaveOn = 0)returns voidŠalje cijeli međuspremnik slike na panel i osvježava ga.
ReturnsNišta.
esp_sleep_enable_timer_wakeup(uint64_t time_in_us)returns esp_err_tPaket pločice ESP32: budi čip iz dubokog sna nakon zadanog vremena u mikrosekundama. Skica prosljeđuje 1000 × DELAY_MS, što je 5 minuta.
ReturnsESP_OK u slučaju uspjeha.
inkplate.sdCardSleep()returns voidPostavlja SPI pinove kartice kao ulaze i isključuje napajanje kartice radi uštede energije u dubokom snu.
ReturnsNišta.
esp_deep_sleep_start()returns voidPaket pločice ESP32: ulazi u duboki san. Ne vraća se; sljedeće buđenje pokreće skicu od početka, zbog čega loop() ostaje prazan.
ReturnsNe vraća vrijednost.
Što očekivati
Na zaslonu se prikazuje jedna od slika iz korijenske mape kartice, iscrtana u gornjem lijevom kutu. Serijski monitor pri 115200 baud ispisuje nazive svih pronađenih datoteka .bmp, .jpg i .png, jedan po retku, zatim prazan redak, zatim Drawn image: i naziv iscrtane slike. Skica pamti do 100 naziva. Ako se kartica ne može montirati, ispisuje failed opening sd; ako na kartici nema slika, ništa se ne iscrtava. Nakon 5 minuta pločica se budi i ponovno odabire sliku.
🔗Otvorite cijeli primjer
examples/Inkplate7SPECTRA/Diagnostics/Inkplate7SPECTRA_Gallery