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
#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 NoneErstellt 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 NoneSdFat: 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 voidInitialisiert die Bibliothek, die Peripherie und den Framebuffer. Rufen Sie sie einmal in setup() auf.
ReturnsNichts.
inkplate.sdCardInit()returns int16_tSchaltet 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 boolSdFat (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_tSdFat (FsFile): kopiert den Namen des geöffneten Eintrags in den Puffer.
ReturnsDie Länge des Namens, 0 bei einem Fehler.
f.isFile()returns boolSdFat (FsFile): ob der Eintrag eine Datei und kein Ordner ist.
Returnstrue bei einer Datei.
f.isHidden()returns boolSdFat (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 boolSdFat (FsFile): schließt den Eintrag.
Returnstrue bei Erfolg.
random(long min, long max)returns longArduino-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 boolZeichnet 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 voidSendet den gesamten Framebuffer an das Panel und aktualisiert es.
ReturnsNichts.
esp_sleep_enable_timer_wakeup(uint64_t time_in_us)returns esp_err_tESP32-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 voidSetzt 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 voidESP32-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