Raspberry Pi + PiTFT

記事の内容が古いため、この手順でセットアップしてもうまくいかない場合があります。
ドライバが入ったイメージもリリースされているようなので、そちらを使ったほうが簡単に使えるかも。
https://learn.adafruit.com/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi/easy-install

Raspberry Piを使ってデジカメを作ったという記事を見て、それに使われていた液晶ディスプレイがいい感じ。
Adafruit PiTFT - 2.8" Touchscreen Display for Raspberry Pi

ただの液晶ディスプレイではなく、タッチパネルでもあるので色々便利そうと思ってポチってしまった。
$36の本体に対して、EMSを使うと送料が同じぐらいの値段してお得感が全くなかったから、「USPS First Class Mail International」で送ってもらいました。
ヘタすると1ヶ月ぐらいさまよってから着くという話もありましたが、10日ぐらいで無事届きました。

よくよく見るとコネクタが基板に付いていない。。
ハンダ付けが必要ってことで、久しぶりにハンダ付けした。


久しぶりだったけど、ハンダ付けは楽しい。

準備ができたので早速セットアップ開始。
Raspberry PiのOSは、2014-01-07-wheezy-raspbian.zipが入ってる状態

ドライバのインストール

sshで入って

cd ~
wget http://adafruit-download.s3.amazonaws.com/libraspberrypi-bin-adafruit.deb
wget http://adafruit-download.s3.amazonaws.com/libraspberrypi-dev-adafruit.deb
wget http://adafruit-download.s3.amazonaws.com/libraspberrypi-doc-adafruit.deb
wget http://adafruit-download.s3.amazonaws.com/libraspberrypi0-adafruit.deb
wget http://adafruit-download.s3.amazonaws.com/raspberrypi-bootloader-adafruit-112613.deb
sudo dpkg -i -B *.deb

注意:
2013 Aug以降のRaspbianがインストールされている場合は、以下のコマンドを実行してaccelerated X framebufferを停止しておく必要があります。

sudo mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf ~

(salexkiddコメントありがとうございます)

終わったらPiTFTを繋ぐので、一旦落とします

sudo shutdown -h now

落ちたら、PiTFTを接続して起動します。


この時、起動してもまだディスプレイには何も表示されず、バックライトが点いただけ。

ドライバの設定をして、X serverを起動してみると

sudo modprobe spi-bcm2708
sudo modprobe fbtft_device name=adafruitts rotate=90
export FRAMEBUFFER=/dev/fb1 
startx


デスクトップがTFTに表示されました!

続けて、起動時にドライバが読み込まれるように設定をします
Control + C でX Serverを止めます

エディタを開いて、/etc/modules に書きます

$ sudo nano /etc/modules

spi-bcm2708
fbtft_device

Control X + Y して、Enterで保存できます

次に

$ sudo nano /etc/modprobe.d/adafruit.conf

options fbtft_device name=adafruitts rotate=90 frequency=32000000

frequency=32000000は、20FPSの設定。

ここで、OSを再起動します。

sudo reboot

設定ファイルを追加

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

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "stmpe-ts"
        Option  "Calibration"   "3800 200 200 3800"
        Option  "SwapAxes"      "1"
EndSection

タッチパネルのセットアップ

タッチパネル用のデバイスファイルの設定をします

$ sudo nano /etc/udev/rules.d/95-stmpe.rules

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

タッチスクリーンのモジュールをリロード

sudo rmmod stmpe_ts; sudo modprobe stmpe_ts

タッチパネル用のデバッグツールなどインストール

sudo apt-get install evtest tslib libts-bin

以下のコマンドで、タッチパネルの情報を見ることが出来ます

sudo evtest /dev/input/touchscreen

Input driver version is 1.0.1
Input device ID: bus 0x18 vendor 0x0 product 0x0 version 0x0
Input device name: "stmpe-ts"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 330 (BTN_TOUCH)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value   1692
      Min        0
      Max     4095
    Event code 1 (ABS_Y)
      Value   1441
      Min        0
      Max     4095
    Event code 24 (ABS_PRESSURE)
      Value      0
      Min        0
      Max      255
Properties:
Testing ... (interrupt to exit)
Event: time 1393059859.794388, type 3 (EV_ABS), code 0 (ABS_X), value 2400
Event: time 1393059859.794398, type 3 (EV_ABS), code 1 (ABS_Y), value 1094
Event: time 1393059859.794402, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 70
Event: time 1393059859.794407, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1393059859.794411, -------------- SYN_REPORT ------------
Event: time 1393059859.800637, type 3 (EV_ABS), code 0 (ABS_X), value 2392
Event: time 1393059859.800651, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 100
Event: time 1393059859.800658, -------------- SYN_REPORT ------------
Event: time 1393059859.806818, type 3 (EV_ABS), code 0 (ABS_X), value 2380
Event: time 1393059859.806830, type 3 (EV_ABS), code 1 (ABS_Y), value 1095
Event: time 1393059859.806835, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 107

キャリブレーション

次のコマンドで、キャリブレーションを開始します

sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_calibrate


画面にカーソルみたいのが表示されるので、タップします。

次に、以下のコマンドでお絵かきのテストをします

sudo TSLIB_FBDEVICE=/dev/fb1 TSLIB_TSDEVICE=/dev/input/touchscreen ts_test


なにか書いてみて、触ったところと描画位置がずれるようであれば、上記のキャリブレーションをやり直します。

X input systemのキャリブレーション

wget http://adafruit-download.s3.amazonaws.com/xinput-calibrator_0.7.5-1_armhf.deb
sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb

古いデータを一旦削除して起動

sudo rm /etc/X11/xorg.conf.d/99-calibration.conf
FRAMEBUFFER=/dev/fb1 startx &
DISPLAY=:0.0 xinput_calibrator


また、カーソルをポチポチタップします

ポチポチが終わると、ターミナルに以下が表示されます

--> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf'
Section "InputClass"
	Identifier	"calibration"
	MatchProduct	"stmpe-ts"
	Option	"Calibration"	"15 3712 3843 226"
	Option	"SwapAxes"	"1"
EndSection

この情報をファイルに書きます

sudo nano /etc/X11/xorg.conf.d/99-calibration.conf

Section "InputClass"
	Identifier	"calibration"
	MatchProduct	"stmpe-ts"
	Option	"Calibration"	"15 3712 3843 226"
	Option	"SwapAxes"	"1"
EndSection

キャリブレーションはこれで終わり

標準出力をPiTFTに設定する

いつもはHDMIでテレビに繋いでましたが、せっかく液晶モニターが手に入ったので、標準出力を表示できるようにします。

/boot/cmdline.txt を編集して、一番最後に

sudo nano /boot/cmdline.txt 

一番最後に以下と追記します

fbcon=map:10 fbcon=font:VGA8x8

再起動すると、液晶に表示されます!

カッコイイ・・