The LVGL library is directly available as Arduino libraries.
Note that you need to choose a board powerful enough to run LVGL and your GUI. See the requirements of LVGL.
For example ESP32 is a good candidate to create UI's with LVGL.
Get the LVGL Arduino library¶
LVGL can be installed via the Arduino IDE Library Manager or as a .ZIP library.
You can Download the latest version of LVGL from GitHub and simply copy it to Arduino's library folder.
Set up drivers¶
To get started it's recommended to use TFT_eSPI library as a TFT driver to simplify testing.
To make it work, setup
TFT_eSPI according to your TFT display type via editing either
or by selecting a configuration in the
Both files are located in
TFT_eSPI library's folder.
LVGL has its own configuration file called
lv_conf.h. When LVGL is installed, follow these configuration steps:
Go to the directory of the installed Arduino libraries
lv_conf.hinto the Arduino Libraries directory next to the
lv_conf.hand change the first
#if 1to enable the content of the file
Set the color depth of you display in
Finally the layout with
lv_conf.h should look like this:
arduino |-libraries |-lvgl |-other_lib_1 |-other_lib_2 |-lv_conf.h
Initialize and run LVGL¶
Take a look at LVGL_Arduino.ino to see how to initialize LVGL.
TFT_eSPI is used as the display driver.
In the INO file you can see how to register a display and a touchpad for LVGL and call an example.
Use the examples and demos¶
Note that, there is no dedicated INO file for every example. Instead, you can load an example by calling an
lv_example_... function. For example
IMPORTANT NOTE 1
Due to some the limitations of Arduino's build system you need to copy
lvgl/src/examples. Similarly for the demos
IMPORTANT NOTE 2
Note that the
lv_examples library is for LVGL v7 and you shouldn't install it for this version (since LVGL v8)
as the examples and demos are now part of the main LVGL library.
Debugging and logging¶
LVGL can display debug information in case of trouble.
LVGL_Arduino.ino example there is a
my_print method, which sends this debug information to the serial interface.
To enable this feature you have to edit the
lv_conf.h file and enable logging in the section
/*Log settings*/ #define USE_LV_LOG 1 /*Enable/disable the log module*/ #if LV_USE_LOG /* How important log should be added: * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information * LV_LOG_LEVEL_INFO Log important events * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail * LV_LOG_LEVEL_NONE Do not log anything */ # define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
After enabling the log module and setting LV_LOG_LEVEL accordingly, the output log is sent to the
Serial port @ 115200 bps.