Aplicação de exemplo usando a biblioteca gráfica LVGL.
O presente projeto foi desenvolvido com o intuito de demonstrar a utlização da biblioteca gráfica open source LVGL. Essa biblioteca é escrita em linguagem C
, voltada principalmente para criação de GUI's
(Graphical User Interface) para microcontroladores e sistemas com poucos recursos.
A plataforma target microcontrolada utilizada foi o kit de desenvolvimento STM32F429-Discovery
, pois o mesmo possui interface com display TFT, facilitando a prototipação e desenvolvimento.
O código é portável entre plataformas x86
(simulador) e arm
(STM32), mediante configuração de build.
A aplicação interfaceia alguns dispositivos de hardware e utiliza seus dados como fonte de atualização de componentes gráficos na tela.
A tela da nossa aplicação é criada apartir de uma tabview
, um componente gráfico (widget) que permite a inserção de múltiplas tabs
(abas).
Cada tab
corresponde a um dispositivos de hardware em específico:
- GPS tab: mostra os dados de um módulo GPS
- Gauge tab: mostra o valor de um potenciômetro
- IMU tab: mostra os valores de um módulo de IMU
Embora o display utilizado possua um controlador de touchscreen, a escolha final foi utilizar um hardware externo como dispositivo de entrada, no caso um encoder rotativo
.
Para realizar a compilação e execução do projeto será necessário:
- Um computador
host
rodando algum sistema operacionalGNU/Linux
- Compilador arm-none-gnueabi-gcc para microcontroladores
arm cortex M
- Ferramentea
make
para utilização de arquivosMakefile
- Biblioteca LVGL (versão superior a
7.0
) - Ferramenta openOCD para gravação e depuração do firmware
Caso o usuário queira realizar algum tipo de modificação de periféricos, pode se utilizar a ferramenta de geração de código STM32CubeMX.
Para executar o projeto será necessário:
- Placa STM32F429-Discovery
- Encoder rotativo
KY-040
, - Módulo
GPS NEO6MV2
, - Módulo
IMU
(Inertial Measurement Uniit)MPU-6050
- Potenciômetro 10K.
Caso o usuário não disponha do hardware necessário, pode se utilizar o simulador para rodar apenas a aplicação gráfica de alto nível diretamente no computador host.
# Clonando o repositório
$ git clone https://github.com/JON95Git/lvgl-demo-embarcadores
# Navegando até o diretório onde será clonado o repositório do LVGL
$ cd lvgl-demo-embarcadores/app/gui
# Clonando o repositório do LVGL
$ git clone https://github.com/lvgl/lvgl
Observação: Caso queira clonar o repositório do LVGL em outro diretório, será necessário alterar o arquivo compile.conf
O repositório do simulador possui um README
detalhandos os passos para sua instalação, portanto esses passos não serão descritos aqui.
Assim que um novo repositório do LVGL é baixado, é necessário realizar algumas configurações:
- Habilitar o arquivo
lv_conf.h
:
# Navegando até o repositório do LVGL
$ cd lvgl
# Renomeando o arquivo de template para ser usado como arquivo de configuração
$ mv lv_conf_template.h lv_conf.h
# Editando o arquivo de configuração
$ nano lv_conf.h
# Navegue até a linha 10 do arquivo lv_conf.h e mude
# de
if 0
# para
if 1
- Ajustar resolução do display:
# Navegue até a linha 23 do arquivo lv_conf.h e altere as configurações de resolução
define LV_HOR_RES_MAX (240)
define LV_VER_RES_MAX (320)
- Utilizando a versão correta do
LVGL
, para isso é necessário que seja uma versão superior a7.0
:
# Navegando até o diretório onde será clonado o repositório do LVGL
$ cd lvgl-demo-embarcadores/app/gui/lvgl
# Verificando a versão do LVGL
$ git branch
# Caso a versão do LVGL seja inferior a 7.0
$ git checkout release/v7
A aplicação gráfica está isolada em app/gui
.
Será necessário fazer com que os arquivos presentes em app/gui
estejam visíveis para o simulador
. Isso pode ser feito utilizando links simbólicos
.
É necessário criar os diretórios onde serão inseridos os links simbólicos
no projeto do simulador
, para isso execute:
# Navega até o diretório onde foi clonado o repositório do simulador
$ cd pc_simulator_sdl_eclipse
# Criando diretórios para suportar links simbólicos aos arquivos da GUI
$ mkdir gui
# Navega até o diretório da GUI
$ cd gui
# Criando diretórios para suportar links simbólicos aos arquivos de components da GUI
$ mkdir components
Para criar links simbólicos
da aplicação gráfica para o simulador
, execute:
# Cria link simbólico dos arquivos .c
$ ln -s ../../lvgl-demo-embarcadores/app/gui/*.c .
# Cria link simbólico dos arquivos .h
$ ln -s ../../lvgl-demo-embarcadores/app/gui/*.h .
$ cd components
# Cria link simbólico dos arquivos .c
$ ln -s ../../../lvgl-demo-embarcadores/app/gui/components/*.c .
# Cria link simbólico dos arquivos .h
$ ln -s ../../../lvgl-demo-embarcadores/app/gui/components/*.h .
Ao final, haverá uma hierarquia de diretórios da seguinte forma:
simulador/
│
└───gui/
│ gui_app.c
│ gui_app.h
│ gui_hardware_interface.c
| gui_hardware_interface.h
| gui_widgests.c
| gui_widgests.h
└───components/
│ gui_chart.c
│ gui_chart.h
│ gui_gauge.c
| gui_gauge.h
| gui_gps.c
| gui_gps.h
Dessa forma, toda alteração realizada em qualquer um dos projetos (firmware
ou simulador
) será vista por ambas as partes.
Como o projeto utiliza a ferramenta make
para automatização do processo de compilação, é necessário apenas as chamadas:
# Compilando o projeto
$ make
# Limpando a build do projeto
$ make clean
Para gravar o firmware é necessário possuir o openOCD
instalado na máquina.
Executa o seguinte comando:
$ openocd -f /usr/local/share/openocd/scripts/board/stm32f429discovery.cfg -c 'program build/lvgl-demo-embarcadores.bin 0x08000000 verify reset exit'
O projeto dispõe de um diretório oculto chamado .vscode
, onde estão as configurações criadas para build
, debug
e flash
do projeto apartir do ambiente do VS Code.
Para um correto funcionamento nesse ambiente, é necessário instalar as seguintes extensões: