Skip to main content

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​

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

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

SdFat: objekt datoteke. Skica ga stvara kao `file`, ali ga ne koristi; karticu čita pomoću objekata FsFile.

ReturnsKonstruktor; nema povratne vrijednosti.

inkplate.begin()returns void

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

ReturnsNišta.

inkplate.sdCardInit()returns int16_t

Uključ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 bool

SdFat (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_t

SdFat (FsFile): kopira naziv otvorenog unosa u međuspremnik.

ReturnsDuljina naziva, 0 u slučaju greške.

f.isFile()returns bool

SdFat (FsFile): je li unos datoteka, a ne mapa.

Returnstrue za datoteku.

f.isHidden()returns bool

SdFat (FsFile): je li unos skriven. Skica preskače skrivene datoteke i nazive koji počinju točkom.

Returnstrue za skriveni unos.

f.close()returns bool

SdFat (FsFile): zatvara unos.

Returnstrue u slučaju uspjeha.

random(long min, long max)returns long

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

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

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

Postavlja SPI pinove kartice kao ulaze i isključuje napajanje kartice radi uštede energije u dubokom snu.

ReturnsNišta.

esp_deep_sleep_start()returns void

Paket 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

→