LVGL libreria GUI embedded

LVGL (sito ufficiale) è una libreria grafica specializzata per i microcontrollori con numerose funzionalità integrate. Il focus sui microcontrollori si nota da una serie di dettagli, a partire dal file di configurazione delle features che è composto da un solo file header, al supporto per i display monocromatici, fino ai tool di conversione di font e immagini in formato binario ottimizzato. Questo rende la libreria estremamente configurabile e adattabile a qualsiasi tipo di piattaforma hardware; di contro, rende la compilazione del progetto e l’utilizzo giornaliero non molto user friendly.

Licenza

La libreria LVGL è distribuita sotto licenza MIT, pertanto è possibile sviluppare applicazioni proprietarie senza pagare licenze né royalties.

È in lavorazione un editor grafico di pagine che avrà una licenza proprietaria.

Piattaforme supportate

LVGL include il supporto per numerose development board. Come spesso accade in questi ambiti, il driver per una specifica piattaforma hardware deve essere scritto dallo sviluppatore dell’applicazione.

Il supporto per piattaforme Linux embedded e desktop è garantito tramite la libreria SDL2. Non esistono widget per desktop già pronti simili allo stile della piattaforma.

Linguaggi di programmazione

LVGL è una libreria C con binding per MicroPython. Non esiste un linguaggio specifico per la UI, per cui tutto il codice va scritto in modo imperativo.

Gestione immagini e font

I formati standard di font e immagini possono essere caricati da file TTF, posto di aver attivato le opportune opzioni di compilazione.

Per le MCU meno performanti è anche presente l’opzione di precompilare in un formato binario le immagini e i font alle dimensioni corrette.

Tooling

Sono presenti alcuni strumenti per la localizzazione dell’applicazione. È in sviluppo un editor grafico per le pagine, con una licenza diversa dalla libreria.

Scalabilità

Il target principale della libreria sono i sistemi a microcontrollore, ma è possibile scrivere applicazioni desktop grazie alla libreria SDL2. I dispositivi mobile non sono supportati out-of-the-box.

Maturità

La libreria è attivamente sviluppata da un’azienda, che offre anche servizi di consulenza. I target MCU sono quelli più maturi, seguiti dai vari port per piattaforme desktop.

Documentazione

La documentazione delle API è sufficientemente esaustiva, ma targetizzata esplicitamente per MCU. Esempi e documentazione per sviluppo di applicazioni Linux embedded o desktop non sono immediatamente visibili.

Conclusioni

LVGL è una libreria interessante, progettata appositamente per realizzare applicazioni con grafica estremamente personalizzata, al contrario per esempio di Flutter o Qt Widgets, che di default puntano rispettivamente a realizzare il Material design o lo stile grafico della piattaforma. Possiamo dire che le features di LVGL la avvicinano più a Qt Quick, pur mancando di un linguaggio specializzato per la scrittura di GUI.

Il modello di licensing è decisamente permissivo, per cui è possibile realizzare qualunque tipo di prodotto senza pagare royalties o licenze. Se necessario, è possibile acquistare supporto a pagamento da LVGL LLC.

Il focus su microcontrollore e ottimizzazione di memoria si nota in molte scelte di design, dal sistema di build basato su define ai tool di traduzione realizzati appositamente e non compatibili con le soluzioni più diffuse.

Un’ultima nota: scegliendo LVGL come libreria grafica, avremo la necessità (o possibilità, a seconda dei punti di vista) di scegliere il resto dello stack software che compone un’applicazione Linux embedded. Questo vuol dire, ad esempio, scegliere librerie per il networking, MQTT o websockets, per la gestione di eventi (es. timer), per il parsing JSON. Questo può essere visto come un punto di forza (si scelgono solo le cose che servono) oppure una debolezza (per esempio perché non c’è una API standard tra i vari sottosistemi). Nel caso in cui scegliate LVGL per il vostro prossimo progetto, il mio consiglio personale è di usare il C solo per interfacciarsi con la libreria e scrivere il resto dell’applicazione con linguaggi più moderni e funzionali.

Altri articoli della serie