terça-feira, julho 11, 2017

Display LCD Touch 3,5 Polegadas para Raspberry Pi - Round 2

No primeiro round eu relatei as minhas dificuldades com este display. De tanto "dar tapas" para tentar resolver o funcionamento intermitente do sensor de toque, a apresentação da tela também passou a dar problemas. Por enquanto estou dando esta unidade como perdida; o jeito foi comprar outro, desta vez no Mercado Livre. E vamos ao segundo round!

Spoiler: Funciona! A foto não faz justiça à qualidade da tela

O novo display tem algumas diferenças em relação ao anterior. Para começar, o circuito flexível que liga o display à placa não fica mais exposto (o que eu espero deixe o display mais robusto) e a canetinha que veio junto é branca.



Fazendo as configurações básicas, o display funcionou bem e o touch respondeu ao toque, mas:
  • A orientação da tela é diferente do anterior (fica "de ponta cabeça"). Isto não é crítico e depois de algum tempo gostei da nova orientação. Qualquer coisa, podemos rodar a imagem pela configuração.
  • Continua com o eixo x do sensor invertido
Como o sensor agora está mais confiável, vamos à luta para acertar a direção. A maioria dos tutoriais na internet não funcionam com as versões mais recentes do Raspbian. Isto se deve à troca da biblioteca padrão para tratamento de entradas. Até o início de 2017 era usada a evdev e agora é usada a libinput. Com isto os arquivos de configuração e outros detalhes são diferentes, "quebrando" o programa de calibração. A solução, no momento, é instalar manualmente a biblioteca evdev e alterar a numeração padrão do arquivo de configuração do evdev para ele ser carregado depois da libinput.

Vamos à receita completa. O que descrevo abaixo é o método braçal, no último link tem um script para automaticar o processo, porém ele usa versões fixas ao invés de buscar nos devidos repositórios. No meu teste eu usei um Raspberry Pi 2 e o Raspbian Jessie with Pixel de 21/06/17.

O primeiro passo é informar ao Linux a presença do novo dispositivo. Isto é feito acrescentando a linha abaixo ao /boot/config.txt (sem espaços entre os caracteres):
dtoverlay=piscreen,speed=16000000,rotate=90
Se você rebootar o Raspberry após isto, vai ver que o display é inicializado mas nada é apresentado nele. Para que o desktop use o display é preciso editar o arquivo /usr/share/X11/xorg.conf.d/99-fbturbo.conf. Ache a linha
Option "fbdev" "/dev/fb0"
e troque fb0 por fb1.

Se você rebootar o Raspberry, o desktop vai aparecer no LCD e você conseguirá mover o cursor tocando na tela. Porém o sensor de toque estará descalibrado e o eixo X invertido. Antes de resolver isto, vamos falar do uso do LCD no modo console. Para isto é preciso acrescentar no final da primeira linha de /boot/cmdline.txt (não pode ser em outra linha):
fbcon=map:10 fbcon=rotate:2 fbcon=font:ProFont6x11
Vamos agora à calibração do sensor de toque. Isto envolve os seguintes passos (é preciso estar conectado à Internet):

1) Instalar o evdev:
sudo apt-get update
sudo apt-get install xserver-xorg-input-evdev
sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf
2) Carregar os pré-requisitos para o programa de calibração:
sudo apt-get install libtool libx11-dev xinput autoconf libx11-dev libxi-dev x11proto-input-dev -y
3) Baixar, compilar e instalar o programa de calibração:
git clone https://github.com/tias/xinput_calibrator
cd xinput_calibrator/
./autogen.sh
make
sudo make install
4) Baixar e instalar o script que chama o programa de calibração
cd ~
wget http://ozzmaker.com/piscreen/xinput_calibrator_pointercal.sh
sudo cp ~/xinput_calibrator_pointercal.sh /etc/X11/Xsession.d/xinput_calibrator_pointercal.sh
sudo chmod +x /etc/X11/Xsession.d/xinput_calibrator_pointercal.sh
5) Alterar /home/pi/.config/lxsession/LXDE-pi/autostart para que o programa de calibração seja executado sempre que a interface gráfica é iniciada. Acrescente ao final de autostart:
sudo /bin/sh /etc/X11/Xsession.d/xinput_calibrator_pointercal.sh
6) Profit! digo, sudo reboot e tudo deve funcionar corretamente.

Conclusão

O resultado final foi bem satisfatório e certamente servirá para o meu futuro projeto de um despertador. Preocupa um pouco o fato do primeiro display ter apresentado defeitos e a complicação toda para a calibração da tela.

Referências

https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=172025&p=1123456
https://github.com/notro/fbtft/issues/445
https://raspberrypi.stackexchange.com/questions/60872/inverted-gpio-touchscreen-using-99-calibration-conf
https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=173993
https://github.com/goodtft/LCD-show

Nenhum comentário: