読者です 読者をやめる 読者になる 読者になる

Raspberry Pi用の小型静電容量タッチディスプレイ PiTFT Plus 2.8 Capacitiveをセットアップ

電波 Raspberry Pi

f:id:karaage:20161019232306j:plain:w640

PiTFT Plus 2.8 Capacitive セットアップ

 Raspberry Piの周辺機器見てたら、良さげなディスプレイがありました。Raspberry Pi 2/3とほぼ同じサイズ感。タッチパネルにGPIOに接続された押しボタン付きとなかなか良さそう。仕事でも何かと使えそうなので購入。セットアップしてみたら予想外にハマったのでメモっておきます。

 環境は以下です。

  • Raspberry Pi 3
  • PiFTF Plus 2.8inch Capacitive
  • Raspbian Jessie with PIXEL(2016/09/23 released)

Raspberry Pi 3 Model B (Element14)

Raspberry Pi 3 Model B (Element14)

 以降は、以下の記事の通り初期セットアップされていることが前提となります。

PiTFTとRaspberry Piの接続

 まずPiTFTの箱。

f:id:karaage:20161019225905j:plain:w640
 スイッチサイエンスさんいつもお世話になってまーす!

f:id:karaage:20161019225944j:plain:w640
 中身はこんな感じ

 特に説明書とかは無いので勘で接続。といってもピンペッダに挿すだけなので迷うことはないと思います。

f:id:karaage:20161019230121j:plain:w640
 こうしか無いだろ!ってくらいフィット感あります。

 接続はこれでOK。

画像表示設定

 まずは画像が表示されるように設定します。

 以下でPiTFT用のセットアップを実施。

$ curl -SLs https://apt.adafruit.com/add-pin | sudo bash
$ sudo apt-get install raspberrypi-bootloader
$ sudo apt-get install adafruit-pitft-helper
$ sudo adafruit-pitft-helper -t 28c

 2行目は結構時間かかるので、コーヒーでも飲みながらゆっくり待ちましょう。最後の行のsudo adafruit-pitft-helper -t 28cのオプションは、タッチパネルがCapacitiveタイプだと28c、Resisterタイプだと28rになります。自分はCapacitiveタイプを買ったので28cを選択します。

 ここで一旦再起動すればOKなはずなのだけど一向に表示されません。この後すごいハマったのですが、色々調べた結果+野生の勘で/boot/config.txtを1行修正すればOKでした。まずは以下コマンドでファイル編集します。

$ sudo vim /boot/config.txt

 以下のように修正

修正前
dtoverlay=pitft28c,rotate=90,speed=32000000,fps=20
修正後
dtoverlay=pitft28-capacitive,rotate=90,speed=32000000,fps=20

 再起動

$ sudo shutdown -r now

 これで画面が正しく表示されます。

f:id:karaage:20161019232306j:plain:w640
 中々良い感じです。

タッチパネルキャリブレーション

 タッチもこの状態で一応効くのですが、座標がおかしいのでキャリブレーションします。以下実行すると自動でキャリブレーションできます。

$ sudo adafruit-pitft-touch-cal -t 28c

 しかし、ここにも罠が。udevが正しく設定されていません。タッチパネルのドライバを確認するために以下実行。

$ dmesg | grep ft6

 以下のように表示されるので、ft6236を使っていることがわかります。

[    4.067558] input: ft6236 as /devices/platform/soc/3f804000.i2c/i2c-1/1-0038/input/input0

 udevファイル(/etc/udev/rules.d/95-ft6206.rules)を見ると、なぜかft6206で設定されています。これが原因のようなので、まずファイル名変更(変えなくてもよいけど紛らわしいので念のため)。

$ sudo mv /etc/udev/rules.d/95-ft6206.rules /etc/udev/rules.d/95-ft6236.rules

 続いて、中身を書き換えます。

$ sudo vim /etc/udev/rules.d/95-ft6236.rules

 以下のようにft6206ft6236に書き換えます。これが大事。大事マンブラザーズ。

SUBSYSTEM=="input", ATTRS{name}=="ft6236", ENV{DEVNAME}=="*event*", SYMLINK+="input/touchscreen"

 ここで一旦再起動します

$ sudo shutdonw -r now

 起動したら以下実行します。

$ ls -l /dev/input/touchscreen

 以下のような表示が出たらudevの設定はOKです。

lrwxrwxrwx 1 root root 6 1020 00:24 /dev/input/touchscreen -> event0

 以下でタッチテストができます。

$ sudo evtest /dev/input/touchscreen

 ただ、ここでタッチの上下、左右軸が反対なことに気が付きます。参考リンク一生懸命見ながら調べると /etc/X11/xorg.conf.d/99-calibration.confの設定が効いてなさそうなことがわかったので以下コマンドで編集します。

$ sudo vim /etc/X11/xorg.conf.d/99-calibration.conf

 MatchProductがft6x06_tsになっているのでft6236にします。だだ、今度はタッチ範囲の縦横比がおかしくなったので、Option "Calibration"の数字も240と320を入れ替えます。結局以下のように書き換えました。

Section "InputClass"
    Identifier "captouch"
    MatchProduct "ft6236"
    Option "SwapAxes" "1"
    Option "InvertY" "1"
    Option "Calibration" "0 240 0 320"
EndSection

 これでOK。

まとめ

 ディスプレイ使うだけなのに、もの凄い大変でした。ズバリの情報がネットに無かったので、動いたの半分くらい運が良かったです。また1年くらいたったら、セットアップの仕方変わってそうなのが怖いところですね…。本家にpull requestした方が良いのかなぁと思いつつも、過去の経緯とかもわかっていないので、ここに知見だけでも残しておくことにします。メーカのAdafruitが設定も済んだ全部入りイメージを公開しているので、初心者の方は素直にそちらを使った方が良さそうです。そちらならスッと動く…と思います(試してないです)。

 PiTFT動かした感じは、かなり良い感じです。といっても普通にRaspbian操作するのは実用的ではないので、自分でフルスクリーンの専用アプリを作って楽しむのが良さそうと思いました。

参考リンク

Raspberry Pi 3, PiTFT and a modern kernel (bluetooth support!) – TurboTurbo!

GitHub - adafruit/Adafruit-PiTFT-Helper: Script to configure an installed PiTFT

GitHub - adafruit/Adafruit-Occidentalis: A collection of drivers, configuration utilities, and other useful things for single-board computers from Adafruit

GitHub - adafruit/Adafruit-PiTFT-Helper: Script to configure an installed PiTFT

Raspberry Pi • View topic - raspbery pi 3 PITFT PLUS

Capacitive Touchscreen Configuration | Adafruit 2.8" PiTFT - Capacitive Touch | Adafruit Learning System