Raspberry Pi – USB touchscreen kalibratie
Deze pagina beschrijft het kalibreren van een USB touchscreen dat aangesloten is op een Raspberry Pi, ik heb 3 avonden gezeten en research gedaan, vele mogelijkheden onderzocht en veel trial & error ondervonden, op deze pagina de juiste oplossing die bij mij heeft gewerkt!
Ik heb onlangs een LCD scherm gekocht met touchscreen ingebouwd, het gaat om een “Flatron L1510SF”:
Dit scherm heeft alleen een VGA ingang, dus er zit nu een HDMI <> VGA tussen en dat werkt perfect:
De USB B uitgang van de touchscreen is aangesloten op de Raspberry Pi en word in linux herkend als:
1 2 3 4 5 6 |
[130100.425270] usb 1-1.4: new full-speed USB device number 7 using dwc_otg [130106.494554] usb 1-1.4: New USB device found, idVendor=0403, idProduct=f9e9 [130106.494588] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [130106.494605] usb 1-1.4: Product: USB Touch Panel [130106.494620] usb 1-1.4: Manufacturer: ITM Inc [130106.582707] input: ITM Inc USB Touch Panel as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.0/input/input4 |
1 |
Bus 001 Device 006: ID 0403:f9e9 Future Technology Devices International, Ltd |
xinput_calibrator installeren
Je kan xinput_calibrator installeren met het volgende commando:
sudo apt-get install -y xinput-calibrator
Zelf compileren kan ook, zie het voorbeeld hier.
xinput_calibrator starten
Let op, dit kan niet vanuit een SSH/VNC verbinding, je zal dit vanuit de console op de desktop moeten uitvoeren!
Open de console, en start het kalibratieprogramma met het commando: xinput_calibrator
Het volgende scherm zal opkomen, hier kun je de touchscreen configureren doormidden van de punten aan te drukken op het scherm.
TIP: Gebruik een aanwijzer of pincet om zo precies mogelijk op de kruisjes te drukken.
Nadat je op de vier kruisjes in de hoeken hebt gedrukt, verschijnt deze console output:
WHEEZY/JESSIE
Hierin staan de kalibratie getallen en instellingen, er wordt ook beschreven hoe je de calibratie permanent kan maken (na reboot) door bepaalde instellingen op te slaan in het volgende bestand:
/etc/X11/xorg.conf.d/99-calibration.conf
Voordat je meteen een sudo nano uitvoert….de folder moet eerst aangemaakt worden, met het commando:
sudo mkdir /etc/X11/xorg.conf.d
Maak nu het bestand aan met het commando:
sudo nano /etc/X11/xorg.conf.d/99-calibration.conf
Voeg de inhoud daar aan toe die je voorgesteld krijgt, in mijn geval:
1 2 3 4 5 6 |
Section "InputClass" Identifier "calibration" MatchProduct "ITM Inc USB Touch Panel" Option "Calibration" "125 4015 3940 160" Option "SwapAxes" "1" EndSection |
Maar…de assen moesten na kalibratie alsnog omgekeerd worden, ik heb daarom deze regels toegevoegd:
1 2 |
Option "InvertX" "true" Option "InvertY" "true" |
Dat maakt het totaalplaatje:
1 2 3 4 5 6 7 8 |
Section "InputClass" Identifier "calibration" MatchProduct "ITM Inc USB Touch Panel" Option "Calibration" "125 4015 3940 160" Option "SwapAxes" "1" Option "InvertX" "true" Option "InvertY" "true" EndSection |
Druk op CTRL+S en dan op CTRL+X om het bestand op te slaan en nano af te sluiten, zo worden de instellingen geladen als de Raspberry Pi opnieuw opgestart word.
STRETCH
Ja…veel zoek- en puzzelwerk geweest, op de Stretch image draait nu “x server” welke “libinput” gebruikt om invoer apparaten af te handelen in plaats van “evdev“.
libinput
libinput negeert bovenstaande regels, en reageert alleen nog op de instellingen van “Transformation Matrix”, in het kort:
1 2 3 4 5 |
Section "InputClass" Identifier "calibration" MatchProduct "ITM Inc USB Touch Panel" Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1" EndSection |
Waarbij je deze instellingen kan gebruiken voor:
X-as inverteren:
Option "TransformationMatrix" "-1 0 1 0 1 0 0 0 1"
Y-as inverteren:
Option "TransformationMatrix" "1 0 0 0 -1 1 0 0 1"
X-as en Y-as omkeren:
Option "TransformationMatrix" "0 1 0 1 0 0 0 0 1"
Maar dat geeft nogal een puzzelwerk bij deze monitor, ook kan je niet eenvoudig de calibratie gegevens er in kwijt.
Ps. veranderingen toepassen zonder het systeem opnieuw op te starten: sudo service lightdm restart
Toch EVDEV gebruiken
Je kan dezelfde configuratie gebruiken zoals boven aangegeven voor Wheezy/Jessie, maar dan moet je wel evdev installeren:
Stap 1
Installeer evdev:
sudo apt-get install xserver-xorg-input-evdev
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: xserver-xorg-input-evdev 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 117 kB of archives. After this operation, 169 kB of additional disk space will be used. Get:1 http://mirror.nl.leaseweb.net/raspbian/raspbian stretch/main armhf xserver-xorg-input-evdev armhf 1:2.10.5-1 [117 kB] Fetched 117 kB in 0s (438 kB/s) Selecting previously unselected package xserver-xorg-input-evdev. (Reading database ... 126618 files and directories currently installed.) Preparing to unpack .../xserver-xorg-input-evdev_1%3a2.10.5-1_armhf.deb ... Unpacking xserver-xorg-input-evdev (1:2.10.5-1) ... Setting up xserver-xorg-input-evdev (1:2.10.5-1) ... Processing triggers for man-db (2.7.6.1-2) ... |
Stap 2
Er is nu een configuratiebestand:
/usr/share/X11/xorg.conf.d/10-evdev.conf
aangemaakt, heel belangrijk is dat deze geladen wordt na libinput (40-libinput.conf)…. dat doe je door dit bestand een hoger getal te geven (bijvoorbeeld 45):
sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf
Verwijder oude “10-” bestand:
sudo rm /usr/share/X11/xorg.conf.d/10-evdev.conf
Start de Raspberry opnieuw op: sudo reboot
Troubleshooting
Je kan altijd in het XORG log kijken als er iets aan de hand is:
cat /var/log/Xorg.0.log