quarta-feira, junho 28, 2017

Display LCD Touch 3,5 Polegadas para Raspberry Pi

Fechando esta série de displays LCD para mini PCs, um diplay específico para o Raspberry Pi. Este era um post para ser rápido e direto, mas as coisas ainda não deram bem certo.


O display funcionando. A câmera do celular produziu alguns artefatos.

Este display é para ser espetado diretamente em cima do Raspberry. Ao invés da porta HDMI, a conexão utiliza os pinos SPI (e mais alguns GPIOs) do conector de expansão. A resolução é de 320x480 e o sensor touch é do tipo resistivo. Junto com o display vem uma canetinha plástica. Claramente é voltado para uso com aplicações específicas; o desktop do Raspbian fica bem apertado nele. O meu sonho é construir um despertador inteligente para substituir o meu velho rádio relógio.


Eu comprei aqui no Brasil, mas você acha também no Mercado Livre e nos sites chineses. Vários fabricantes oferecem modelos semelhantes.



A configuração de software para o Raspbian usar o display dá trabalho, principalmente porque:
  • Algumas instruções são confusas. 
  •  Existem muitas instruções diferentes
  • O Raspbian é bastante dinâmico
No momento atual eu consegui fazer o display funcionar corretamente, porém estou com problemas com o sensor de toque. As poucas vezes que funcionou alguma coisa o eixo x estava invertido e não consegui realizar a calibração. Não está descartado ainda algum problema de hardware.

As minhas fontes principais foram:
Nos comentários do post da FilipeFlop é mencionado um driver da KeDei. Ele pode ser baixado daqui, mas fiquei assustado com o tamanho do arquivo compactado: quase 90M. Examinando o conteúdo, ele tem duas cópias do kernel (e mais um monte de outros arquivos) uma para uso com o LCD e outra para uso com o HDMI. Considerando que o kernel do Raspbian é atualizado frequentemente, não me parece uma boa ideia ficar amarrado a uma versão gerada por um fabricante chinês.

Estas três fontes usam basicamente os mesmos passos para ativação do display. A Waveshare possui scripts para efetuar as mudanças de configuração entre HDMI e LCD. Isto é prático, mas as mudanças de configuração são feitas substituindo os arquivos por outros fornecidos pela Waveshare, portanto customizações que você tenha feito neste arquivos serão perdidas.

O que descrevo abaixo é o processo básico. Mais detalhes quando tudo estiver funcionando.

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ê deve conseguir mover o cursor tocando na tela (no meu caso isto não está acontecendo sempre). Porém o sensor de toque provavelmente estará descalibrado.

Para usar o LCD no modo console é 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


Falta a calibração do sensor de toque. O processo abaixo, além de não ter funcionado direito comigo, é inadequado para as versões mais recente do Raspbian (como indicado aqui e aqui).

Para os Rasbians antigos, seriam quatro passos:

1) Carregar os pré-requisitos para o programa de calibração (requer conexão à internet):

sudo apt-get update
sudo apt-get install libtool libx11-dev xinput autoconf libx11-dev libxi-dev x11proto-input-dev -y

2) Baixar (requer conexão à internet), 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


3) 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


4) Alterar /home/pi/.config/lxsession/LXDE-pi/autostart para o programa de calibração ser executado sempre que a interface gráfica é iniciada. Acrescente ao final de autostart

sudo /bin/sh /etc/X11/Xsession.d/xinput_calibrator_pointercal.sh
Aguardem para breve novas notícias...

Um comentário:

web.net disse...

Olá, no meu raspberry o eixo X do touch fica invertido, já tentei rotacionar a tela e não resolveu.