quinta-feira, dezembro 20, 2018

RetroServer: Controlando o Display

Continuando a descrição do meu pequeno servidor para jogos antigos, vamos ver como foi feita a aplicação que controla o Display, LEDs e trata o botão.



Esta aplicação é responsável por:
  • Apresentar imagens e informações no display
  • Piscar os LEDs
  • Tratar o pressionamento do botão
Primeira Versão

A primeira versão que eu fiz da aplicação foi em python (veja no github). O acesso aos LEDs e ao botão foi feito com a biblioteca gpiozero. O acesso ao display foi feito usando a biblioteca da Adafruit em conjunto com o Pillow. A biblioteca psutil fornece as informações de IP, memória, disco e CPU.

O código em python é bem compacto e funcionou corretamente. Porém o desempenho deixou um pouco a desejar, o intervalo entre as atualizações do display era maior do que eu desejava.

Segunda Versão

Hora de apelar para o C. O programa ficou mais extenso e foi quebrado em vários módulos (os links são para os fontes no github):
  • leds.c: Controla os LEDs, usando a biblioteca pigpio
  • display.c: Controla o display, usando as rotinas de i2c do pigpio
  • util.c: Obtém as informações de IP, memória, disco e CPU.
  • painelc.c:  Programa principal
O desempenho obtido foi o desejado.

Execução como Service

Esta aplicação deve ser disparada quando o Raspbian inicia e fica em rodando "eternamente". Até não muito tempo atrás isto seria feito convertendo a aplicação para ser um daemon (o que tem vários requisitos). O Raspbian atual utilizam o systemd para a implementação de services; basta seguir uns poucos requisitos e criar um arquivo de configuração.




Nenhum comentário: