# Arduino — LVGL documentation

# Arduino

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:

- `User_Setup.h`

- or by selecting a configuration in the `User_Setup_Select.h`

Both files are located in `TFT_eSPI` library's folder.

## Configure LVGL

LVGL has its own configuration file called `lv_conf.h`. When LVGL is installed, follow these configuration steps:

1. Go to the directory of the installed Arduino libraries

2. Go to `lvgl` and copy `lv_conf_template.h` as `lv_conf.h` into the Arduino Libraries directory next to the `lvgl` library folder.

3. Open `lv_conf.h` and change the first `#if 0` to `#if 1` to enable the content of the file

4. Set the color depth of you display in `LV_COLOR_DEPTH`

5. Set `LV_TICK_CUSTOM`

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 `lv_example_btn_1()`.

important:

  Due to some the limitations of Arduino's build system you need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`.

## Debugging and logging

LVGL can display debug information in case of trouble. In the `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`:

    /*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.