This is an old revision of the document!


Laboratorul 05. LVGL

Despre LVGL

LVGL (Light and Versatile Graphics Library) este o biblioteca open-source pentru interfete grafice (GUI) folosite pe dispozitivele embedded cu resurse limitate precum microcontrollerele. Are suportul necesar pentru a crea interfete grafice moderne si interactive cum gasim si pe smartphone-uri.

Site-ul oficial

Functionalitati principale

  • Biblioteca de widget-uri: butoane, label-uri, slider-e, meniuri, checkbox-uri, chart-uri, imagini si animatii, tastaturi
  • Eficienta randarii, foloseste “dirty area tracking” pentru a redesena doar acele portiuni din ecran care au fost modificate
  • Abstractie hardware (HAL): foloseste un nivel intermediar de acces al display-ului si al dispozitivelor de intrare (touchscreen)
  • Este usoara - consum redus de memorie si procesor (Flash: ~100–200 KB, RAM: ~10–50 KB)
  • Este portabila - funcționeaza pe multe platforme (MCU-uri, Linux embedded, RTOS-uri).
  • Are simulator pentru Windows si Linux pentru a usura procesul de development (il vom folosi si noi astazi)

Arhitectura

Structura LVGL poate fi impartita in 3 mari componente.

+-----------------------------+
|         Application         |
|  (Your GUI logic & widgets) |
+-----------------------------+
|          LVGL Core          |
|   Drawing, events, objects  |
+-----------------------------+
| Display & Input Interfaces  |
|  (Drivers for LCD, touch)   |
+-----------------------------+
|        Hardware / OS        |
|   (ESP32, NuttX, FreeRTOS)  |
+-----------------------------+
  • Aplicatia principala
  • Nucleul LVGL
  • Drivere

LVGL pentru Nuttx

Nuttx are deja inclusa biblioteca LVGL in subsistemul grafic. Config-ul folosit astazi are deja componenta LVGL activat, dar mentionam aici setarile din config care trebuie activate daca veti avea nevoie sa folositi un alt config.

make menuconfig
→ Graphics Support → LVGL graphics library = [Y]
→ Graphics Applications → LVGL Demo Widgets = [Y]
→ Board Selection → Enable LCD or SPI display driver

LVGL pe smartwatch-ul Hacktorwatch

Smartwatch-ul Hacktorwatch are integrate LCD-ul … si senzorul touchscreen CST816S. Display-ul foloseste protocolul SPI pentru a comunica cu board-ul ESP32, folosind urmatorul pinout.

| Signal | Description  | ESP32 GPIO   |
| -----: | ------------ | ------------ |
|   MOSI | Data to LCD  | e.g. GPIO 23 |
|   SCLK | Clock        | e.g. GPIO 18 |
|     CS | Chip select  | e.g. GPIO 5  |
|     DC | Data/Command | e.g. GPIO 21 |
|    RST | Reset        | e.g. GPIO 22 |
|     BL | Backlight    | optional     |

Exercitii

0. (Optional) Rulati simulatorul LVGL pe Linux-ul vostru

Pentru a usura munca developerilor, LVGL a fost portat pe Linux (lv_port_linux unde poate rula cu mai multe backend-uri (e.g. Wayland, X11). Pentru a compila proiectul, instalati urmatoarele pachete.

sudo apt install cmake libpkgconfig-perl libwayland-dev wayland-protocols

Clonati repository-ul

git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux/
git submodule update --init --recursive

Si compilati proiectul

cmake -B build -DCONFIG=wayland
cmake --build build -j$(nproc)

Deschideti aplicatia

./build/bin/lvglsim

Urmatorul ecran va fi afisat

Copiati codul oferit ca suport pentru acest laborator peste cel original din simulator si recompilati. Un ecran cu un cerc de dimensiunea 240×240 pixeli va fi afisat, iar in interior vom avea timpul curent, un checkbox pentru a activa modul de noapte si un contor care va numara pasii.

cp ~/Downloads/main.c.txt src/main.c
cmake --build build -j$(nproc)

1. ToDo

Resurse

si/laboratoare/2025/05.1761943179.txt.gz · Last modified: 2025/10/31 22:39 by cosmin.chenaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0