千石の4inchタッチディスプレイをRaspberryPi 2 につなぐ

千石で売ってる4inchのタッチディスプレイがあります ( http://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4R4Y# )
これですね

rpi2_display

安くて、ちょうどRaspberryPiにあうので、早速これをRaspberryPi2で使いたいので、必要な設定を紹介します。いろんなサイトに載ってるのですが、新しいOSだと設定が変わっていて、結構違うので今の(2015年9月)最新の設定方法を載せます。

1. SPIを有効にする

SPIは標準で無効になってますが、液晶との通信につかうので有効にします。/boot/config.txtでかんりされてます。ついでにI2Cも有効にします。

[shell]
sudo nano /boot/config.txt
[/shell]

で開いたら

[shell]
dtparam=spi=on
dtparam=i2c=on
dtparam=i2c1=on
dtparam=i2c_arm=on
[/shell]

を最後に追加(既にどこかに書いてあれば不要)
(もし、今 sshでなく画面から直接raspberrypiいじってるなら  sudo raspi-config で AdvancedOptions->A6 SPI->SPI enable で有効にすることも出来る)
一度再起動してみましょう。

[shell]
sudo reboot
[/shell]

ちゃんとSPIが使えるようになってるかデバイスのログで確認します。

[shell]
dmesg | grep spi
[ 4.267650] bcm2708_spi 3f204000.spi: DMA channel 2 at address 0xf3007200 with irq 77
[ 4.287179] bcm2708_spi 3f204000.spi: DMA channel 4 at address 0xf3007400 with irq 20
[ 4.333979] ads7846 spi0.1: touchscreen, irq 497
[ 4.349000] input: ADS7846 Touchscreen as /devices/platform/soc/3f204000.spi/spi_master/spi0/spi0.1/input/input2
[ 4.372183] bcm2708_spi 3f204000.spi: SPI Controller at 0x3f204000 (irq 80)
[ 4.384192] bcm2708_spi 3f204000.spi: SPI Controller running in dma mode
[/shell]

2. FBTFTドライバのインストール

液晶用のドライバをインストールしてもう一度再起動します(しなくても続けられますが、気になる人は念のため)

[shell]
sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update
sudo reboot
[/shell]

3. フレームバッファの変更

映像出力をHDMIからLCD出力へ切り替えます(/dev/fb0を/dev/fb1にする)

[shell]
sudo nano /usr/share/X11/xorg.conf.d/99-fbturbo.conf
[/shell]

でファイルを開いて以下のようにfb1にします。

[shell]
Section "Device"
Identifier "Allwinner A10/A13 FBDEV"
Driver "fbturbo"
Option "fbdev" "/dev/fb1"
Option "SwapbuffersWait" "true"
EndSection
[/shell]

4. touchscreeの関連パッケージのインストール

[shell]
sudo apt-get install xinput evtest libts-bin
[/shell]

5. Module情報の更新

/etc/modulesにつながってるモジュールに関して記載できます。ここに液晶とタッチデバイスについて書きます。

[shell]
sudo nano /etc/modules
[/shell]

でひらいたら

[shell]
snd-bcm2835
flexfb width=480 height=320 regwidth=16 init=-1,0xb0,0x0,-1,0×11,-2,250,-1,0x3A,0x55,-1,0xC2,0x44,-1,0xC5,0x00,0x00,0x00,0x00,-1,0xE0,0x0F,0x1F,0x1C,0x0C,0x0F,0x08,0x48,0x98,0x37,0x0A,0x13,0x04,0x11,0x0D,0x00,-1,0xE1,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0xE2,0x0F,0x32,0x2E,0x0B,0x0D,0x05,0x47,0x75,0x37,0x06,0x10,0x03,0x24,0x20,0x00,-1,0×36,0×28,-1,0×11,-1,0×29,-3

fbtft_device debug=3 rotate=0 name=flexfb speed=16000000 gpios=reset:25,dc:24
[/shell]

このようにします

6. /boot/cmdline.txt

[shell]
sudo nano /boot/cmdline.txt
[/shell]

にて、中身をこのようにします。これは全部1行で改行なしです

[shell]
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbtft_device.custom fbtft_device.name=flexfb fbtft_device.gpios=dc:24,reset:25 fbtft_device.bgr=1 fbtft_device.speed=16000000 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo dma.dmachans=0x7f35 console=tty1 consoleblank=0 fbtft_device.fps=50 fbtft_device.rotate=270
[/shell]

7. configにTouchデバイスを教える

Touchデバイスに関しての設定をします。

[shell]
sudo nano /boot/config.txt
[/shell]

でconfigファイルを開いたら以下の行を最後に追加します。

[shell]
dtoverlay=ads7846,cs=1, penirq=17, speed=1000000, swapxy=1
[/shell]

これが重要です。ここが古いOSだと違うけど、新しいのはここでads7846を指定しないといけない

8. タッチデバイスのキャリブレーション

タッチの位置を調整します。

[shell]
sudo nano /usr/share/X11/xorg.conf.d/99-calibration.conf
[/shell]

にて(ファイルがすでにある場合は削除)

[shell]
Section "InputClass"
Identifier "calibration"
MatchProduct "ADS7846 Touchscreen"
Option "Calibration" "3900 240 3900 240"
EndSection
[/shell]

これで完了です。あとは便利な設定をしておきましょう

9. 自動ログイン

パスワードを聞かれないようにします。

[shell]
sudo nano /etc/inittab
[/shell]

にて

[shell]
1:2345:respawn:/bin/login -f pi tty1 </dev/tty1>/dev/tty1 2>&1
[/shell]

のコメントアウトを外します。

10. X自動起動設定

[shell]
sudo nano /etc/rc.local
[/shell]

にて
su -l pi -c startx
を中身に追加してこんな風にします。

[shell]
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

su -l pi -c startx

exit 0
[/shell]

11. 再起動

[shell]
sudo reboot
[/shell]
これで全部完了です。再起動すればディスプレイに映像が出て、画面タッチも使えるようになります