LVGL provides everything you need to create embedded GUI with easy-to-use graphical elements, beautiful visual effects and low memory footprint.
Website · Online demo · Docs · Forum ·
- 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
- Simulator to develop on PC without embedded hardware
- Tutorials, examples, themes for rapid development
- Documentation and API references
Basically, every modern controller (which is able to drive a display) is suitable to run LVGL. The minimal requirements are:
- 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:
- 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).
Set by
LV_MEM_SIZE
in lv_conf.h. - Display buffer: > "Horizontal resolution" pixels (> 10 × "Horizontal resolution" is recommended)
- C99 or newer compiler
Note that the memory usage might vary depending on the architecture, compiler and build options.
Just to mention some platforms:
- STM32F1, STM32F3, STM32F4, STM32F7, STM32L4
- Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ
- NXP: Kinetis, LPC, iMX, iMX RT
- Linux frame buffer (/dev/fb)
- Raspberry PI
- Espressif ESP32
- Infineon aurix
- Nordic NRF52
- Quectell M66
his list shows the recommended way of learning the library:
- Check the Online demos to see LVGL in action (3 minutes)
- Read the Introduction page of the documentation (5 minutes)
- Read the Quick overview page of the documentation (15 minutes)
- Set up a Simulator (10 minutes)
- Try out some Examples
- Port LVGL to a board. See the Porting guide or check the ready to use Projects
- Read the Overview page to get a better understanding of the library. (2-3 hours)
- Check the documentation of the Widgets to see their features and usage
- If you have questions got to the Forum
- Read the Contributing guide to see how you can help to improve LVGL (15 minutes)
For more examples see the lv_examples repository.
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*/
lv_obj_set_event_cb(btn, btn_event_cb); /*Assign a callback to the button*/
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*/
...
void btn_event_cb(lv_obj_t * btn, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
printf("Clicked\n");
}
}
Learn more about Micropython.
# 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)
For a detailed description of contribution opportunities visit the Contributing section of the documentation.