Raspberry Pi 3 でRaspberryPI用タッチ液晶(LCD)を使う

# 概要
RaspberryPi3といっしょに3.5インチのLCDを手に入れたのですが、古い記事が多く最新のRASPBIAN JESSIE(2016-03-18)ではうまくいかなかったので違っているあたりをまとめておきます。

# 購入したもの
* Raspberry Pi3 Model B (私が買ったのはRS版)
* [cocopar Raspberry pi 2B/3B用 3.5インチ タッチスクリーン TFTモニタLCD]
  (http://www.amazon.co.jp/gp/product/B00U6YCIT6/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00U6YCIT6&linkCode=as2&tag=loopsketch-22)
  (今回のお題のメイン)
* [Eleduino Raspberry Pi 3 Model B and Raspberry Pi 2 Model B アクリル ケース ブラック]
  (http://www.amazon.co.jp/gp/product/B00V573QDU/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=B00V573QDU&linkCode=as2&tag=loopsketch-22)
  (ケースはなんでもいいんですが、このケースだとこのLCDがピッタリ載りました)

裏側はこんな感じの基板です。同じ型式のものなら同じ手順でいけるのでは、と思います。

|![基板の画像.jpeg](https://qiita-image-store.s3.amazonaws.com/0/93228/e89e4e68-9575-caba-bcad-b7ff3cb937a6.jpeg)|
|---|

# ベースイメージ

* [2016-03-18-raspbian-jessie.img] (https://www.raspberrypi.org/downloads/raspbian/)
  ※このままosxからddでSDカードに焼いて使用しました

# 参考にした記事
参考にさせていただきました、ありがとうございます。
* [installation of WaveShare 35Inch LCD on Raspbian]
  (https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi)　←この基板のインストール手順(だが古い環境用)
* [Raspberry Pi 2 Model B で安いRaspberry用タッチ液晶(LCD)を使う]
  (http://qiita.com/satorukun/items/54dcd6d4d6b33fb253ad)

# 設定手順
以下、違いがあったところを中心にまとめておきます。

## SPIを有効にして、タッチパネル用のドライバを有効にする
SPIを有効にするのはraspi-configを使っても良いです。最終的に /boot/config.txt に以下の様に追記されればいいはず。最近のraspbianはdtoverlayでドライバを有効にできるのかな？。/boot/overlays/READMEに有効にできるモジュール？とパラメータなどが書いてあります。ちょっと嵌まったのが、解説によく書いてあったパラメータの区切りの,(カンマ)のあとには空白が入っていたのだけど、ここで設定するときは空白を抜かないとパラメータエラーになりました。

```text:/boot/config.txt
dtparam=spi=on
dtparam=i2c_arm=on

dtoverlay=ads7846,cs=1,penirq=17,speed=500000,swapxy=0,pmax=255,xohms=60,xmin=200,xmax=3900,ymin=200,ymax=3900,verbose=3
```

## LCD用フレームバッファの設定
結構嵌まったのがフレームバッファのドライバ。とくにカーネルをビルドしなおしたりは必要なく、モジュールのロードの仕方や設定の仕方が結構変わっていました。/etc/modulesに書くのではうまくいかなくて、以下の2ファイルを追加してrebootすると起動後LCDが黒くなるようになります。

```text:/etc/modules-load.d/fbtft.conf
spi-bcm2835
flexfb
fbtft_device
```

```text:/etc/modprobe.d/fbtft.conf
# for waveshare rpi lcd 3.5
options flexfb  width=320  height=480  regwidth=16 init=-1,0xb0,0x0,-1,0x11,-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,0x36,0x28,-1,0x11,-1,0x29,-3
options fbtft_device debug=3 rotate=90 name=flexfb speed=16000000 gpios=reset:25,dc:24
```

flexfbの設定で最後の方の0x36,0x28を0x36,0xf8にすると270°反転となり、HDMIの差し口を下にできます。

あとはraspi-configのBoot OptionsでB1かB2に設定し、cmdline.txt/boot/でfbconの設定をすれば、LCDのほうにコンソールが表示されるようになります。参考までに自分のSDに記載されているものを挙げておきます。

```text:/boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes fbcon=map:1 fbcon=font:ProFont6x11 rootwait
```

とりあえずコンソールでログインするところまでは来ました。

|![コンソール画面.jpeg](https://qiita-image-store.s3.amazonaws.com/0/93228/75b2ed8e-36a5-3497-75a5-5e2509814a2e.jpeg)|
|---|

## その他の設定
この状態で、startxするとfb0のほうでXが始まり、LCDの画面上を触ればタッチパネルも働きマウスカーソルも移動するようなのですが、~~タッチパネルのキャリブレーションをしても思うように動かせていません。引き続きうまく動くようになったら更新します。~~(4/18追記)自分の環境はUSBのコネクタが右側に来るように置いているためタッチパネルのキャリブレーションの設定を最初の二つとあとの二つを入れ替えることでうまく動くようになりました。Xの設定などは[このへんの流れ](https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi)で基本うまくいくはずです。

|![Xデスクトップ画面.jpeg](https://qiita-image-store.s3.amazonaws.com/0/93228/af2f0cb3-c0d9-7ee2-1ef1-9d4c0e685dd9.jpeg)|
|---|

ブートの様子を収めた動画です。
[![ブート動画](http://img.youtube.com/vi/dZPAxVGDuLY/0.jpg)](https://youtu.be/dZPAxVGDuLY)

## 追加情報
(4/19) sudo rpi-update して 4.4.7-v7+ #877 になりましたが、無事起動しました。
(5/6) ベースにしたイメージの情報を追記しました。