Manual

do

Maker

.

com

Raspberry PI com monitor TFT de 3.2 polegadas

Raspberry PI com monitor TFT de 3.2 polegadas

Recentemente foi lançado um tal de monitor oficial para RPI. Eu particularmente prefiro qualquer coisa não oficial que funcione e custe menos. É o caso desse monitor TFT de 3.2 polegadas que atua como um shield e possibilita fazer um case legal para o RPI - que aliás, será o computador de um produto Djames Watson - Forensic. Infelizmente sua utilização não é transparente e uma pequena interação será necessária para habilitá-lo no RPI2 com Raspbian (utilizado no video deste tutorial).

O passo 0 foi a instalação limpa do Raspbian, que deve ser um processo conhecido por todos que usam Raspberry, mas para fim de informação vou descrever o processo de transferência da imagem para o cartão micro SD, caso você esteja pretendendo iniciar com embedded.

Passo 0 - Instalação limpa do Raspbian

O processo de instalação se dá por meio do comando dd - se é que podemos chamar de instalação. Baixe o sistema através do site do Raspberry e proceda com o comando:

unzip raspbian_latest.zip
dd if=2015-05-05-raspbian-wheezy.img of=/dev/sdX

Onde "X" se refere ao dispositivo do cartão de memória micro SD que você utilizará no RPI. Agora coloque-o no Raspberry e inicie o boot. Você será guiado no processo, atente-se apenas para não iniciar no desktop por enquanto, mantenha no modo terminal.

Uma outra informação válida é que o RPI2 exige mais corrente. Eu utilizo o carregador do tablet, que é 5v com 2A, sendo mais que o suficiente para o RPI.

Esse monitor TFT utiliza o driver FBTFT criado por Notro. Atualmente o suporte está incluido nativamente no kernel da Raspberry Pi.

Passo 1 - Mudar o dispositivo de video para fb1

Por padrão o HDMI utiliza /dev/fb0 e o SPI utiliza /dev/fb1. Como utilizaremos SPI para exibir video, é necessário apontar o dispositivo no arquivo /usr/share/X11/xorg.conf.d/99-fbturbo.conf. Seu conteúdo está assim:

Section "Device"
Identifier "Allwinner A10/A13 FBDEV"
Driver "fbturbo"
Option "fbdev" "/dev/fb0"

Option "SwapbuffersWait" "true"
EndSection

Apenas troque /dev/fb0 por /dev/fb1. Todo o processo eu fiz por ssh para poder gravar o desktop, então não sei se algum dos passos pode afetar sua acessibilidade, portanto, sugiro fortemente que preceda com a habilitação do serviço ssh, usando o comando raspi-config no terminal. Se for acessar através do Windows, você pode usar o Putty.

Passo 2 - Habilitar a interface SPI

Fiz esse processo com a versão mais atual no momento em que escrevi esse post, utilizando o RPI2, não sei se funcionará igual para outras versões. Dito isso, vá ao configurador:

raspi-config

No menu avançado, habilite a opção SP.

Passo 3 - Instalar e configurar os drivers

Atenção a isso, porque se você estiver utilizando uma imagem mais nova (a partir da Jessie) esse passo deve ser eliminado, pois o suporte já está incluído no novo kernel da RPi.

Feito isso, você será questionado por reiniciar o sistema. Confirme e, no próximo boot, faça a instalação dos drivers:

REPO_URI=https://github.com/notro/rpi-firmware rpi-update

Eu sei que fica parecendo outro sistema que não Linux, mas um novo boot será necessário, então faça-o.

Supondo que seja esta uma instalação nova do Raspbian, seu arquivo /etc/modules deve conter somente isto (copie e cole):

spi-bcm2708

fbtft_device name=waveshare32b gpios=dc:22,reset:27 speed=48000000

waveshare32b width=240 height=320 buswidth=8 init=-1,0xCB,0x39,0x2C,0x00,0x34,0x02,-1,0xCF,0x00,0XC1,0X30,-1,0xE8,0x85,0x00,0x78,-1,0xEA,0x00,0x00,-1,0xED,0x64,0x03,0X12,0X81,-1,0xF7,0x20,-1,0xC0,0x23,-1,0xC1,0x10,-1,0xC5,0x3e,0x28,-1,0xC7,0x86,-1,0x36,0x28,-1,0x3A,0x55,-1,0xB1,0x00,0x18,-1,0xB6,0x08,0x82,0x27,-1,0xF2,0x00,-1,0x26,0x01,-1,0xE0,0x0F,0x31,0x2B,0x0C,0x0E,0x08,0x4E,0xF1,0x37,0x07,0x10,0x03,0x0E,0x09,0x00,-1,0XE1,0x00,0x0E,0x14,0x03,0x11,0x07,0x31,0xC1,0x48,0x08,0x0F,0x0C,0x31,0x36,0x0F,-1,0x11,-2,120,-1,0x29,-1,0x2c,-3

