Configurare un monitor lcd touch-screen su un raspberry rpi3

La scelta di un monitor touch screen adatto al nostro rpi può risultare problematica per via della quantità di prodotti disponibili con qualità molto variabile.I problemi che si possono incontrare nello scegliere alcuni lcd di bassa qualità sono:

  • scarso supporto per driver con problemi di stabilità del sistema
  • guide complicate per l’installazione del driver
  • hardware scadente e touch non perfettamente funzionante
  • presenza di cloni di marche più quotate

Nella mia ricerca ho comunque potuto notare che la maggior parte delle guide che si riferiscono ad installazioni di driver, sono rese obsolete dal supporto nativo dei vari controller attualmente più diffusi.
Di seguito cercherò di indicare alcuni consigli in base alla mia esperienza.

La scelta del  monitor

Senza dilungarmi troppo sui vari modelli e marche, se volete avere un sistema stabile  e facile da configurare, vi converrà optare per modelli nativamente supportati da linux, nel nostro caso, l’ultima versione di Rasbpian desktop lite. Cercate modelli con supporto gestito dal controller xpt2046 o driver ads7846 in questo modo la vostra scelta sarà filtrata a dispositivi facili da configurare.

Il passaggio successivo è quello di scegliere l’interfaccia di connessione ed alimentazione tra lcd e monitor. Le interfarcce disponibili per l’alimentazione sono:

  • gpio
  • microusb

Per la sezione video le interfacce sono:

  • gpio
  • hdmi
monitor con connessione ed alimentazione tramite gpio
Monitor con connessione hdmi ed alimentazione opzionale a scelta tra gpio ed usb

Da quello che ho visto, i monitor con risoluzioni più basse hanno la connessione video tramite gpio, ma se volete risoluzioni elevate, vi conviene valutare la connessione hdmi che tra l’altro, vi da la  possibilità di avere un uscita audio,  a volte anche tramite jack da 3,5. La mia marca di rifermiento è stata waveshare perché è quella che in rete ha le migliori recensioni per supporto e qualità.

NOTA: per poter  usare un monitor lcd senza dover ricorrere ad una alimentatore specifico,  è opportuno dotare il proprio raspberry di un modello che supporta i 5V e 3A

Premessa:
Tutti i comandi e procedure varie seguenti, possono esssere tranquillamente gestibili tramite ssh tranne quando diversamente specificato, dando per scontato le conoscenze di base del terminale e di sudo.
Prima di tutto eseguiamo un aggiornamento del nostro sistema per poi proseguire nell’installazione dei pacchetti necessari e modifiche dei file:

sudo apt update 
sudo apt upgrade

Iniziamo modificando il file

/boot/config.txt

aggiungendo i seguenti parametri ( se già sono presenti è sufficiente decommentare la riga corrispondente)

dtparam=i2c_arm=on dtparam=spi=on
dtoverlay=ads7846,penirq=25,speed=100000,penirq_pull=2,xohms=150

NOTA: la seguente configurazione è opzionale. Dalle prove che ho fatto è più importante configurare il file /boot/config.txt perché è quello che decide quale driver caricare,  inoltre, non aggiungendo nessuna opzione nel file /etc/modules, funziona tutto. La lascio come promemoria, qualora qualcuno avesse necessità di configurazioni particolari.

Configurazione opzionale:
 
Si configura il file /etc/modules aggiungendo:
ads7846_device model=7846 cs=1 gpio_pendown=25 keep_vref_on=1 swap_xy=1 pressure_max=255 x_plate_ohms=150

Si deve eseguire un reboot in modo da far gestire l’lcd dal nuovo driver ads7846 indicato. Si prosegue con la configurazione per Xorg: si crea la directory:

/etc/X11/xorg.conf.d

si crea anche il seguente file nella directory creata:

99-calibration.conf

con il seguente contenuto:

Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "155 3945 271 3802"
Option "SwapAxes" "0"
EndSection

Come si ottengono questi parametri che possono differire per ogni lcd?Si dovrà fare una calibrazione dell’lcd con apposito strumento che ricaverà la configurazione precedente.

Ricavare i parametri di calibrazione del touchscreen

Per poter adattare questa guida al vostro lcd dovrete eseguire la calibrazione del vostro hardware seguendo i passi successivi iniziando con l’installazione  dei pacchetti necessari:

sudo apt-get update
sudo apt-get install -y libts-bin evtest xinput python-dev python-pip
sudo pip install evdev
sudo apt-get install -y xinput-calibrator

