DEKI/ENGINE docs
deki-lovyangfx-integration 0.19.0
Deki package reference
deki-lovyangfx-integration

LovyanGFX display and touch panel integration

Repository: github.com/dekiengine/deki-lovyangfx-integration · Latest release: 0.19.0 · Needs engine 0.19.0+ · Requires: deki-i2c, deki-input

Install with DekiEditor --packages-add deki-lovyangfx-integration <project>, or from the Package Manager. The engine's own components and C++ API are in the Deki docs.

Shown in the editor as LovyanGFX Integration.

Components

Component Category Description
LGFXDisplayPanel LovyanGFX Drives a display panel (ILI9341, ST7789, GC9A01, RM67162 AMOLED, ...) over SPI, QSPI or a parallel bus through LovyanGFX.
LGFXTouchPanel LovyanGFX Reads a touch controller (FT5x06, GT911, CST816S, XPT2046) through LovyanGFX.

Feature flags

Parts you can leave out of a build. A feature with a define is switched there; the rest are stripped with their components.

Feature Define Default
Display Panel DEKI_FEATURE_LGFX_DISPLAY_PANEL on
Touch Panel DEKI_FEATURE_LGFX_TOUCH_PANEL on

Component reference

LGFXDisplayPanel

Drives a display panel (ILI9341, ST7789, GC9A01, RM67162 AMOLED, ...) over SPI, QSPI or a parallel bus through LovyanGFX.

Inspector name: LGFX Display Panel · Category: LovyanGFX · Type: DekiLovyanGfx::LGFXDisplayPanel