ads7846_device model=7846 cs=1 gpio_pendown=17 speed=1000000 keep_vref_on=1 swap_xy=0 pressure_max=255 x_plate_ohms=60 x_min=200 x_max=3900 y_min=200 y_max=3900

No total, são 4 linhas.

Passo 4 - Comandos passados ao kernel no boot

Substitua a linha existente no arquivo /boot/cmdline.txt por essa que segue:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbtft_device.custom fbtft_device.name=waveshare32b fbtft_device.gpios=dc:22,reset:27 fbtft_device.bgr=1 fbtft_device.speed=48000000 fbcon=map:10 fbcon=font:Acorn8x8 logo.nologo dma.dmachans=0x7f35 console=tty1 consoleblank=0 fbtft_device.fps=50 fbtft_device.rotate=0

Se tiver interesse em detalhes dos comandos fbcon, veja a documentação oficial (em inglês). O último parâmetro dessa linha se refere à orientação do display. Se mexer nisso, terá que ajustar a orientação do touch também (descrito ao final do post).

Passo 5 - ajustes para o touch

Eu tive que definir mais algumas variáveis no arquivo /boot/config.txt Porque meu touch não funcionava. Substitua o conteúdo do seu arquivo por esse:

# For more options and information see
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=0
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
framebuffer_width=240
framebuffer_height=320
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi
# Additional overlays and parameters are documented /boot/overlays/README
dtparam=spi=on
gpu_mem=64
dtoverlay=ads7846,penirq=17,swapxy=0

Adicionalmente, se estiver utilizando o Jessie, deverá baixar esse programa de driver da waveshare e executá-lo:

tar zxvf LCD-show-151020.tar.gz
chmod 700 LCD32-show
./LCD32-show

Automaticamente o sistema será reiniciado após esse processo. A dica que levou à atualização dessa parte do processo veio do membro da comunidade maker (participante dos nossos grupos do rodapé) Artur Gomes.

Passo 6 - Calibração do touch

Primeiramente, logado no terminal diretamente no Raspberry, digite:

sudo su

E instale o libts-bin e exporte as duas variáveis relacionadas ao dispositivo e ao evento correspondente ao touchscreen. No meu caso especificamente, o evento correspondente é o event2. Eu descobri exportando desde o 0 e iniciando o programa ts_calibrate. Se não for o evento correspondente, o programa não iniciará.

apt-get install libts-bin
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_FBDEVICE=/dev/fb1

Concluído, fazemos como citado anteriormente:

ts_calibrate

Você será orientado pelo programa, bastando usar a caneta da tela para calibrar conforme a orientação. Feito isso, você pode usar o programa ts_test para testar a precisão do toque e fazer traços livremente. Você verá que há um ruído violento no traço. Alguns ajustes finos podem ser feitos no arquivo /etc/ts.conf, cujo arquivo não me despertou o menor interesse e não sei se vale a pena mexer, portanto, não tenho recomendações a respeito.

Dicas extras

Eu coloquei IP estático diretamente em /etc/network/interfaces e de imediato ao iniciar o LXDE, a barra de tarefas ficava piscando e não carregava. Depois de muito mexer, descobri que o problema era o applet de rede. Após removê-lo, a barra iniciou um tanto poluída, então deixei-a bem enxuta.

Rotacionamento

Vídeo.

A maior questão está relacionada ao rotacionamento do monitor TFT (da tela dele). Em /boot/config.txt você pode mudar o parâmetro swapxy=0 para swapxy=1 e em /boot/cmdline.txt mude fbtft_device.rotate=0 para 1,2,3 ou 90,180,270 respectivamente, porém o eixo X continuará invertido (após o reboot). Para resolver isso será necessário instalar alguns programas:

Então em /etc/X11/xinit/xinitrc adicione logo acima da linha do Xsession a seguinte sintaxe:

DISPLAY=:0 xinput --set-prop 'ADS7846 Touchscreen' 'Evdev Axis Inversion' 1 0  

E pra variar, faça um reboot. Se você rodar 270 graus, não se esqueça de mudar também essa linha anterior para 0 1, e assim conforme a necessidade.

Rotacionando o monitor TFT 90 graus

Só para exemplificar:
1 - /boot/cmdline.txt - modifica-se o parâmetro fbtft_device.rotate=0 para fbtft_device.rotate=90
2 - /boot/config.txt - modifica-se o parâmetro swapxy=0 para swapxy=1
3 - /etc/X11/xinit/xinitrc - fica desse jeito:

#!/bin/sh

# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

DISPLAY=:0 xinput --set-prop 'ADS7846 Touchscreen' 'Evdev Axis Inversion' 1 0
# invoke global X session script
. /etc/X11/Xsession

Reboot.

Outros artigos relacionados a embedded você encontra aqui, outro aqui, também aqui, outro nesse link, mais um pouco por aqui, ou aqui também, etc. Vasculhe no site!

Espero que esse tutorial possa ter lhe sido útil ou ao menos informativo.
Se gostou, acompanhe-nos no Manual do Maker no Youtube e até o próximo!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.