Drivers for ESP32 to be used with LVGL
Go to file
Carlos Diaz 463721e291
Cleanup lvgl_helpers (#171)
* lvgl_spi_conf: Define TFT_SPI_HOST even when no SPI is choosen

* lvgl_helpers: Let the SPI driver choose SPI DMA Channel

Use SPI_DMA_CH1 only on ESP32 target.

* lvgl_helpers: Move FT81X initialization to helper

* lvgl_interface_init: Initial cleanup

* lvgl_helpers: Replace spi_common_dma_t values with integers

This enum was introduced in ESP-IDF v4.3 and can't be used in older versions
of ESP-IDF.

* lvgl_helpers: Rearrange includes

* lvgl_tft: Remove gpio_pad_select_gpio from drivers init functions

* lvgl_helpers: Use spi_host_device_t from v4.3 onwards

* esp_backlight: Replace gpio with esp_rom API

* il3820: Remove GPIO initialization from driver init

* FT81x: Replace gpio_pad_select_gpio with esp_rom alias

* Fix esp_rom_gpio.h path

* FT81x: Fix esp_rom_gpio.h path

* adcraw: Disable usage of gpio_pad_select_gpio

* GC9A01: Remove usage of gpio_pad_select_gpio

* ra8875: Remove usage of gpio_pad_select_gpio

* Revert "esp_backlight: Replace gpio with esp_rom API"

This reverts commit 24e4bf0b88.

* Revert "FT81x: Replace gpio_pad_select_gpio with esp_rom alias"

This reverts commit 8c7bc42140.

* esp_lcd_backlight: Handle different versions of ESP-IDF

* esp_lcd_backlight: Add missing header

* lvgl_spi_conf: Add missing include

* uc8151d/jd79653a: Fix compilation error when logging is enabled

* FT81x: Handle ESP-IDF v4.3 rom_gpio

* FT81x: Add missing include

* Compilation error when SPI Host is not selected

* lvgl_helpers.c: Enable init_ft81x only when FT81X is selected

* adcraw: Handle gpio_pad_selection on multiple ESP-IDF versions

* esp_lcd_backlight: Remove esp_rom functions

* FT81x: Remove esp_rom functions

* adcraw: Remove esp_rom functions
2022-02-02 16:45:52 -06:00
.github Add automated build of examples 2021-08-11 22:35:49 +02:00
examples Update helpers and drivers to handle LVGLv7 and v8 versions (#161) 2022-01-07 17:22:11 -06:00
lv_port Replace display_port_busy_t with bool 2021-10-01 12:11:28 -05:00
lvgl_i2c Addresses confusion: I2C manager component install only when others need I2C too. 2021-10-22 18:57:08 -05:00
lvgl_tft Cleanup lvgl_helpers (#171) 2022-02-02 16:45:52 -06:00
lvgl_touch Cleanup lvgl_helpers (#171) 2022-02-02 16:45:52 -06:00
.editorconfig Add editor config for people who use it 2021-02-12 10:20:28 +01:00
.gitignore fix SPI names 2021-12-16 13:40:00 +01:00
.gitmodules Add automated build of examples 2021-08-11 22:35:49 +02:00
CMakeLists.txt Merge branch 'master' into develop 2021-12-14 17:46:46 +01:00
component.mk directory i2c_manager -> lvgl_i2c 2021-07-14 12:43:19 +02:00
CONTRIBUTE_CONTROLLER_SUPPORT.md Update readme 2021-01-04 22:52:33 -06:00
display_config.h display_config: Add missing defined 2022-01-11 18:15:22 -06:00
Kconfig Things suggested by @tore-espressif 2021-07-14 13:12:49 +02:00
LICENSE Initial commit 2020-06-23 11:48:19 +02:00
lvgl_helpers.c Cleanup lvgl_helpers (#171) 2022-02-02 16:45:52 -06:00
lvgl_helpers.h Cleanup lvgl_helpers (#171) 2022-02-02 16:45:52 -06:00
lvgl_spi_conf.h Cleanup lvgl_helpers (#171) 2022-02-02 16:45:52 -06:00
README.md Added PCD8544 to readme, addressed PR comments 2021-11-25 17:16:04 -06:00

Display and touchpad drivers for ESP32 using LVGL

For a ready to use ESP32 project take look at the lv_port_esp32 repository.

Table of content

NOTE: You need to set the display horizontal and vertical size, color depth and swap of RGB565 color on the LVGL configuration menuconfig (it's not handled automatically).

Supported display controllers

Display Controller Type Interface Color depth (LV_COLOR_DEPTH) Swap RGB565 color (LV_COLOR_16_SWAP)
ILI9341 TFT SPI 16: RGB565 Yes
ILI9163C TFT SPI 16: RGB565 Yes
ILI9486 TFT SPI 16: RGB565 Yes
ILI9488 TFT SPI 16: RGB565 No
HX8357B/HX8357D TFT SPI 16: RGB565 Yes
ST7789 TFT SPI 16: RGB565 Yes
ST7735S TFT SPI 16: RGB565 Yes
FT81x TFT Single, Dual, Quad SPI 16: RGB565 No
GC9A01 TFT SPI 16: RGB565 Yes
RA8875 TFT SPI 16: RGB565 Yes
SH1107 Monochrome SPI 1: 1byte per pixel No
SSD1306 Monochrome I2C 1: 1byte per pixel No
PCD8544 Monochrome SPI 1: 1byte per pixel No
IL3820 e-Paper SPI 1: 1byte per pixel No
UC8151D/ GoodDisplay GDEW0154M10 DES e-Paper SPI 1: 1byte per pixel No
FitiPower JD79653A/ GoodDisplay GDEW0154M09 e-Paper SPI 1: 1byte per pixel No

Supported indev controllers

  • XPT2046
  • FT3236, FT6X36
  • FT6206 controllers should work as well (not tested)
  • STMPE610
  • FT81x (Single, Dual, and Quad SPI)

If your display or input device (touch) controller is not supported consider contributing to this repo by adding support to it! Contribute controller support

Support for predefined development kits

You can also use the predefined kits, which selects the correct display controllers on the kit, and sets the gpio numbers for the interface.

Kit name Display controller Interface Hor. Res. Ver. Res.
ESP Wrover Kit v4.1 ILI9341 SPI 240 320
M5Stack ILI9341 SPI 240 320
M5Stack Core2 ILI9341 SPI 240 320
M5Stick SH1107 SPI - -
M5StickC ST7735S SPI 80 160
Adafruit 3.5 Featherwing HX8357 SPI 480 320
RPi MPI3501 ILI9486 SPI - -
Wemos Lolin OLED SSD1306 SPI 64 128
ER-TFT035-6 ILI9488 SPI 480 320
AIRcable ATAGv3 IL3820 SPI 128 296
TTGO T-Display ST7789 SPI 135 240
TTGO Camera Plus ST7789 SPI 240 240

NOTE: See Supported display controllers for more information on display configuration. NOTE: See Supported indev controllers for more information about indev configuration.

Thread-safe I2C with I2C Manager

LVGL can use I2C to read from a touch sensor or write to a display, possibly many times a second. Meanwhile, other tasks may also want to read from i2c devices on the same bus. I2C using the ESP-IDF is not thread-safe.

I2C Manager (i2c_manager) is a component that will let code in multiple threads talk to devices on the I2C ports without getting in each other's way. These drivers use a built-in copy of I2C Manager to talk to the I2C port, but you can also use the I2C Manager component itself and have others play nice with LVGL and vice-versa. Click here for details.

Backlight control

Control of LCD's backlight is provided by separate module that is independent from the display driver. Configuration of the backlight controller can be found in menuconfig LVGL ESP Drivers -> LVGL TFT Display controller.

There are three modes of operation:

  1. Off - No backlight control
  2. Switch - Allows ON/OFF control
  3. PWM - Allows brightness control (by Pulse-Width-Modulated signal)