I seguenti pacchetti sono fondamentali per far funzionare correttamente il touch screen:

apt-get install xserver-xorg-input-evdev

Dal momento che evdev.conf deve essere caricato dopo libinput.conf e che i file 10-evdev.conf e 40-libinput.conf causano una sovrascrittura da parte di libinput del file evdev config, e’ opportuno cambiare la sequenza di avvio rinominando il seguente file nel seguente modo:

sudo mv /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf

In questo modo  verrà caricato per ultimo senza sovrascrittura.
Prima di procedere con la fase finale di calibrazione vera e propria  del vostro touch, è necessario impostare la corretta risoluzione del vostro lcd e se volete maggior superficie coperta dall’immagine, disabilitare l’overscan, in più se volete leggere i caratteri senza perdere la vista, vi suggerisco di abilitare il Pixel doubling; tutto questo tramite tool di configurazione Raspberry Pi configuration, facilmente accessibile tramite menu del desktop.In questa fase mi sono aiutato con una tastiera fisica.
Sempre utilizzando la tastiera, si apre un terminale dal desktop e si avvia il programma di calibrazione:

$ xinput-calibrator

Ora vi basta seguire la procedura e alla fine avrete i parametri corretti per il vostro touchscreen da inserire nel file di riferimento.
Riavviate e provate il vostro schermo.

Consiglio la lettura di questo articolo con tutte le opzioni video:

https://www.raspberrypi.org/documentation/configuration/config-txt/video.md

https://www.raspberrypi.org/documentation/hardware/display/README.md

11 pensieri su “Configurare un monitor lcd touch-screen su un raspberry rpi3

  1. Questa la oda del config.txt
    [all]
    #dtoverlay=vc4-fkms-v3d
    display_hdmi_rotate=1
    dtparam=i2c_arm=on dtparam=spi=on
    dtoverlay=ads7846,penirq=25,speed=100000,penirq_pull=2,xohms=150

    Questo il calibrator:
    Section “InputClass”
    Identifier “calibration”
    MatchProduct “WaveShare WS170120”
    Option “MinX” “51240”
    Option “MaxX” “52551”
    Option “MinY” “20616”
    Option “MaxY” “20753”
    Option “SwapXY” “1” # unless it was already set to 1
    Option “InvertX” “0” # unless it was already set
    Option “InvertY” “0” # unless it was already set
    EndSection
    Ho seguito la procedura di cui sopra, ma il touch è sempre rovesciato.
    Qualcuno è in grado di aiutarmi?
    Grazie

  2. Questa la coda del config.txt
    [all]
    #dtoverlay=vc4-fkms-v3d
    display_hdmi_rotate=1
    dtparam=i2c_arm=on dtparam=spi=on
    dtoverlay=ads7846,penirq=25,speed=100000,penirq_pull=2,xohms=150

    Questo il calibrator:
    Section “InputClass”
    Identifier “calibration”
    MatchProduct “WaveShare WS170120”
    Option “MinX” “51240”
    Option “MaxX” “52551”
    Option “MinY” “20616”
    Option “MaxY” “20753”
    Option “SwapXY” “1” # unless it was already set to 1
    Option “InvertX” “0” # unless it was already set
    Option “InvertY” “0” # unless it was already set
    EndSection
    Ho seguito la procedura di cui sopra, ma il touch è sempre rovesciato.
    Qualcuno è in grado di aiutarmi?
    Grazie

  3. Tu hai la linea display_hdmi_rotate=1
    devi cambiare il valore che può essere:
    0 is the normal configuration. 1 is 90 degrees. 2 is 180 degress. 3 is 270 degrees.

  4. Ma io ho bisogno di ruotare di 90° degrees. Questo riesco a farlo con config.txt. Ciò che non riesco a fare è ruotare alla stessa maniera il touch, pur seguendo la procedura sopra indicata. C’è un’altra strada?

  5. Probabilmente non riconosce il monitor “WaveShare WS170120”.
    Sarà un problema di di driver.

  6. Probabilmente non riconosce il monitor “WaveShare WS170120”.
    Sarà un problema di di driver.

  7. Buongiorno, scusate il disturbo ma ho un problema. Ho montato un monitor LCD tramite Gpio ed ora non riesco più a collegare il mio Raspberry pi 3 con il cavo HDMI. Sapete aiutarmi? Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.