2021-04-12 18:19:04 +02:00
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/get-started/arduino.md
```
# Arduino
2022-01-05 13:36:24 +01:00
The [LVGL library ](https://github.com/lvgl/lvgl ) is directly available as Arduino libraries.
2021-04-12 18:19:04 +02:00
2022-01-05 13:36:24 +01:00
Note that you need to choose a board powerful enough to run LVGL and your GUI. See the [requirements of LVGL ](https://docs.lvgl.io/master/intro/index.html#requirements ).
2021-04-12 18:19:04 +02:00
2022-01-05 13:36:24 +01:00
For example ESP32 is a good candidate to create UI's with LVGL.
2021-04-12 18:19:04 +02:00
2021-07-11 15:28:08 -04:00
## Get the LVGL Arduino library
2021-04-12 18:19:04 +02:00
2021-06-09 15:10:35 +02:00
LVGL can be installed via the Arduino IDE Library Manager or as a .ZIP library.
2021-04-12 18:19:04 +02:00
2022-01-05 13:36:24 +01:00
You can [Download ](https://github.com/lvgl/lvgl/archive/refs/heads/master.zip ) the latest version of LVGL from GitHub and simply copy it to Arduino's library folder.
2021-04-12 18:19:04 +02:00
## Set up drivers
To get started it's recommended to use [TFT_eSPI ](https://github.com/Bodmer/TFT_eSPI ) library as a TFT driver to simplify testing.
2021-09-06 04:55:37 -04:00
To make it work, setup `TFT_eSPI` according to your TFT display type via editing either
2021-04-12 18:19:04 +02:00
- `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
2021-09-06 04:55:37 -04:00
LVGL has its own configuration file called `lv_conf.h` . When LVGL is installed, follow these configuration steps:
2022-01-05 13:36:24 +01:00
1. Go to the directory of the installed Arduino libraries
2021-04-12 18:19:04 +02:00
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.
2022-01-05 13:36:24 +01:00
3. Open `lv_conf.h` and change the first `#if 0` to `#if 1` to enable the content of the file
2021-07-11 15:28:08 -04:00
4. Set the color depth of you display in `LV_COLOR_DEPTH`
5. Set `LV_TICK_CUSTOM 1`
2021-04-12 18:19:04 +02:00
2022-01-07 19:46:14 +01:00
Finally the layout with `lv_conf.h` should look like this:
```
arduino
|-libraries
|-lvgl
|-other_lib_1
|-other_lib_2
|-lv_conf.h
```
2022-01-05 13:36:24 +01:00
## Initialize and run LVGL
2021-04-12 18:19:04 +02:00
2021-07-11 15:28:08 -04:00
Take a look at [LVGL_Arduino.ino ](https://github.com/lvgl/lvgl/blob/master/examples/arduino/LVGL_Arduino/LVGL_Arduino.ino ) to see how to initialize LVGL.
2022-01-05 13:36:24 +01:00
`TFT_eSPI` is used as the display driver.
2021-04-12 18:19:04 +02:00
2021-08-26 10:52:39 +02:00
In the INO file you can see how to register a display and a touchpad for LVGL and call an example.
2021-04-12 18:19:04 +02:00
2022-01-05 13:36:24 +01:00
## 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()` .
2021-11-02 18:40:59 +01:00
2022-01-05 13:36:24 +01:00
**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` .
2021-04-12 18:19:04 +02:00
## Debugging and logging
2021-09-06 04:55:37 -04:00
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` :
2021-04-12 18:19:04 +02:00
```c
/*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
```
2021-09-06 04:55:37 -04:00
After enabling the log module and setting LV_LOG_LEVEL accordingly, the output log is sent to the `Serial` port @ 115200 bps.
2021-04-12 18:19:04 +02:00