Platformy
Platforma w Lopaka to docelowa biblioteka rysowania lub środowisko uruchomieniowe, które otrzymuje wygenerowany kod. Wybór platformy robi trzy rzeczy:
- Ogranicza edytor do modelu kolorów i czcionek, które rozumie biblioteka docelowa.
- Steruje generatorem kodu — każda platforma tworzy własną składnię i deklaracje.
- Określa, które ustawienia kodu są dostępne (funkcja opakowująca, deklaracje zmiennych, format eksportu obrazów itd.).
Platformę wybiera się przy tworzeniu projektu i nie można jej później zmienić: Ustawienia projektu pokazują ją jako tylko do odczytu. Aby użyć innej biblioteki, utwórz nowy projekt z tą platformą.
Wybór platformy
- OLED / monochromatyczny LCD (SSD1306, SH1106, SSD1309) — U8g2 lub AdafruitGFX Mono
- Kolorowy TFT (ILI9341, ST7789, GC9A01) — TFT_eSPI, ArduinoGFX lub AdafruitGFX Color
- Bogaty interfejs dotykowy na ESP32/STM32 — LVGL
- Flipper Zero / One — platforma Flipper
- Urządzenie inteligentnego domu ESPHome — ESPHome
- Wyświetlacz e-paper — GxEPD2
- RP2040 / ESP32 z MicroPython — MicroPython
- Płytka CircuitPython — CircuitPython
- Makieta lub tylko eksport obrazu — Rysowanie swobodne
Porównanie platform
| Platforma | Wyjście | Model kolorów | Czcionki | Obrazy |
|---|---|---|---|---|
| U8g2 | C / C++ | Monochromatyczny (1-bitowy) | BDF (duży zestaw) | XBMP |
| TFT_eSPI / M5 / Lovyan | C++ | RGB565 | GFX | XBMP, RGB565 |
| AdafruitGFX Color | C++ | RGB565 | GFX | XBMP, RGB565 |
| AdafruitGFX Mono | C++ | Monochromatyczny (1-bitowy) | GFX | XBMP |
| ArduinoGFX | C++ | RGB565 | GFX | XBMP, RGB565 |
| LVGL | C | RGB + alfa | Montserrat (TTF) | RGB565 |
| Flipper Zero / One | C | Monochromatyczny (1-bitowy) | 4 stałe czcionki | XBMP |
| ESPHome | YAML + lambda C++ | RGB | Google Fonts (TTF) | XBMP |
| MicroPython | Python | Monochromatyczny (1-bitowy) | Stała (Petme 8×8) | Surowy bufor |
| CircuitPython | Python | RGB | Terminus (BDF) | Surowy bufor |
| GxEPD2 | C++ | Paleta indeksowana | GFX | XBMP |
| Rysowanie swobodne | — | RGB | Wszystkie czcionki | — |
Narzędzia rysowania
To, które narzędzia pojawiają się na pasku narzędzi, zależy od aktywnej platformy. LVGL otrzymuje zestaw oparty na widżetach; wszystkie pozostałe platformy współdzielą zestaw rysowania prymitywów z drobnymi różnicami.
| Narzędzie | U8g2 | TFT_eSPI | AdaGFX | AdaMono | ArduGFX | LVGL | Flipper | ESPHome | µPy | CPy | GxEPD2 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Linia | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Prostokąt | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ | ✅ | ✅ |
| Okrąg | — | — | ✅ | ✅ | — | — | ✅ | ✅ | — | ✅ | ✅ |
| Elipsa | ✅ | ✅ | — | — | ✅ | — | — | — | ✅ | — | — |
| Trójkąt | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | ✅ | ✅ | ✅ | ✅ |
| Wielokąt | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | ✅ | ✅ | — |
| Łuk | — | ✅ | — | — | — | — | — | — | — | — | — |
| Łuk LVGL | — | — | — | — | — | ✅ | — | — | — | — | — |
| Tekst | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Malowanie | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Panel | — | — | — | — | — | ✅ | — | — | — | — | — |
| Przycisk | — | — | — | — | — | ✅ | — | — | — | — | — |
| Suwak | — | — | — | — | — | ✅ | — | — | — | — | — |
| Przełącznik | — | — | — | — | — | ✅ | — | — | — | — | — |
| Pole wyboru | — | — | — | — | — | ✅ | — | — | — | — | — |
| Obszar tekstowy | — | — | — | — | — | ✅ | — | — | — | — | — |
Obrót tekstu
U8g2, Flipper Zero / One, CircuitPython i LVGL obsługują natywny obrót tekstu o 0°, 90°, 180° lub 270°. Zaznacz warstwę tekstową i użyj przycisków obrotu w inspektorze.
Platformy
U8g2
Kierowana do biblioteki monochromatycznych wyświetlaczy U8g2. Generuje kod C++ (Arduino) lub C (ESP-IDF).
Pełny opis konfiguracji i integracji znajdziesz w przewodniku U8g2.
Kolor: binarny — biały (1) lub czarny (0). Dostępny tryb odwróconych kolorów.
Czcionki: dołączona duża biblioteka czcionek BDF. Nazwy czcionek kompilują się do u8g2_font_<name>_tr.
Obrazy: bitmapy XBMP deklarowane jako tablice image_<Name>_bits (U8X8_PROGMEM na Arduino) lub wyodrębniane do pobranego pliku zasobu .h.
Animacje: obsługiwane są wbudowane animacje monochromatyczne.
Szablony: Arduino (C++) i ESP-IDF (C) — każdy z przełącznikiem progmem.
Inspektor: wybór koloru jest ukryty — kolor jest zawsze binarny (ustawiany przez logikę wypełnienia/odwrócenia, a nie pole koloru). Warstwy trójkątów podążają za prymitywem U8g2 i są zawsze wypełnione, więc nie jest dla nich pokazywany przełącznik wypełnienia.
Ograniczenia: brak RGB. Brak własnych rozmiarów czcionek — rozmiar czcionki określa plik BDF.
TFT_eSPI / M5 / Lovyan
Obejmuje TFT_eSPI, M5Stack GFX i LovyanGFX — wszystkie mają tę samą powierzchnię API.
Pełny opis konfiguracji i integracji znajdziesz w przewodniku TFT_eSPI.
Kolor: pełny RGB, spakowany jako RGB565 (0xRRGG).
Czcionki: wbudowane Adafruit oraz czcionki GFX. Własne czcionki TrueType (.ttf, .otf, .woff) i BDF można przesyłać; przy imporcie są konwertowane do formatu GFX.
Obrazy: tablice pikseli XBMP (1-bitowe) lub RGB565 (image_<Name>_bits / image_<Name>_pixels), w tekście lub jako pobrane pliki zasobów .h. Przezroczyste piksele są wypełniane tłem ekranu, chyba że opcja Przezroczystość obrazu jest włączona; wtedy jednobitowa maska zachowuje ich przezroczystość (tft.pushMaskedImage).
Łuki: narzędzie Łuk generuje łuki w stylu TFT_eSPI z kolorami pierwszego planu i tła, konfigurowalnymi kątami i szerokością oraz opcjonalnie gładkimi krawędziami.
Szablony: Arduino (C++) lub ESP-IDF (C++). Szablon ESP-IDF pomija PROGMEM, millis() oraz setup() / loop() i mierzy czas animacji za pomocą esp_timer_get_time().
Ograniczenia: tylko RGB565 — brak częściowej alfy: przezroczysty piksel jest albo w pełni przezroczysty (przy włączonej Przezroczystości), albo wypełniony. Pozycja Y czcionek GFX jest dostosowywana automatycznie; sprawdź wyrównanie przy użyciu wielu czcionek.
AdafruitGFX Color
Kierowana do biblioteki Adafruit GFX na wyświetlaczach kolorowych.
Kolor: RGB565.
Czcionki: wbudowane Adafruit oraz czcionki GFX. Własne czcionki TrueType (.ttf, .otf, .woff) i BDF można przesyłać; przy imporcie są konwertowane do formatu GFX.
Obrazy: tablice pikseli XBMP lub RGB565 (image_<Name>_bits / image_<Name>_pixels), w tekście lub jako pobrane pliki zasobów .h. Przezroczyste piksele są wypełniane tłem ekranu, chyba że opcja Przezroczystość obrazu jest włączona; wtedy jednobitowa maska zachowuje ich przezroczystość (drawRGBBitmap z maską).
Animacje: obsługiwane są wbudowane animacje monochromatyczne.
Szablony: Arduino (C++) lub ESP-IDF (C++). Szablon ESP-IDF pomija PROGMEM, millis() oraz setup() / loop() i mierzy czas animacji za pomocą esp_timer_get_time().
Ograniczenia: zduplikowane deklaracje czcionek nie są deduplikowane — sprawdź wyjście, jeśli używasz tej samej czcionki na wielu warstwach.
AdafruitGFX Mono
Tak samo jak AdafruitGFX Color, ale dla monochromatycznych wyświetlaczy OLED/LCD (SSD1306, SH1106 itd.).
Kolor: binarny — 1 (biały) lub 0 (czarny). Paleta jest ustalona na #000000 / #ffffff.
Czcionki: ta sama biblioteka czcionek GFX co AdafruitGFX Color
Czyszczenie ekranu: wywołuje clearDisplay() zamiast fillScreen().
Animacje: obsługiwane są wbudowane animacje monochromatyczne.
Szablony: Arduino (C++) lub ESP-IDF (C++). Szablon ESP-IDF pomija PROGMEM, millis() oraz setup() / loop() i mierzy czas animacji za pomocą esp_timer_get_time().
Ograniczenia: brak RGB. Brak skali szarości.
ArduinoGFX
Kierowana do Arduino_GFX.
Kolor: RGB565, kodowanie z bajtem wysokim jako pierwszym (różni się od kolejności z bajtem niskim w Adafruit).
Czcionki: wbudowane Adafruit oraz czcionki GFX z własnym współczynnikiem skali. Własne czcionki TrueType (.ttf, .otf, .woff) i BDF można przesyłać; przy imporcie są konwertowane do formatu GFX.
Obrazy: tablice pikseli XBMP lub RGB565 (image_<Name>_bits / image_<Name>_pixels), w tekście lub jako pobrane pliki zasobów .h. Przezroczyste piksele są wypełniane tłem ekranu, chyba że opcja Przezroczystość obrazu jest włączona; wtedy jednobitowa maska zachowuje ich przezroczystość (draw16bitRGBBitmapWithMask).
Szablony: Arduino (C++) lub ESP-IDF (C++). Szablon ESP-IDF pomija PROGMEM, millis() oraz setup() / loop() i mierzy czas animacji za pomocą esp_timer_get_time().
Ograniczenia: te same ograniczenia RGB565 co TFT_eSPI. Niezgodność kolejności bajtów z Adafruit spowoduje nieprawidłowe kolory, jeśli skopiujesz bitmapy między tymi dwiema platformami.
LVGL
Kierowana do LVGL — bogatej w funkcje biblioteki wbudowanych interfejsów graficznych.
Kolor: pełny RGB. Obrazy RGB zachowują przezroczyste piksele dzięki płaszczyźnie alfa (RGB565A8), gdy opcja Przezroczystość obrazu jest włączona. Kolory są kodowane jako lv_color_hex(0xRRGGBB).
Czcionki: Montserrat TTF w dowolnych rozmiarach.
Widżety: obsługuje panele, przyciski, suwaki, przełączniki, pola wyboru, obszary tekstowe i widżety Łuk LVGL oprócz prymitywnych kształtów. Domyślne wartości widżetów (promień, obramowanie, kolor tła) odpowiadają domyślnym wartościom LVGL v9.
Renderer: używa gładkiego (wygładzanego) renderowania obszaru rysowania w edytorze, aby przybliżyć wyjście LVGL.
Obrazy: deskryptory obrazów RGB565 (lv_image_dsc_t) zgodne z v9, do pobrania jako plik zasobu <Name>.c.
Ograniczenia:
- W wyborze czcionek dostępna jest tylko Montserrat
- Własne widżety nie są obsługiwane — każda warstwa odpowiada jednemu wywołaniu
lv_obj_create - Wygenerowany kod jest kierowany do API C LVGL (v9)
Flipper Zero / One
Kierowana do API obszaru rysowania GUI Flipper Zero i Flipper One (canvas_draw_*).
Kolor: monochromatyczny. Domyślny kolor rysowania to czarny na pomarańczowym tle w edytorze.
Czcionki: tylko cztery stałe czcionki — FontPrimary (Helvetica 8 pogrubiona), FontSecondary (Haxrcorp 4089), FontKeyboard (ProFont 11), FontBigNumbers (ProFont 22). Brak własnych rozmiarów czcionek.
Gotowe rozmiary wyświetlacza: Zero Horizontal (128×64), Zero Vertical (64×128), One Horizontal (256×144), One Vertical (144×256).
Obrazy: bitmapy XBMP (image_<Name>_bits), w tekście lub jako samodzielny pobrany plik zasobu .h z tablicami uint8_t.
Animacje: obsługiwane są wbudowane i importowane animacje monochromatyczne. Wygenerowane wyjście zawiera pomocnicze funkcje odtwarzania oraz nagłówki C do pobrania zawierające klatki XBM.
Ograniczenia:
- Monochromatyczny
- Brak własnych czcionek
ESPHome
Kierowana do lambdy komponentu wyświetlacza ESPHome.
Pełny opis od projektu do wgrania znajdziesz w przewodniku ESPHome.
Wyjście: YAML z osadzonymi lambdami C++. Edytor Ace używa kolorowania składni YAML.
Kolor: pełny RGB kodowany jako Color(R, G, B).
Czcionki: Google Fonts przez gfonts:// oraz inne czcionki TTF. Deklaracje czcionek trafiają do klucza YAML najwyższego poziomu font:.
Obrazy: zasoby PNG do pobrania (<Name>.png) przywoływane przez YAML jako images/<Name>.png i deklarowane jako obrazy BINARY. Umieść pliki PNG w folderze images/ obok pliku YAML.
Brak zaokrąglonych rogów: API wyświetlacza ESPHome nie ma prymitywu prostokąta z zaokrąglonymi rogami.
Ograniczenia: tylko XBMP — brak eksportu bitmap RGB. Bloki font: i image: muszą znajdować się w korzeniu YAML, a nie wewnątrz ciągu lambda:.
MicroPython
Kierowana do modułu framebuf MicroPython na RP2040, ESP32 i podobnych.
Sterownik: wygenerowany kod oczekuje sterownika PerfecXX MicroPython-SSD1306, którego obiekt display udostępnia swój bufor ramki jako display.framebuf i dodaje display.polygon. Elipsy są rysowane za pomocą display.framebuf.ellipse(...), więc podgląd w edytorze odpowiada urządzeniu co do piksela. Standardowy ssd1306.py z micropython-lib nie ma display.framebuf i zawodzi przy elipsach, trójkątach i wielokątach.
Wyjście: Python. Edytor Ace używa kolorowania składni Python.
Kolor: monochromatyczny — 1 (biały) lub 0 (czarny). Paleta jest ustalona na czarny i biały.
Czcionki: jedna wbudowana czcionka (Petme 8×8). Wybór czcionki nie jest dostępny.
Obrazy: surowe bufory bytearray (spakowane 1-bitowo, wiersz po wierszu) lub pobrany zasób .pbm (image_<Name>_bits.pbm), który Uwzględnij pliki obrazów wczytuje przy starcie.
Ograniczenia:
- Monochromatyczny
- Dostępna jest tylko wbudowana czcionka Petme 8×8
- Zaokrąglone rogi nie są obsługiwane
- Ograniczone prymitywy rysowania w porównaniu z innymi platformami.
- Trójkąty są tylko konturowe.
CircuitPython
Kierowana do stosu displayio i vectorio CircuitPython.
Wyjście: Python. Edytor Ace używa kolorowania składni Python.
Kolor: RGB, kodowany jako 24-bitowy hex (0xRRGGBB).
Czcionki: dołączona czcionka BDF Terminus. Wybór czcionki nie jest pokazywany w interfejsie — czcionka jest stała.
Obrazy: zasoby displayio.OnDiskBitmap (image_<Name>_bits.bmp) wczytywane z systemu plików urządzenia.
Ograniczenia:
- czcionka jest ustalona na BDF Terminus
- Piksele obrazów znajdują się w pobranych plikach
.bmp— skopiuj je obok swojego kodu
GxEPD2
Kierowana do biblioteki wyświetlaczy e-paper GxEPD2. Rozszerza AdafruitGFX.
Kolor: paleta indeksowana 9 nazwanych stałych — GxEPD_BLACK, GxEPD_WHITE, GxEPD_DARKGREY, GxEPD_LIGHTGREY, GxEPD_RED, GxEPD_YELLOW, GxEPD_BLUE, GxEPD_GREEN, GxEPD_ORANGE. Kolory spoza tej palety mapują się na GxEPD_BLACK.
Czcionki: wbudowane Adafruit oraz czcionki GFX (dziedziczy po platformie Adafruit). Własne czcionki TrueType (.ttf, .otf, .woff) i BDF można przesyłać; przy imporcie są konwertowane do formatu GFX.
Obrazy: tylko XBMP, do pobrania jako plik zasobu .h.
Tło: jasnoszare tło edytora (#f8f8f8), aby przybliżyć biel e-paperu.
Ograniczenia: paleta jest stała — brak dowolnych kolorów hex. Częściowe odświeżanie i tryby aktualizacji nie są modelowane w edytorze.
Rysowanie swobodne
Tryb tylko do projektowania, bez eksportu kodu. Przydatny do makiet i udostępniania projektów bez kierowania do konkretnej biblioteki.
Kolor: pełny RGB.
Czcionki: dostępne są wszystkie czcionki TTF, BDF i GFX.
Kod: brak wyjścia. Panel kodu jest pusty.
Ograniczenia: nie można używać do generowania kodu. Brak obsługi importu.