
Em um recente artigo, expliquei como configurei uma tela TFT LCD no meu Raspberry Pi, que anteriormente servia como um servidor sem interface gráfica. Sem instalar um ambiente de desktop, meu objetivo era adicionar uma interface leve para mostrar informações úteis diretamente na tela. Para isso, desenvolvi uma aplicação simples que exibe as horas e o clima, e que funciona sem o sistema gráfico X, comum em Linux.
Para criar essa aplicação leve, foi necessário compreender como interagir diretamente com a nova tela, e os aprendizados foram baseados em diversas fontes que compilei e vou compartilhar aqui. No Linux, existe o conceito de framebuffer, um dispositivo virtual que pode ser usado para exibir gráficos. No Raspberry Pi, a saída HDMI corresponde ao Framebuffer 0, e se você conectou seu Pi a um monitor convencional ou uma TV via HDMI, pode exibir gráficos escrevendo neste dispositivo.
Caso esteja utilizando uma tela baseada em SPI, como foi o meu caso após seguir meu tutorial anterior, você terá um segundo framebuffer, o /dev/fb1. Com a configuração fbcon=map:10, o console é exibido neste framebuffer, que mostra o console na tela LCD.
Na minha configuração, assegurei que a saída HDMI tivesse a mesma resolução da tela LCD para que a aplicação pudesse mirar na saída acelerada por hardware, e então copiar a saída para o Framebuffer 1. Esse processo envolve criar um modo HDMI personalizado e configurar a resolução apropriada no arquivo /boot/config.txt.
Além disso, desenvolvi uma aplicação em C que escreve diretamente no framebuffer do Linux. Se você não está confortável com programação em C ou em nível de sistema, pode pular essa parte, já que existem bibliotecas que abstraem essas interfaces de baixo nível. Porém, para quem tem afinidade com esses tópicos, entender essa seção pode esclarecer o funcionamento dessas bibliotecas.
Para exibir gráficos através do framebuffer, independentemente da configuração, o processo envolve abrir o arquivo /dev/fbX correspondente ao display que deseja usar, usar ioctl para obter informações sobre o framebuffer, e escrever bytes no arquivo, dependendo da profundidade de cor do framebuffer.
Além disso, mencionei o uso de Raylib, uma biblioteca de alto nível que facilita o desenvolvimento de aplicações gráficas e é acelerada por hardware, proporcionando excelente desempenho. Raylib é compatível com múltiplas plataformas, o que permite desenvolver uma aplicação no laptop e implantá-la no Raspberry Pi sem modificações.
Este projeto não apenas me ajudou a adicionar funcionalidades úteis ao meu servidor Raspberry Pi, mas também expandiu meu conhecimento sobre o sistema Linux e programação de hardware. Compartilharei o código da minha aplicação no GitHub e continuarei explorando opções para melhorar e expandir suas capacidades.
Confira os últimos vídeos publicados no canal