Zum Hauptinhalt springen

microSD-Galerie

Was dieses Beispiel zeigt​

Wählt ein zufälliges Bild aus dem Stammordner der microSD-Karte aus, zeichnet es und geht für 5 Minuten in den Deep Sleep. Wenn das Board aufwacht, läuft der Sketch wieder von vorn ab und wählt ein anderes Bild aus. Legen Sie vor dem Start einige .bmp-, .jpg- oder .png-Dateien in den Stammordner der Karte.

Dieses Beispiel verwendet außerdem die Deep-Sleep-Funktionen des ESP32 (arduino-esp32), die nicht Teil der Inkplate-Bibliothek sind und mit dem ESP32-Board-Package geliefert werden. SdFile und FsFile stammen aus der SdFat-Bibliothek, die in der Inkplate-Bibliothek enthalten ist.

Beispielcode​

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!
}

Verwendete Funktionen​

Inkplate()returns None

Erstellt das Inkplate-Objekt. Inkplate 7SPECTRA hat nur einen einzigen Sechs-Farben-Modus, daher benötigt der Konstruktor kein Modus-Argument (der Kommentar zum 1-Bit-Modus stammt von anderen Inkplate-Modellen).

ReturnsKonstruktor; kein Rückgabewert.

SdFile()returns None

SdFat: ein Dateiobjekt. Der Sketch erstellt eines als `file`, verwendet es aber nicht; stattdessen liest er die Karte mit FsFile-Objekten.

ReturnsKonstruktor; kein Rückgabewert.

inkplate.begin()returns void

Initialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.

ReturnsNichts.

inkplate.sdCardInit()returns int16_t

Schaltet die Stromversorgung der microSD-Karte ein, startet ihren SPI-Bus und bindet die Karte ein.

Returns1, wenn die Karte eingebunden wurde, 0, wenn nicht.

inkplate.getSdFat()returns SdFat &

Gibt Zugriff auf das SdFat-Objekt, das die Bibliothek für die Karte verwendet. Der Sketch öffnet damit den Stammordner der Karte.

ReturnsEine Referenz auf das SdFat-Objekt.

f.openNext(&root, O_RDONLY)returns bool

SdFat (FsFile): öffnet den nächsten Eintrag des Ordners. Der Sketch durchläuft alle Einträge des Stammordners, der schreibgeschützt geöffnet ist.

Returnstrue, wenn ein Eintrag geöffnet wurde.

f.getName(char *name, size_t size)returns size_t

SdFat (FsFile): kopiert den Namen des geöffneten Eintrags in den Puffer.

ReturnsDie Länge des Namens, 0 bei einem Fehler.

f.isFile()returns bool

SdFat (FsFile): ob der Eintrag eine Datei und kein Ordner ist.

Returnstrue bei einer Datei.

f.isHidden()returns bool

SdFat (FsFile): ob der Eintrag versteckt ist. Der Sketch überspringt versteckte Dateien und Namen, die mit einem Punkt beginnen.

Returnstrue bei einem versteckten Eintrag.

f.close()returns bool

SdFat (FsFile): schließt den Eintrag.

Returnstrue bei Erfolg.

random(long min, long max)returns long

Arduino-Core: eine Pseudozufallszahl von min bis ausschließlich max. Der Sketch wählt damit einen der gesammelten Dateinamen aus.

ReturnsDie Zufallszahl.

inkplate.image.draw(const String path, int x, int y, bool dither = 1, bool invert = 0)returns bool

Zeichnet die Bilddatei mit diesem Namen von der microSD-Karte, mit ihrer oberen linken Ecke bei (x, y); die Bibliothek wählt den Decoder anhand der Dateiendung (bmp, jpg oder png). Der Sketch zeichnet die gewählte Datei bei (0, 0) mit eingeschaltetem Standard-Dithering und ausgeschalteter Invertierung.

Returnstrue, wenn das Bild gezeichnet wurde.

inkplate.display(bool _leaveOn = 0)returns void

Sendet den gesamten Framebuffer an das Panel und aktualisiert es.

ReturnsNichts.

esp_sleep_enable_timer_wakeup(uint64_t time_in_us)returns esp_err_t

ESP32-Board-Package: weckt den Chip nach der angegebenen Zeit in Mikrosekunden aus dem Deep Sleep. Der Sketch übergibt 1000 × DELAY_MS, das sind 5 Minuten.

ReturnsESP_OK bei Erfolg.

inkplate.sdCardSleep()returns void

Setzt die SPI-Pins der Karte auf Eingänge und schaltet die Stromversorgung der Karte aus, um im Deep Sleep Strom zu sparen.

ReturnsNichts.

esp_deep_sleep_start()returns void

ESP32-Board-Package: versetzt den Chip in den Deep Sleep. Die Funktion kehrt nicht zurück; beim nächsten Aufwachen startet der Sketch von vorn, weshalb loop() leer bleibt.

ReturnsKehrt nicht zurück.

Was Sie erwarten können​

Der Bildschirm zeigt eines der Bilder aus dem Stammordner der Karte, gezeichnet in der oberen linken Ecke. Der Serial Monitor mit 115200 Baud listet die Namen aller gefundenen .bmp-, .jpg- und .png-Dateien auf, einen pro Zeile, dann eine leere Zeile, dann Drawn image: und den Namen des gezeichneten Bildes. Der Sketch speichert bis zu 100 Namen. Lässt sich die Karte nicht einbinden, gibt er failed opening sd aus; enthält die Karte keine Bilder, wird nichts gezeichnet. Nach 5 Minuten wacht das Board auf und wählt erneut aus.

🔗Vollständiges Beispiel öffnen

examples/Inkplate7SPECTRA/Diagnostics/Inkplate7SPECTRA_Gallery

→