This is an old revision of the document!
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.
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) | +-----------------------------+
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
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 |
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)
Folositi config-ul hacktorwatch:lvgl pentru acest laborator. In acest config aplicatia HacktorWatch (CONFIG_HACKTORWATCH_REV2) este activata in mod implicit. Compilati si incarcati noua imagine pe ceas, si deschideti aplicatia “hacktorwatch” din linie de comanda.
ToDo
Momentan, la fiecare click pe checkbox-ul “Night Mode” nu se va intampla nimic, deoarece handler-ul de eveniment nu este inregistrat. Adaugati urmatoarea linie (cea cu +) in locul unde este creat checkbox-ul
lv_obj_add_state(cb_night_mode, 0);
lv_obj_align(cb_night_mode, LV_ALIGN_LEFT_MID, 0, -30);
+ lv_obj_add_event_cb(cb_night_mode, NULL, LV_EVENT_ALL, NULL);
Verificati ca ecranul devine mai inchis in momentul activarii checkbox-ului.
In mod normal pasii ar fi numarati in urma evenimentului primit de la senzorul de miscare, dar pentru asta este nevoie de un algoritm care sa ruleze si sa detecteze miscarea. In laboratorul de astazi vom simula detectia pasilor cu un timer care se activeaza la fiecare jumatate de secunda.
ToDo
ToDo