Przewodnik Adafruit GFX dla ESP32 i Arduino
Ten samouczek Adafruit GFX przeprowadzi projekt wyświetlacza ESP32 lub Arduino od pustego obszaru rysowania w Lopaka do działającego sprzętu. Lopaka tworzy kod rysowania i zasoby bitmap; ty wybierasz, podłączasz i inicjujesz bibliotekę wyświetlacza właściwą dla sprzętu.
Czym jest biblioteka Adafruit GFX?
Adafruit GFX to wspólna warstwa graficzna używana przez wiele bibliotek wyświetlaczy dla płytek zgodnych z Arduino, w tym ESP32. Udostępnia metody rysowania pikseli, linii, kształtów, tekstu i bitmap.
Adafruit GFX sama nie steruje wyświetlaczem. Współpracuje z biblioteką właściwą dla sprzętu, taką jak Adafruit_SSD1306, Adafruit_ST7789 lub inny sterownik dla dokładnego kontrolera w twoim module. Sterownik obsługuje magistralę, inicjowanie i przesyłanie danych do wyświetlacza; GFX dostarcza wspólne API rysowania. Zobacz omówienie biblioteki Adafruit, aby znaleźć przykłady tego podziału.
Zanim zaczniesz
Potrzebujesz:
- Mikrokontrolera i wyświetlacza ze sterownikiem zgodnym z Adafruit GFX.
- Nazwy kontrolera, rozdzielczości, interfejsu i wyprowadzeń twojego modułu.
- Projektu Arduino lub ESP32 używającego frameworka Arduino, który potrafi skompilować i wgrać przykładowy szkic sterownika.
- Wystarczającej ilości pamięci flash na czcionki i zasoby bitmap oraz wystarczającej ilości RAM na każdy bufor ramki używany przez sterownik.
Uwaga
Lopaka nie wykrywa twojego kontrolera ani nie generuje okablowania i konfiguracji sterownika. Wyświetlacze o tej samej rozdzielczości mogą wymagać różnych bibliotek, konstruktorów, adresów, pinów, wywołań inicjujących lub przesunięć wyświetlacza.
Krok 0: Zainstaluj i przetestuj sterownik wyświetlacza
W Arduino IDE otwórz Tools → Manage Libraries i wyszukaj sterownik używany przez twój wyświetlacz, na przykład Adafruit SSD1306 lub Adafruit ST7735 and ST7789 Library. Obecne wersje Arduino IDE instalują zadeklarowane zależności, takie jak Adafruit GFX i Adafruit BusIO, wraz ze sterownikiem. Jeśli instalujesz biblioteki ręcznie, postępuj zgodnie z instrukcjami repozytorium Adafruit GFX oraz repozytorium swojego sterownika wyświetlacza.
W przypadku warstw elipsy zainstaluj Adafruit GFX 1.12.2 lub nowszą. API 1.12.2 zawiera drawEllipse() i fillEllipse(); 1.12.1 ich nie zawiera.
W przypadku ESP32 zainstaluj rdzeń Arduino dla ESP32 i wybierz swoją płytkę. Szkice ESP32 używają tej samej struktury setup() i loop(), którą pokazuje ten przewodnik.
Zanim dodasz kod z Lopaka, skompiluj i wgraj oficjalny przykład dla swojego dokładnego wyświetlacza. Na przykład:
Działający przykład producenta dowodzi, że biblioteka, konstruktor, okablowanie, adres, magistrala i inicjowanie są poprawne. Zachowaj ten przykład jako szkic bazowy i zastąp tylko jego demonstracyjne wywołania rysowania danymi wyjściowymi z Lopaka.
Krok 1: Wybierz platformę Lopaka
Lopaka ma dwa cele Adafruit GFX:
| Platforma Lopaka | Używaj jej do | Generowany obiekt | Wyjście koloru i obrazu |
|---|---|---|---|
| AdafruitGFX Color | Kolorowe sterowniki TFT, OLED lub matryc | tft | Kolory RGB565; jednobitowe obrazy drawBitmap() lub RGB565 drawRGBBitmap() |
| AdafruitGFX Mono | Jednobitowe sterowniki OLED lub LCD | display | Kolory 0 i 1; jednobitowe obrazy drawBitmap() |
Wybierz cel, który pasuje do sterownika, a nie tylko do wyglądu projektu. Cel monochromatyczny nie generuje pikseli RGB ani w skali szarości. Cel kolorowy pakuje kolory do 16-bitowych wartości RGB565 używanych przez Adafruit GFX; zobacz model współrzędnych i kolorów Adafruit.
Nazwa generowanego obiektu jest częścią umowy integracji. Najprostsze podejście to nazwanie instancji sterownika tft dla wyjścia kolorowego lub display dla wyjścia monochromatycznego. W przeciwnym razie zmień nazwę tego identyfikatora w wygenerowanym bloku.
Krok 2: Utwórz projekt w Lopaka
- Otwórz lopaka.app i utwórz projekt.
- Wybierz AdafruitGFX Color lub AdafruitGFX Mono.
- Ustaw Rozmiar ekranu na logiczną szerokość i wysokość, których będzie używał twój szkic.
- W projekcie kolorowym wybierz kolor tła ekranu. W projekcie monochromatycznym projektuj przy użyciu stałej czarno-białej palety.
Współrzędne Adafruit GFX zaczynają się w (0, 0) w lewym górnym rogu, przy czym X rośnie w prawo, a Y rośnie w dół. Lopaka używa tej samej orientacji.
Jeśli szkic wywołuje setRotation(), dopasuj obszar rysowania Lopaka do obróconych wymiarów logicznych zwracanych przez width() i height(). Lopaka nie emituje setRotation() ani nie obraca sprzętu za ciebie. Adafruit dokumentuje cztery orientacje w sekcji Obracanie wyświetlacza.
Krok 3: Zaprojektuj ekran
Umieszczaj warstwy za pomocą paska narzędzi, porządkuj je w panelu warstw i edytuj ich wartości w inspektorze. Zmień nazwy ważnych warstw przed eksportem: nazwy stają się komentarzami, identyfikatorami bitmap, nazwami funkcji pomocniczych wielokątów, nagłówkami animacji i opcjonalnymi nazwami zmiennych.
Obecne generatory Adafruit GFX emitują te pojęcia:
| Warstwa Lopaka | Wyjście Adafruit GFX |
|---|---|
| Linia | drawLine() |
| Prostokąt | drawRect() / fillRect() |
| Zaokrąglony prostokąt | drawRoundRect() / fillRoundRect() |
| Koło | drawCircle() / fillCircle() |
| Elipsa | drawEllipse() / fillEllipse() |
| Trójkąt | drawTriangle() / fillTriangle() |
| Wielokąt | Funkcja pomocnicza zbudowana z zamkniętych wywołań drawLine(); tylko kontur |
| Tekst | setTextColor(), setTextSize(), setFont(), setCursor(), print() |
| Malowanie, ikona, obraz | drawBitmap() lub, w celu kolorowym, drawRGBBitmap() |
| Animacja | Jednobitowe dane klatek oraz funkcje pomocnicze wyboru i rysowania klatek |
Używaj narzędzia Elipsa do owalnych kształtów w obu celach Adafruit. Ustaw jej promienie poziomy i pionowy na równe, aby narysować koło; zaimportowane warstwy koła nadal generują drawCircle() lub fillCircle().
Zachowanie tekstu
Domyślna czcionka Adafruit to wbudowana czcionka o stałej szerokości 5×7. Inne czcionki GFX używają linii bazowej: współrzędna Y kursora to linia, na której opierają się glify, a nie góra widocznych liter. Lopaka dostosowuje wygenerowaną współrzędną Y do wybranej czcionki, ale nadal powinieneś sprawdzić wyrównanie na rzeczywistym wyświetlaczu.
Cel kolorowy udostępnia kolor tła tekstu i emituje dwuargumentową formę setTextColor(foreground, background). Adafruit GFX ignoruje ten argument tła dla niestandardowych czcionek GFX; działa on tylko z klasyczną wbudowaną czcionką. Aby nadpisać tekst w niestandardowej czcionce, wyczyść jego dawne granice wypełnionym prostokątem, zanim narysujesz go ponownie. Monochromatyczny cel Lopaka nie udostępnia teł tekstu. Zobacz uwagi Adafruit o zachowaniu czcionek i linii bazowej.
Krok 4: Skonfiguruj wygenerowany kod
Otwórz Ustawienia kodu. Cele Adafruit GFX mają dwa szablony C++ i te opcje:
Składnia wybiera framework docelowy. Arduino (C++) jest domyślna. ESP-IDF (C++) emituje te same wywołania rysowania dla komponentu ESP-IDF: tablice obrazów, masek i animacji to zwykłe tablice static const uint8_t / uint16_t bez PROGMEM, czas animacji używa esp_timer_get_time() z esp_timer.h, a żaden setup() / loop() nie jest generowany — wywołuj draw{ScreenName}() i drawAnimations() z pętli własnego zadania. Pobrane nagłówki obrazów i animacji podążają za wybranym szablonem.
| Ustawienie | Co zmienia |
|---|---|
| Funkcja opakowująca | Opakowuje aktywny ekran w void draw{ScreenName}(void) |
| Dołącz czcionki | Dodaje dołączenia lokalnych nagłówków dla czcionek GFX innych niż domyślna |
| Deklaruj obrazy | Emituje jednobitowe lub RGB565 tablice bitmap używane przez warstwy obrazów |
| Dołącz pliki obrazów | Emituje #include "<symbol>.h" zamiast tablic bitmap w linii |
| Funkcje pomocnicze animacji | Dodaje dołączenia nagłówków animacji, funkcje pomocnicze czasu i startowe setup/loop |
| Deklaruj zmienne | Emituje deklaracje dla obsługiwanych właściwości warstw oznaczonych jako zmienne |
| Komentarze, tytuły warstw | Dodaje komentarze z nazwami warstw do statycznego wyjścia rysowania |
| Wyczyść/wypełnij wyświetlacz | Czyści wyjście mono lub wypełnia wyjście kolorowe na początku bloku rysowania |
Pozostaw włączone opcje Funkcja opakowująca, Dołącz czcionki, Deklaruj obrazy i Wyczyść/wypełnij wyświetlacz przy pierwszym renderowaniu.
Opakowanie kolorowe zaczyna się od tft.fillScreen(...). Opakowanie monochromatyczne zaczyna się od display.clearDisplay() i kończy na display.display(), aby buforowany wyświetlacz, taki jak SSD1306, został zaktualizowany. Niektóre inne sterowniki monochromatyczne używają innej metody odświeżania; dostosuj końcowe wywołanie do oficjalnego przykładu swojego sterownika.
Krok 5: Dodaj czcionki, obrazy i animacje
Czcionki
Wbudowana czcionka Adafruit 5×7 nie potrzebuje nagłówka. Lopaka oferuje także czcionki GFX i przyjmuje zaimportowane nagłówki czcionek w formacie GFX. Może konwertować obsługiwane importy BDF i czcionek wektorowych do formatu GFX; zobacz przewodnik po czcionkach Lopaka, aby poznać dostępne ścieżki importu.
Dla każdej czcionki innej niż domyślna używanej przez ekran:
- Otwórz Ustawienia kodu → Czcionki i pobierz plik
.h. - Umieść plik obok swojego szkicu lub wygenerowanego kodu źródłowego.
- Pozostaw włączoną opcję Dołącz czcionki, aby wygenerowane
#include "FontName.h"pozostało obecne.
Dane czcionek zajmują przestrzeń programu, a większe czcionki zajmują jej więcej. Przewodnik po czcionkach Adafruit wyjaśnia dołączoną rodzinę Free i format czcionki GFX.
Obrazy
Użyj narzędzia Obraz, aby zaimportować i przyciąć obraz w jego końcowym rozmiarze w pikselach. Wyjście zależy od wybranego celu Lopaka i trybu koloru obrazu:
- Monochromatyczny: jednobitowa tablica
PROGMEMrysowana wybranym kolorem pierwszego planu. Nieustawione piksele są przezroczyste w wygenerowanym wywołaniudrawBitmap(). - RGB w AdafruitGFX Color: tablica RGB565
uint16_t PROGMEMrysowana za pomocądrawRGBBitmap(). Zaimportowany obraz wypełnia swoje przezroczyste piksele tłem ekranu, na obszarze rysowania i na urządzeniu. Aby pozostały przezroczyste, zaznacz Przezroczystość obok Nakładka w inspektorze (pojawia się, gdy obraz ma przezroczyste piksele): Lopaka emituje wtedy także jednobitową tablicęimage_<Name>_maski używa przeciążeniadrawRGBBitmap()z maską, więc te piksele zachowują to, co ekran już pokazuje. Maska kosztuje jeden bit pamięci flash na piksel, a wywołanie z maską rysuje piksel po pikselu, co jest wolniejsze.
Pozostaw włączoną opcję Deklaruj obrazy, aby dołączać tablice do kopiowanego kodu. RGB565 używa dwóch bajtów na piksel przed narzutem kompilatora i przechowywania, więc duże obrazy na cały ekran mogą zużyć znaczną ilość pamięci flash. Przewodnik po imporcie obrazów Lopaka obejmuje zmianę rozmiaru, przycinanie, ponowne próbkowanie, dithering i szacowanie rozmiaru. Adafruit dokumentuje bazowe wywołania bitmap w sekcji Prymitywy graficzne.
Ustawienia kodu → Obrazy wyświetla też każdy obraz z jego plikiem zasobu — image_<Name>_bits.h dla danych jednobitowych, image_<Name>_pixels.h dla RGB565 — zawierającym dokładnie te same bajty co tablica w linii. Włącz Dołącz pliki obrazów, aby emitować #include "image_<Name>_bits.h" zamiast tablicy i przechowywać piksele w pobranym nagłówku.
Animacje
Oba cele Adafruit w Lopaka obsługują animacje klatek. Wyeksportowane klatki to jednobitowe bitmapy, także w celu kolorowym; wybrany kolor warstwy jest stosowany, gdy każda klatka jest rysowana. Nie jest to odtwarzanie wideo w pełnym kolorze.
Pobierz każdy plik .h wymieniony w sekcji Ustawienia kodu → Animacje i trzymaj go razem ze szkicem. Funkcja pomocnicza wybiera klatkę za pomocą millis() w składni Arduino (C++) i esp_timer_get_time() w składni ESP-IDF (C++).
Uwaga
W składni Arduino (C++) eksport animacji dodaje standardowe punkty wejścia Arduino setup() i loop(), które działają też na ESP32 z rdzeniem Arduino. Kod wyświetlacza wewnątrz wygenerowanego setup() to tylko punkt startowy: sterowniki Adafruit używają różnych wywołań inicjujących. Połącz dołączenia animacji, funkcję pomocniczą aktualizacji i funkcje pomocnicze rysowania z działającym przykładem producenta, zachowaj konstruktor i inicjowanie tego sterownika i zachowaj tylko jeden setup() i jeden loop().
Zobacz Animacje, aby poznać przebieg pracy w edytorze i elementy sterujące eksportem.
Krok 6: Skopiuj i zintegruj kod
Utwórz ekran o nazwie Main, dodaj warstwę tekstową i prostokąt w konturze, a następnie kliknij Kopiuj w panelu kodu. Twoje dokładne dane wyjściowe będą używać twoich warstw, kolorów, czcionek i współrzędnych.
Przykład kolorowy TFT ST7789
Dla AdafruitGFX Color reprezentatywna funkcja Lopaka wygląda tak:
void drawMain(void) {
tft.fillScreen(0x0);
// Greeting
tft.setTextColor(0xFFFF);
tft.setCursor(8, 12);
tft.print("Hello!");
// Border
tft.drawRect(0, 0, 240, 240, 0xFFFF);
}Poniższy minimalny szkic podąża za oficjalnym przykładem Adafruit dla ST7789 240×240. Zastąp definicje pinów i argumenty init() tymi z działającego przykładu dla twojego modułu.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#define TFT_CS 10
#define TFT_DC 8
#define TFT_RST 9
Adafruit_ST7789 tft(TFT_CS, TFT_DC, TFT_RST);
// Paste the complete Lopaka-generated block here.
void drawMain(void) {
tft.fillScreen(0x0);
// Greeting
tft.setTextColor(0xFFFF);
tft.setCursor(8, 12);
tft.print("Hello!");
// Border
tft.drawRect(0, 0, 240, 240, 0xFFFF);
}
void setup(void) {
tft.init(240, 240);
tft.setRotation(0);
drawMain();
}
void loop(void) {}Kolorowe sterowniki TFT zazwyczaj rysują bezpośrednio na wyświetlaczu, więc ten przykład nie potrzebuje osobnego wywołania prezentacji ani opróżniania. Postępuj zgodnie z przykładem właściwym dla sprzętu, jeśli twój sterownik buforuje dane wyjściowe.
Przykład monochromatyczny OLED SSD1306
Dla AdafruitGFX Mono opakowanie zawiera wywołania czyszczenia i odświeżania:
void drawMain(void) {
display.clearDisplay();
// Greeting
display.setTextColor(1);
display.setCursor(8, 12);
display.print("Hello!");
// Border
display.drawRect(0, 0, 128, 64, 1);
display.display();
}Ten minimalny szkic podąża za oficjalnym przykładem Adafruit dla SSD1306 128×64 I2C. Zastąp pin resetu i adres I2C wartościami dla twojego modułu.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3D
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// Paste the complete Lopaka-generated block here.
void drawMain(void) {
display.clearDisplay();
// Greeting
display.setTextColor(1);
display.setCursor(8, 12);
display.print("Hello!");
// Border
display.drawRect(0, 0, 128, 64, 1);
display.display();
}
void setup(void) {
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
for (;;) {}
}
drawMain();
}
void loop(void) {}Krok 7: Dodaj dane w czasie rzeczywistym i więcej ekranów
Aby uczynić obsługiwaną właściwość dynamiczną, włącz jej przełącznik zmiennej w inspektorze i pozostaw włączoną opcję Deklaruj zmienne. Lopaka zastępuje literał deklaracją opartą na nazwie warstwy. Zaktualizuj tę wartość w swojej aplikacji przed ponownym wywołaniem funkcji rysowania.
Każdy ekran Lopaka eksportuje się osobno, a jego tytuł staje się nazwą funkcji opakowującej. Skopiuj funkcję każdego ekranu do szkicu, połącz zduplikowane dołączenia i zasoby, a następnie pozwól aplikacji zdecydować, którą funkcję wywołać:
enum Screen { MAIN, DETAILS };
Screen currentScreen = MAIN;
void drawCurrentScreen(void) {
if (currentScreen == MAIN) {
drawMain();
} else {
drawDetails();
}
}Co obsługuje Lopaka, a co ty
| Co obsługuje Lopaka | Co obsługujesz ty |
|---|---|
| Układ pikseli, kolejność warstw i obsługiwane wywołania GFX | Dokładny sterownik wyświetlacza, konstruktor, piny, magistrala i napięcie |
| Kolory RGB565 dla celu kolorowego | Kolejność kolorów, przesunięcia i inicjowanie właściwe dla sterownika |
| Jednobitowe i RGB565 deklaracje bitmap | Budżet pamięci flash/RAM i każde ładowanie z systemu plików lub karty SD |
| Wybór czcionek GFX i lokalne nagłówki do pobrania | Instalowanie bibliotek i trzymanie nagłówków razem z kodem źródłowym |
| Opcjonalne zmienne i jednobitowe funkcje pomocnicze animacji | Czas odświeżania, wejście, nawigacja i stan aplikacji |
| Nazwana funkcja rysowania dla każdego wyeksportowanego ekranu | Wywoływanie tej funkcji i poprawne prezentowanie buforowanego wyjścia |
Kompiluj, wgraj i iteruj
- Skompiluj przed wgraniem. Najpierw rozwiąż brakujące nagłówki, niezdefiniowane obiekty i błędy metod właściwych dla sterownika.
- Wgraj i porównaj fizyczny wyświetlacz z obszarem rysowania Lopaka.
- W razie potrzeby dostosuj wariant sterownika, adres, obrót, rozmiar obszaru rysowania lub pozycje warstw.
- Gdy projekt się zmieni, zastąp cały wygenerowany blok, zamiast ręcznie utrzymywać pojedyncze wywołania rysowania.
Trzymaj kod sprzętu i aplikacji poza wygenerowaną sekcją:
// BEGIN LOPAKA GENERATED CODE
// Replace this entire block after exporting again.
// END LOPAKA GENERATED CODERozwiązywanie problemów
Wyświetlacz jest pusty
- Przywróć i wgraj oficjalny przykład sterownika. Jeśli on też jest pusty, sprawdź zasilanie, napięcie, masę, okablowanie, kontroler, adres, reset i piny magistrali.
- Potwierdź, że metoda inicjowania sterownika kończy się powodzeniem przed wywołaniem funkcji Lopaka.
- Potwierdź, że nazwa wygenerowanego obiektu pasuje do twojej instancji:
tftdla koloru lubdisplaydla mono. - W przypadku buforowanego sterownika, takiego jak SSD1306, wywołaj jego metodę odświeżania po rysowaniu. Szablon mono Lopaka emituje
display.display(); inny sterownik może wymagać innej metody.
Obraz jest przesunięty, przycięty, odbity lub obrócony
Dopasuj obszar rysowania Lopaka do wymiarów logicznych po setRotation(). Użyj dokładnego wariantu sterownika dla panelu: pamięć RAM kontrolera może być większa niż widoczny obszar, a niektóre moduły potrzebują przesunięć właściwych dla sterownika.
Kolory są nieprawidłowe
Cel kolorowy emituje wartości RGB565. Potwierdź, że biblioteka właściwa dla sprzętu oczekuje standardowych 16-bitowych wartości kolorów Adafruit GFX i że jej inicjowanie wybiera poprawny wariant panelu. Jeśli czerwony i niebieski są zamienione, zbadaj kolejność kolorów lub konfigurację panelu sterownika, zamiast zmieniać każdy kolor w Lopaka.
Niestandardowa czcionka nie kompiluje się lub nie jest wyrównana
- Pobierz jej plik
.hz sekcji Ustawienia kodu → Czcionki i umieść go obok szkicu. - Pozostaw włączoną opcję Dołącz czcionki i potwierdź, że nazwa pliku, dołączana nazwa i symbol GFX są zgodne.
- Pamiętaj, że niestandardowe czcionki GFX używają linii bazowej i ignorują argument tła funkcji
setTextColor(). - Użyj mniejszej liczby czcionek lub mniejszych czcionek, jeśli program przekracza pojemność pamięci flash.
Obraz nie kompiluje się lub używa zbyt dużo pamięci flash
Pozostaw włączoną opcję Deklaruj obrazy, jeśli wygenerowane wywołanie rysowania odwołuje się do bitmapy w linii. Przytnij źródło i zmień jego rozmiar do końcowych wymiarów. Przełącz prostą ikonę z RGB na monochromatyczną, gdy wystarczy jeden kolor pierwszego planu.
Kod animacji koliduje z moim szkicem
Zachowaj jeden setup() i jeden loop(). Zachowaj inicjowanie sterownika z oficjalnego przykładu sprzętowego, a następnie połącz wygenerowany nagłówek animacji, funkcję aktualizującą i funkcje rysowania. Animacje Lopaka używają jednobitowych klatek; nie zachowują klatek wideo RGB.
Częste pytania
Czy Lopaka obsługuje każdy wyświetlacz Adafruit?
Lopaka celuje we wspólne API rysowania Adafruit GFX, a nie w listę modułów wyświetlaczy. Wyświetlacz jest praktycznym dopasowaniem, gdy ma sterownik zgodny z Adafruit GFX dla twojego środowiska Arduino lub ESP32 i ten sterownik obsługuje metody emitowane dla twojego projektu. Zweryfikuj dokładny moduł za pomocą jego oficjalnego przykładu sterownika.
Czy Lopaka instaluje lub konfiguruje Adafruit GFX?
Nie. Zainstaluj sterownik właściwy dla sprzętu i jego zależności, utwórz obiekt wyświetlacza i zainicjuj go w swoim szkicu. Lopaka dostarcza wywołania rysowania i zasoby.
Czy cel kolorowy może eksportować obrazy w pełnym kolorze?
Tak. Warstwy obrazów RGB generują tablice RGB565 i wywołania drawRGBBitmap(), z opcjonalną jednobitową maską dla przezroczystych pikseli w celu kolorowym (pole wyboru Przezroczystość). Monochromatyczne warstwy obrazów i wszystkie klatki animacji pozostają jednobitowe na piksel. Eksport bitmap w skali szarości nie jest obsługiwany przez szablony Adafruit w Lopaka.