Rassbery PIにつけたタッチスクリーンのキャリブレーションをする
Rassbery PI Zero Wにタッチスクリーンを付けました.
買ったのはこのKINCREAの7インチスクリーンです.
HDMIで画面が光り,USBでタッチスクリーンが動きます,
ただ,タッチスクリーンの左端の少しだけが反応しませんでした.
直すために,補正の設定が必要になります.
キャリブレーションの方法
ドライバのevdev,キャリブレーション用のアプリxinput_calibratorを入れる.
$ sudo apt install -y xserver-xorg-input-evdev xinput_calibrator
xinput_calibratorを起動して,calibにキャリブレーション情報を保存する
$ DISPLAY=:0 xinput_calibrator --misclick 0 > calib
十字をタッチします.
画面の左側が反応しないので,左の十字は右よりでタッチします.

calibの情報をもとに, /usr/share/X11/xorg.conf.d/99-calibration.confにキャリブレーション情報を書き込む.
$ cat calib Calibrating EVDEV driver for "wch.cn USB2IIC_CTP_CONTROL" id=6 current calibration values (from XInput): min_x=181, max_x=4009 and min_y=59, max_y=4000 Doing dynamic recalibration: Setting calibration data: 267, 3933, 49, 3833 --> Making the calibration permanent <-- copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's) Section "InputClass" Identifier "calibration" MatchProduct "wch.cn USB2IIC_CTP_CONTROL" Option "Calibration" "267 3933 49 3833" Option "SwapAxes" "0" EndSection $ sudo vi -p /usr/share/X11/xorg.conf.d/99-calibration.conf calib
/usr/share/X11/xorg.conf.d/99-calibration.confの内容
Section "InputClass"
Identifier "calibration"
MatchProduct "wch.cn USB2IIC_CTP_CONTROL"
Driver "evdev"
Option "Calibration" "260 3933 49 3870"
EndSection
Driver "evdev"は明示的に必要でした.
Option "Calibration" "260 3933 49 3870"は"x-min x-max y-min ymax".
手で数値をいじるときは,ポインタがはみ出すなら値の区間を広くすれば良いです.
最後に再起動しましょう.
$ sudo reboot
xinput_calibratorの内容はドライバの設定によって変化します.
うまく行かない場合は99-calibration.confの設定を書き換えて再起動を試してください
xorgの挙動を調べる
xinput listでデバイスネームやidを調べられます.
pi@raspberrypi:~ $ DISPLAY=:0 xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ wch.cn USB2IIC_CTP_CONTROL id=6 [slave pointer (2)] ⎜ ↳ Logitech USB Optical Mouse id=7 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
xinput list-propsで設定されているプロパティを確認できます.
ここに値がなければ正しく設定されていません.
pi@raspberrypi:~ $ DISPLAY=:0 xinput list-props 6
Device 'wch.cn USB2IIC_CTP_CONTROL':
Device Enabled (114): 1
Coordinate Transformation Matrix (115): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (240): 0
Device Accel Constant Deceleration (241): 1.000000
Device Accel Adaptive Deceleration (242): 1.000000
Device Accel Velocity Scaling (243): 10.000000
Device Product ID (244): 6790, 58851
Device Node (245): "/dev/input/event1"
Evdev Axis Inversion (246): 0, 0
Evdev Axis Calibration (247): 260, 3933, 49, 3870
Evdev Axes Swap (248): 0
Axis Labels (249): "Abs MT Position X" (238), "Abs MT Position Y" (239), "Abs MT Touch Major" (237), "None" (0), "None" (0)
Button Labels (250): "Button Unknown" (234), "Button Unknown" (234), "Button Unknown" (234), "Button Wheel Up" (120), "Button Wheel Down" (121)
Evdev Scrolling Distance (251): 0, 0, 0
Evdev Middle Button Emulation (252): 0
Evdev Middle Button Timeout (253): 50
Evdev Middle Button Button (254): 2
Evdev Third Button Emulation (255): 1
Evdev Third Button Emulation Timeout (256): 750
Evdev Third Button Emulation Button (257): 3
Evdev Third Button Emulation Threshold (258): 1000
Evdev Wheel Emulation (259): 0
Evdev Wheel Emulation Axes (260): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (261): 10
Evdev Wheel Emulation Timeout (262): 200
Evdev Wheel Emulation Button (263): 4
Evdev Drag Lock Buttons (264): 0
evdevの設定名は man evdev で確認できます.
list-propsで表示されているプロパティ名とxorgsのconfの設定名は異なります.
気をつけましょう.
長押し右クリックはうまくいかない
evdevで長押ししたときの挙動を右クリックにできるようなのですが,うまくいきませんでした.謎.
この設定で動くと思うんだけどな
Option "EmulateThirdButton" "1"
Option "EmulateThirdButtonTimeout" "750"
Option "EmulateThirdButtonMoveThreshold" "30"
タッチスクリーンのセットアップ
買ったタッチスクリーンは次の3口を持っています.
Raspi Zero Hは次の3口を持っています
- miniHDMI
- USB type B micro 内側 デバイス用
- USB type B micro 外側 給電のみ
買ったタッチスクリーンには次のものが付属しました.
これはタッチスクリーンがRaspiB用のためだからです. なので,Zeroを接続するために追加で必要なものは次の2つです.

エレコム 変換アダプタ HDMI(タイプA)メス-HDMI mini(タイプC)オス ブラック AD-HDAC3BK
- 発売日: 2015/06/19
- メディア: Personal Computers
typeB micro <-> typeA

iBUFFALO USB(microB to A)変換アダプター ブラック BSMPC11C01BK
- 発売日: 2011/11/01
- メディア: エレクトロニクス
これらと,給電用のUSBケーブル+AC/DCが必要です.
3本のケーブルで動作しました.
- HDMIケーブルををスクリーンにつなぎ,HDMIを変換してHDMI microにしてRaspiにつなぐ
- 給電typeB microケーブルをスクリーンの内側に刺す
- もう1本のUSBケーブルをスクリーンと,typeB micro変換してraspiの内側につなぐ (同時にraspiに給電される)
感想
変換器にお金が必要なので,それならば,もともと対応していたraspiのBを買えばよかったなと思いました.
