2020-06-02 08:54:58 +02:00
< h1 align = "center" > LVGL - Light and Versatile Graphics Library< / h1 >
2019-01-31 19:13:26 +01:00
< p align = "center" >
2020-05-25 05:54:38 +02:00
< a href = "https://github.com/lvgl/lvgl/blob/master/LICENCE.txt" > < img src = "https://img.shields.io/badge/licence-MIT-blue.svg" > < / a >
2020-07-07 11:31:00 +02:00
< a href = "https://github.com/lvgl/lvgl/releases/tag/v7.0.0" > < img src = "https://img.shields.io/badge/version-7.1.0-blue.svg" > < / a >
2019-08-07 09:39:35 +02:00
< / p >
2019-08-07 09:41:01 +02:00
< p align = "center" >
2020-05-19 11:35:18 +02:00
< img src = "https://lvgl.io/assets/images/img_1.png" >
2019-01-31 19:13:26 +01:00
< / p >
2019-01-31 21:23:56 +01:00
< p align = "center" >
2020-05-15 14:43:45 +02:00
LVGL provides everything you need to create embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint.
2019-01-31 21:23:56 +01:00
< / p >
2017-11-29 11:41:34 +01:00
2019-01-31 19:13:26 +01:00
< h4 align = "center" >
2020-05-15 14:43:45 +02:00
< a href = "https://lvgl.io" > Website < / a > ·
2020-06-18 16:13:04 +02:00
< a href = "https://lvgl.io/demos" > Online demo< / a > ·
2020-05-27 10:08:17 +02:00
< a href = "https://docs.lvgl.io/" > Docs< / a > ·
2020-05-28 19:22:28 -04:00
< a href = "https://forum.lvgl.io" > Forum< / a > ·
2019-01-31 19:13:50 +01:00
< / h4 >
2019-01-31 14:01:56 +01:00
2019-07-19 08:07:53 +02:00
---
## Features
2020-06-18 16:13:04 +02:00
* Powerful building blocks: buttons, charts, lists, sliders, images, etc.
* Advanced graphics: animations, anti-aliasing, opacity, smooth scrolling
* Simultaneously use various input devices: touchscreen, mouse, keyboard, encoder, buttons, etc.
* Simultaneously use multiple displays: e.g. monochrome and color display
* Multi-language support with UTF-8 encoding, Bidirectional support, and Arabic text handling
* Fully customizable graphical elements via CSS-like styles
* Hardware independent to use with any microcontroller or display
* Scalable to operate with little memory (64 kB Flash, 10 kB RAM)
* OS, External memory and GPU are supported but not required
* Single frame buffer operation even with advances graphical effects
* Written in C for maximal compatibility (C++ compatible)
* Micropython Binding exposes [LVGL API in Micropython ](https://blog.lvgl.io/2019-02-20/micropython-bindings )
* Simulator to develop on PC without embedded hardware
* Tutorials, examples, themes for rapid development
* Documentation and API references
2016-06-15 11:40:04 +02:00
2019-07-19 08:07:53 +02:00
## Supported devices
2020-06-18 16:13:04 +02:00
Basically, every modern controller (which is able to drive a display) is suitable to run LVGL. The minimal requirements are:
2019-07-19 08:07:53 +02:00
- 16, 32 or 64 bit microcontroller or processor
- > 16 MHz clock speed is recommended
- Flash/ROM: > 64 kB for the very essential components (> 180 kB is recommended)
- RAM:
2020-05-25 08:29:57 +02:00
- Static RAM usage: ~2 kB depending on the used features and objects types
- Stack: > 2kB (> 8 kB is recommended)
- Dynamic data (heap): > 2 KB (> 16 kB is recommended if using several objects).
2019-07-19 08:07:53 +02:00
Set by `LV_MEM_SIZE` in *lv_conf.h* .
- Display buffer: > *"Horizontal resolution"* pixels (> 10 × *"Horizontal resolution"* is recommended)
2020-05-25 09:29:17 +02:00
- C99 or newer compiler
2019-07-19 08:07:53 +02:00
*Note that the memory usage might vary depending on the architecture, compiler and build options.*
2019-01-29 15:41:07 +01:00
2020-06-18 16:13:04 +02:00
Just to mention some platforms:
- STM32F1, STM32F3, [STM32F4 ](https://blog.lvgl.io/2017-07-15/stm32f429_disco_port ), [STM32F7 ](https://github.com/lvgl/lv_port_stm32f746_disco_sw4stm32 ), STM32L4
2019-01-29 15:41:07 +01:00
- Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ
2020-06-18 16:13:04 +02:00
- NXP: Kinetis, LPC, iMX, iMX RT
2020-05-15 14:43:45 +02:00
- [Linux frame buffer ](https://blog.lvgl.io/2018-01-03/linux_fb ) (/dev/fb)
2019-01-29 15:41:07 +01:00
- [Raspberry PI ](http://www.vk3erw.com/index.php/16-software/63-raspberry-pi-official-7-touchscreen-and-littlevgl )
2020-05-15 14:43:45 +02:00
- [Espressif ESP32 ](https://github.com/lvgl/lv_port_esp32 )
2020-06-18 16:13:04 +02:00
- [Infineon aurix ](https://github.com/lvgl/lv_port_aurix )
- Nordic NRF52
2019-01-29 15:41:07 +01:00
- Quectell M66
2020-06-18 16:13:04 +02:00
## Get started
his list shows the recommended way of learning the library:
1. Check the [Online demos ](https://lvgl.io/demos ) to see LVGL in action (3 minutes)
2. Read the [Introduction ](https://docs.lvgl.io/latest/en/html/intro/index.html ) page of the documentation (5 minutes)
3. Read the [Quick overview ](https://docs.lvgl.io/latest/en/html/get-started/quick-overview.html ) page of the documentation (15 minutes)
4. Set up a [Simulator ](https://docs.lvgl.io/latest/en/html/get-started/pc-simulator.html ) (10 minutes)
5. Try out some [Examples ](https://github.com/lvgl/lv_examples/ )
6. Port LVGL to a board. See the [Porting ](https://docs.lvgl.io/latest/en/html/porting/index.html ) guide or check the ready to use [Projects ](https://github.com/lvgl?q=lv_port_&type=&language= )
7. Read the [Overview ](https://docs.lvgl.io/latest/en/html/overview/index.html ) page to get a better understanding of the library. (2-3 hours)
8. Check the documentation of the [Widgets ](https://docs.lvgl.io/latest/en/html/widgets/index.html ) to see their features and usage
9. If you have questions got to the [Forum ](http://forum.lvgl.io/ )
10. Read the [Contributing ](https://docs.lvgl.io/latest/en/html/contributing/index.html ) guide to see how you can help to improve LVGL (15 minutes)
2019-07-19 08:07:53 +02:00
## Examples
2020-06-18 16:29:18 +02:00
For more examples see the [lv_examples ](https://github.com/lvgl/lv_examples ) repository.
2019-07-19 08:07:53 +02:00
### Button with label
2019-01-30 23:05:21 +01:00
```c
lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL); /*Add a button the current screen*/
lv_obj_set_pos(btn, 10, 10); /*Set its position*/
lv_obj_set_size(btn, 100, 50); /*Set its size*/
2019-07-04 19:05:03 -04:00
lv_obj_set_event_cb(btn, btn_event_cb); /*Assign a callback to the button*/
2019-07-19 08:07:53 +02:00
2019-01-30 23:05:21 +01:00
lv_obj_t * label = lv_label_create(btn, NULL); /*Add a label to the button*/
lv_label_set_text(label, "Button"); /*Set the labels text*/
2019-07-19 08:07:53 +02:00
...
2019-07-04 19:05:03 -04:00
void btn_event_cb(lv_obj_t * btn, lv_event_t event)
2019-01-30 23:05:21 +01:00
{
2019-07-04 19:05:03 -04:00
if(event == LV_EVENT_CLICKED) {
printf("Clicked\n");
}
2019-01-30 23:05:21 +01:00
}
```
2020-06-18 16:19:57 +02:00
![LVGL button with label example ](https://raw.githubusercontent.com/lvgl/docs/latest/misc/simple_button_example.gif )
2019-01-30 23:05:21 +01:00
2020-06-18 16:13:04 +02:00
### LVGL from Micropython
2020-05-15 14:43:45 +02:00
Learn more about [Micropython ](https://docs.lvgl.io/en/html/get-started/micropython ).
2019-02-24 11:20:37 +02:00
```python
# Create a Button and a Label
scr = lv.obj()
btn = lv.btn(scr)
btn.align(lv.scr_act(), lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("Button")
# Load the screen
lv.scr_load(scr)
```
2019-07-19 08:07:53 +02:00
## Contributing
2020-06-18 16:13:04 +02:00
For a detailed description of contribution opportunities visit the [Contributing ](https://docs.lvgl.io/latest/en/html/contributing/index.html ) section of the documentation.