Property Type Default Constraints Description
panelType enum "ILI9341" ILI9341, ST7789, ST7735, GC9A01, SSD1351, ST7789P3, RM67162 Display panel driver IC
panelWidth int32 320 1 to 1024 Display width in pixels
panelHeight int32 240 1 to 1024 Display height in pixels
rotation enum "Landscape" Portrait, Landscape, Portrait180, Landscape270, PortraitMirror, LandscapeMirror, Portrait180Mirror, Landscape270Mirror Display rotation
offsetX int32 0 Pixel offset X (for panels with non-zero origin)
offsetY int32 0 Pixel offset Y (for panels with non-zero origin)
invertColor bool false Invert display colors
rgbOrder bool false Swap R and B color channels (RGB vs BGR)
busType enum "Parallel8bit" SPI, Parallel8bit, Parallel16bit, QSPI Display bus type
mosiPin int32 -1 -1 to 48; shown when busType allows SPI MOSI pin
misoPin int32 -1 -1 to 48; shown when busType allows SPI MISO pin (-1 = not used)
clkPin int32 -1 -1 to 48; shown when busType allows SPI clock pin
dcPin int32 -1 -1 to 48; shown when busType allows SPI data/command pin
spiPort int32 0 0 to 2; shown when busType allows SPI host, as ESP-IDF numbers them (on an ESP32-S3: 1 = SPI2, 2 = SPI3)
spiWriteHz int32 40000000 shown when busType allows SPI write frequency in Hz
io0Pin int32 -1 -1 to 48; shown when busType allows QSPI data pin IO0
io1Pin int32 -1 -1 to 48; shown when busType allows QSPI data pin IO1
io2Pin int32 -1 -1 to 48; shown when busType allows QSPI data pin IO2
io3Pin int32 -1 -1 to 48; shown when busType allows QSPI data pin IO3
parWriteHz int32 40000000 shown when busType allows Parallel bus write frequency in Hz
rsPin int32 -1 -1 to 48; shown when busType allows Register select / data-command pin (RS/DC)
wrPin int32 -1 -1 to 48; shown when busType allows Parallel bus write strobe pin
rdPin int32 -1 -1 to 48; shown when busType allows Parallel bus read strobe pin (-1 = not used)
d0Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D0
d1Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D1
d2Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D2
d3Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D3
d4Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D4
d5Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D5
d6Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D6
d7Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D7
d8Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D8
d9Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D9
d10Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D10
d11Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D11
d12Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D12
d13Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D13
d14Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D14
d15Pin int32 -1 -1 to 48; shown when busType allows Parallel data pin D15
csPin int32 -1 -1 to 48 Chip select pin (-1 = not used)
rstPin int32 -1 -1 to 48 Reset pin (-1 = not connected)
blPin int32 -1 -1 to 48 Backlight pin (-1 = none)
blPwmChannel int32 0 0 to 15 PWM channel for backlight
blInvert bool false Invert backlight signal (active low)
blBrightness int32 255 0 to 255 Backlight brightness at start, 0-255 (PWM duty). 255 holds the pin high. A backlight driver dimmed by counting pulses (the LilyGO T-Deck's) needs 255: a PWM wave steps it through its levels, which flickers
swapBytes bool false Swap RGB565 byte order for display transfer
memoryWidth int32 320 1 to 1024 Panel memory width (may differ from visible width)
memoryHeight int32 240 1 to 1024 Panel memory height (may differ from visible height)
usePsram bool false Keep the framebuffer in PSRAM instead of internal RAM: frees a screen's worth of internal RAM, drawing is slower
doubleBuffer bool false Use double buffering for async DMA (overlaps render and display transfer)
asyncPresent bool false Send each frame from the chip's other core while the next is drawn: a frame costs the longer of drawing and sending instead of both. Takes two frames of external memory (PSRAM) and a dual-core chip; for a byte-swapped panel (swapBytes) presenting whole frames.

LGFXTouchPanel

Reads a touch controller (FT5x06, GT911, CST816S, XPT2046) through LovyanGFX.

Inspector name: LGFX Touch Panel · Category: LovyanGFX · Type: DekiLovyanGfx::LGFXTouchPanel

Property Type Default Constraints Description
driverType enum "FT5x06" FT5x06, GT911, CST816S, XPT2046 Touch controller IC
i2cPort int32 0 0 to 3; shown when driverType allows I2C bus port (must match an I2C Bus component in the boot scene)
csPin int32 -1 -1 to 48; shown when driverType allows SPI chip select pin (-1 = not used)
mosiPin int32 -1 -1 to 48; shown when driverType allows SPI MOSI pin (-1 = not used)
misoPin int32 -1 -1 to 48; shown when driverType allows SPI MISO pin (-1 = not used)
clkPin int32 -1 -1 to 48; shown when driverType allows SPI clock pin (-1 = not used)
intPin int32 -1 -1 to 48 Interrupt pin for touch events (-1 = polling mode)
rstPin int32 -1 -1 to 48 Reset pin for touch controller (-1 = not connected)
xMin int32 0 Minimum raw X from the touch controller, along the panel's width before the display is rotated
xMax int32 239 Maximum raw X from the touch controller, along the panel's width before the display is rotated (a 240x320 panel shown in landscape: 239)
yMin int32 0 Minimum raw Y from the touch controller, along the panel's height before the display is rotated
yMax int32 319 Maximum raw Y from the touch controller, along the panel's height before the display is rotated (a 240x320 panel shown in landscape: 319)
offsetRotation enum "None" None, CW_90, CW_180, CW_270, Mirror, Mirror_CW_90, Mirror_CW_180, Mirror_CW_270 How the touch controller is turned against the panel, added to the display rotation. None when the controller reports in the panel's own orientation
busShared bool false Enable if touch shares the SPI bus with the display

Changelog

0.19.0

Changed

  • minEngine 0.19.0: built against engine 0.19.0, whose component metadata records the package each class is in. A build of this package from before does not load and is rebuilt.

Added

  • Japanese, Simplified Chinese and Korean: editor/lang/ja.json, zh.json and ko.json translate the names, tooltips and enum values this package's components show in the Inspector.

0.18.2

Added

  • asyncPresent on the display panel: a frame is sent from the other core while the next is drawn, through two staging buffers in PSRAM. Drawing and sending each fit in a 60 Hz frame on a LilyGO T-Deck, one after the other they did not. On ESP32 with two cores; off by default.

Changed

  • A frame goes to the panel by DMA, in bands within one transaction: each band is converted while the one before is being sent. Each band used to be fed to the SPI FIFO by the CPU and waited for before the next was converted, the conversion and the transfer one after the other.

Fixed

  • An I2C touch panel no longer shares the display's bus. Shared, each touch read ended the display's SPI transaction, which broke a frame being sent from the other core.
  • The backlight starts at full brightness (blBrightness, 255 by default), as it is after waking from sleep. It started at LovyanGFX's 127, a 1.2 kHz PWM wave, and a backlight driver that dims by counting pulses, as the LilyGO T-Deck's does, read every cycle of it as a step down and flickered.
  • The touch panel's bounds group was labelled "Touch Panel DekiParticles::Bounds". The bounds' tooltips say they run along the panel before the display is rotated, and offsetRotation's that it is added to the display rotation (it is not the display rotation).

Earlier releases: CHANGELOG.md.


Generated from the package's reflection data (engine 0.19.0). Property names are the keys used in scene files. Renames keep an alias (compatibility).