2016年3月12日土曜日

Raspberry Pi純正7inch Touch ScreenとRaspbian Jessieへのジェスチャー機能の導入

Raspberry Pi公式7inch Touch Screenが届いたのが1月中旬だったかと思いますが、いままで多忙のため、ほったらかしにしていました。

OSも入れ替えるので、スクリーンがあったほうがよいと思い、使ってみることにしました。

まずボードを見ると、ATTINY88、つまり汎用AVRマイコンがいて、おや、と思いました。基板のパターンが見えないのでなんともいえませんが、東芝TC358762XBG DPI-DSIシリアル-パラレル変換チップとディスプレイコントローラのFT5406DQ9(フレキのなかに埋まっている)の間に入って、パラレル信号をAVRマイコンのI/Oで受けて、FT5406DQ9にSPIで画面のビットマップデータを渡す仕事をしているのかなあと思うところです。TC358762XBGの右側、Raspberry Piロゴのところで盛大にパラレルのラインが走っているのですが、スルーホールが終端になっているので、そこから基板の裏に抜けてATTINY88のI/Oに入っていると想像すると、ATTINY88とフレキのコネクタが隣り合っている理由が立つんではないか、という感じです。

あとRaspberry Piにこのボードから給電する使い方なので、電源がどうなっているのかが気になりますが、搭載されている電源チップはTIのTPS65101という液晶ディスプレイ用マルチ電圧電源チップが搭載されているだけで、Raspberry Pi基板給電についてこれといった特別な配慮はないように見えました。USB端子から給電されたものを液晶用にはこのチップで複数の電圧の電源を作って使いますが、Raspberry Pi側にはそのまま流すだけなのかなと思います。

マルチタッチのための指の座標などを扱うI2Cに関しては、Raspberry Pi A+/B+以後はDSI端子にI2Cが出ているのでそれを使うそうです。一方、Pi 1のDSIにはI2Cが含まれていないので、Raspberry PiのGPIOに配線するためのI2Cピンヘッダが出ているということのようです。販売されているキットに4色のメス-メスワイヤーがついてきて、赤と黒でRaspberry Piにこの基板から給電するような説明で、残りの3つのピンや黄と青のワイヤーの使い道について説明がないのは、それが理由のようです。つまり、Pi 1ならSCLとSDAを余った2本のワイヤーでそれぞれGPIOの物理ピン番号で5(SCL)と3(SDA)につないでタッチ機能を使えるようにする、ということ。さらに、ボード上のUSB A端子は5V出力用なので、百均の短いmicroUSBケーブルを使ってRaspberry Piに給電してあげれば、Pi 1以外ではキットに添付のワイヤーは不要になります。
ディスプレイ裏のボード部分
話が前後しましたが、接続方法はRSコンポーネンツの代理店ケイエスワイさんのページにある通り簡単で、DSIフラットケーブルの向きや裏表を間違えないことと、この手のケーブル用コネクタはプラスチックの押さえを引き出してからケーブルを差し込み、再度押し込んで固定する構造ということさえ理解していればよい、と、他のブログでもいろいろ解説されている通りです。Raspbianも最新のNOOBSでは最初からタッチデバイスを「FT5406」として認識してくれました。lsmodすると、「rpi_ft5406」というカーネルモジュールも入っています。

ということで、いきなり何も困らない感じでしたが、触ってみると困るのが右クリックがないこと。

WheezyではXの設定でEmulateButton3関係のプロパティを設定してあげれば動くようですが、Jessieではプロパティが設定されていても無視されるようでした。ここまではフォーラムの前半の議論の通りですが、次のページにあたる後半に、twofingというプログラムでジェスチャーイベントを設定してやる方法がありました。 設定手順は別スレッドに整理されていたので、こちらを参照されるとよいと思います。

「twofing」が実現するのは、以下の3つのジェスチャーのようです。
  • 2本指スクロール(タブレットと同様に、指に画面移動がついてくる動き)
  • 2本指ピンチズームと回転
  • 2本指タップによる右クリック
やってみると、狭い画面で2本指タップで右クリックというのはなかなかつらいですが、タップを使っている間に右クリックだけのためにマウスに手を伸ばすのはたいへん残念なので、それよりはよほどいいのかなと思います。

フォーラムに書かれている手順の概略をだいたいまとめると以下の通り。
  1. gitを入れる
    $ sudo apt-get install git
  2. ソースを取得
    $ git clone https://github.com/Plippo/twofing.git
  3. 必要なライブラリ取得
    $ sudo apt-get install build-essential libx11-dev libxtst-dev libxi-dev x11proto-randr-dev libxrandr-dev
  4. cd twofing; make; make install
  5. /etc/udev/rules.d/70-touchscreen-egalax.rules に以下を追記
    KERNEL=="event*",ATTRS{name}=="FT5406 memory based driver",SYMLINK+="twofingtouch",RUN+="/bin/chmod a+r /dev/twofingtouch"
  6. ~/.config/lxsession/LXDE-pi/autostart に以下を追記
    @/usr/bin/twofing
5番目はOS起動時にタッチスクリーンの入力イベントデバイスを、twofingが参照するデバイス /dev/twofingtouch に関連付ける記述で、6番目はLXDEが起動するときについでにtwofingを起動させるための記述です。

これで二本指ジェスチャーが使えるようになって、マウスがなくてもあまり困らなくなると思います。

右クリックは上部のバーですぐに確かめられます。スクロールは標準のEpiphanyブラウザで、ピンチでの拡大縮小はLibreOfficeで確認できると思います。

このあとさらにオンスクリーンキーボードもあればキーボードも不要になっていよいよタブレットということになりそうですが、LXDEデスクトップを使うには解像度が足りないので画面が狭く、ちょっと躊躇するところです。この画面サイズで指操作を考慮した特定のアプリケーションでの利用に限定するのが無難なのかと思います。研究・開発用という感じでしょうか。