Amazonで購入出来る、タッチパネル式格安液晶「cocopar 4インチIPSハイビジョンLCD ディスプレイ」をRaspberry Pi 3で使う

Amazonで購入出来る、タッチパネル式格安液晶「cocopar 4インチIPSハイビジョンLCD ディスプレイ」をRaspberry Pi 3で使う

今日は、ながーいタイトルです。
内容は、そのままRaspberry Pi 3 で格安で購入した液晶を使用する手順。

基本的には、手順書みたいな物を参照すれば導入出来るのですが、少しだけん~?っと思った部分があったので、僕と同じ何も知らない人、あるいは初心者の人と共有できればと思って投稿します。

格安液晶

僕が購入したのは、cocoparというメーカー?から発売されているRaspberry Pi用の液晶。4インチの物です。
Amazonから購入したので、商品ページへのリンクを貼っておきます。

この商品。お値段3,000円と、お気軽に導入出来そうな液晶の中でとても安い部類に入ると思います。
しかし、注意して欲しいのは、商品タイトルにあるIPSハイビジョンという部分。
IPSという部分はわかりませんが、ハイビジョンという表現には語弊がある気がします。
この液晶の実際の解像度は、320×480です。決して1980×1080とかいう高級なものではありません。まぁ値段からわかると思いますが……

質の高いものという方には、下にリンクを貼りますが、シャープのIGZOな液晶が情報も比較的あり、良いのかもしれません。
秋月で売っています。こっちは、フルHD以上。1920×1200です。しかし、お値段12,000円也

しかし、安いということは良いこと!
Raspberry Piを買ったはいいもののどうやって遊べば良いか…… なんて方には、安くて良いのかもしれません。(僕も、この液晶は値段だけをみて購入しました。)

商品が届いたら

商品は、小さな箱に入ってきますが、包装は結構あっさり目。でも、あまり雑という感じはしませんでした。
いつもは、開封の写真を撮影するのですが、今回は失念していたようです。僕が買ったのは、今年の1月と2ヶ月以上も前の話です。
中身は、本体と、タッチペン。メッセージカードのみ。説明書などは同梱されていません。

それらの類いはネットからダウンロードする方式です。
Amazonの商品ページにリンクがあるので、そっちからダウンロードする必要が有ります。
ダウンロードするファイルは、ZIPで固められていて、中にOSにイメージファイルもあるので、ファイルサイズは大きめ。しかも、専用ページとかではなく、DropBoxからのダウンロードなので、結構時間が掛かります。それだけお気を付けて下さい。

導入

ここからが導入編です。

先程、ダウンロードするファイルにOSイメージが含まれている事を書きました。どうやらそのOSイメージをインストールすれば即座に導入出来るようですが、僕は、既にRaspbian←(スペル自信無し)をインストール済みだったので、それにドライバー等をインストールして導入することに。
OSイメージは試していないため詳細は不明です。

ドライバー

ドライバーのインストールといっても、それほど難しくはなく、ダウンロードしたファイルの中に含まれる、説明書、手順書を読めば誰でも出来るようになっています。
説明書は、ダウンロードしたファイルを解凍すると出てくる「3.5inch RPi LCD」というフォルダの配下にある「Document」フォルダに入っています。

気をつけて下さい。中身は、docファイルのため、Wordをインストールするか、どこかオンラインストレージなどにアップロードして読む必要がありますので。
今どき、docファイルっていうのも珍しいですが…… 一緒にある、SDカードへのOSの焼き方の手順は、pdfなのに不思議ですね。こっちの手順もpdfにして欲しかったです。

さてさて、その手順書ですが、ファイル名は「LCD User Guide.doc」英語版と中国語版がありますが、大抵の方は、英語版かと思います。
画面を表示するには、その手順に従って操作をすればOK!
そのためざっくりと行こうと思います。

液晶への表示まで

液晶は、Raspberry Piのにょきにょき出てる端子へブスっっと!基板に合う感じで刺せば大丈夫です。

ここからドライバーのインストールですが、必要なファイルは、documentフォルダにある、「LCD-show-160729.tar.gz」というファイルをRaspberry PiへFTP。
適当にhomeあたりにぶち込んで下さい。
そしたら、とりあえず解凍。

$ tar xvzf LCD-show-160729.tar.gz

するとこんなディレクトリができあがります。

$ ls -l
total 52
drwxr-xr-x 6 pi pi  4096 Jul 29  2016 LCD-show
-rw-r--r-- 1 pi pi 46841 Jul 29  2016 LCD-show-160729.tar.gz

ドライバはこのLCD-showというディレクトリの中に。

$ ls -l
total 112
drwxr-xr-x 2 pi pi  4096 Jul  9  2016 ?
-rwxr-xr-x 1 pi pi   264 Jul  9  2016 LCD-hdmi
-rwxr-xr-x 1 pi pi   373 Jul  9  2016 LCD101-1024x600-show
-rwxr-xr-x 1 pi pi   395 Jul  9  2016 LCD32-show
-rwxr-xr-x 1 pi pi   395 Jul  9  2016 LCD35-show
-rwxr-xr-x 1 pi pi   393 Jul  9  2016 LCD4-show
-rwxr-xr-x 1 pi pi   353 Jul  9  2016 LCD43-show
-rwxr-xr-x 1 pi pi   351 Jul  9  2016 LCD5-show
-rwxr-xr-x 1 pi pi   369 Jul 11  2016 LCD7-1024x600-show
-rwxr-xr-x 1 pi pi   367 Jul 13  2016 LCD7-800x480-show
drwxr-xr-x 2 pi pi  4096 Jul 15  2016 boot
-rwxr-xr-x 1 pi pi   168 Jul  9  2016 cmdline.txt
-rwxr-xr-x 1 pi pi  1633 Mar 16  2016 dtc.sh
drwxr-xr-x 3 pi pi  4096 Jul  9  2016 etc
-rwxr-xr-x 1 pi pi  2113 Jul  9  2016 inittab
drwxr-xr-x 3 pi pi  4096 Jul  9  2016 usr
-rwxr-xr-x 1 pi pi  2148 Jul  9  2016 waveshare32b-overlay.dtb
-rwxr-xr-x 1 pi pi  2682 Jul 29  2016 waveshare35a-overlay.dtb
-rwxr-xr-x 1 pi pi 38368 Jul  9  2016 xinput-calibrator_0.7.5-1_armhf.deb
$

こんな感じにファイルができあがりますが、必要なドライバはこの中の一つのシェルを叩けば自動的にインストールという親切設計!
僕の購入した4インチの物であれば、LCD4-show というファイルをぶったたくだけ!

$ ./LCD4-show
$ cat LCD4-show
sudo mkdir /etc/X11/xorg.conf.d
sudo cp ./waveshare35a-overlay.dtb /boot/overlays/waveshare35a.dtbo
sudo cp -rf ./etc/X11/xorg.conf.d/99-calibration.conf-4  /etc/X11/xorg.conf.d/99-calibration.conf
sudo cp -rf ./usr/share/X11/xorg.conf.d/99-fbturbo.conf  /usr/share/X11/xorg.conf.d/
sudo cp ./cmdline.txt /boot/
sudo cp ./inittab /etc/
sudo cp ./boot/config-4.txt /boot/config.txt
sudo reboot
$

これだけ!とっても簡単でしょ?
最後にrebootコマンドが入っているので、叩いたらすぐに再起動しますが、心配しないで下さい。仕様です。
これだけで、ひとまず画面は表示することが出来ます。

タッチパネル

僕が、時間掛かったのはここから。

多分、先程の手順が完了した次点では、タッチパネルは位置が正確ではなく、ずれていると思います。
ずれてはいなくても、横にタッチを移動したら縦移動するとか……
そこで必要なのがキャリブレーション

コマンドは、以下の通りです。

$ cd LCD-show/
$ sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
$ su pi
$ DISPLAY=:0.0 xinput_calibrator

xinput_calibratorというのを使うのですが、この時piユーザーになってる必要が有るみたいです。
頭のDISPLAY=:0.0は画面の指定。なので環境によっては違うかもしれませんが、大抵は0.0で大丈夫。

僕の環境が悪かったのか、このコマンドを叩くと、以下のように表示されます。

$ DISPLAY=:0.0 xinput_calibrator
Calibrating standard Xorg driver "ADS7846 Touchscreen"
        current calibration values: min_x=0, max_x=65535 and min_y=0, max_y=65535
        If these values are estimated wrong, either supply it manually with the --precalib option, or run the 'get_precalib.sh' script to automatically get it (through HAL).
        --> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "MinX"  "21162"
        Option  "MaxX"  "21162"
        Option  "MinY"  "48759"
        Option  "MaxY"  "51899"
        Option  "SwapXY"        "1" # unless it was already set to 1
        Option  "InvertX"       "0"  # unless it was already set
        Option  "InvertY"       "0"  # unless it was already set
EndSection
$

ダウンロードした手順書には、「Setting new Calibration data: 999, 9999, 9999, 999」の数字の羅列の部分を、/etc/X11/xorg.conf.d/99-calibration.confのOption “Calibration”へコピペみたいな事が書いてありますが、そんなものは出力されません。
この時手順書と違うのは、出力の一行目、driverの部分です。手順書には、EVDEV driver for… とありますが、僕の環境では、Xorg driverでした。
これが原因。EVDEVドライバーを使わなくてはいけないのですね。

僕の環境では入っていなかったので、インストールします。
おなじみのapt-get install

$ sudo apt-get install xserver-xorg-input-evdev

しかし、これをやっただけではどうやら上手くいかないよう。
少し、コンフィグファイルを弄ってあげてください。

$ cat /etc/X11/xorg.conf.d/99-calibration.conf
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3872 95 293 3917"
EndSection

ちょっと、修正前にどうなっていたのか、元のファイルを無くしてしまって、正確にはわかりません。
ただ、問題なのは、driverが指定されていない点。

ここに以下の一文を書き加えてあげてください。
Driver "evdev"

$ cat /etc/X11/xorg.conf.d/99-calibration.conf
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Driver  "evdev"
        Option  "Calibration"   "3872 95 293 3917"
EndSection

場所は、多分MatchProductの後で良いと思う。
そして、再起動。

そしたら、もう一度xinput_calibrator

$ DISPLAY=:0.0 xinput_calibrator
Calibrating EVDEV driver for "ADS7846 Touchscreen" id=6
        current calibration values (from XInput): min_x=3872, max_x=95 and min_y=293, max_y=3917

Doing dynamic recalibration:
        Setting calibration data: 3890, 97, 375, 3795
        --> Making the calibration permanent <--
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3890 97 375 3795"
        Option  "SwapAxes"      "1"
EndSection
$

そうすると、こんな感じ。

Setting calibration data: 3890, 97, 375, 3795

この求めてた数字が出てくれると思います。
そしたら、/etc/X11/xorg.conf.d/99-calibration.conf

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Driver  "evdev"
        Option  "Calibration"   "3890 97 375 3795"
        Option  "SwapAxes"      "1"
EndSection

を書き込んであげてください。
この時、Calibration結果のcopyしてよの部分を書き込む訳ですが、Driverの指定をお忘れ無く!
これを忘れると、やっぱりダメなので。

そしてたらもう一度sudo reboot

それで、晴れてタッチパネルが正常に動くようになります。

まとめ

xinput_calibratorを実行して、上手くいかなくて、--precalibオプションを付けて実行したり、「If these values are estimated wrong」で検索したりとしたけれど、上手く行かなくて、何度もLCD4-showを叩きました。
xinput_calibratorなんて初めて使うので、良くわからない。色々99-calibration.confの内容を変えてみてもだめ。という状況。
そこで、ドライバーに気付いたからラッキー
Driver "evdev"を書き加えてみて、実行してもダメで、勘を頼りにapt-cache search evdevを実行してみて、それっぽいxserver-xorg-input-evdevをインストールしてみて動くという偶然。
xinput_calibratorとか、xorgとかについて調べきっていないから、動く理由とかはまだ説明出来ません。

でも、せっかく買ったのだからとりあえず動かしたい!TeraTermで色々やるのも良いけど、やっぱりGUIが適当な画面に表示されるのは楽しいよね!
この記事は、本当に理解したい方ではなく、とりあえず動かしたい!な方向けの記事でした。

わからない事だらけでつまらなくなる前に動かす楽しみを知って、それから色々知りましょう。
だってその方が楽だし、楽しいでしょ?動かないまま延々と調べるのと、とりあえず動かして理由を調べるのではモチベーションが違うからね!!

多分ちゃんとしたマニュアルとかはここら辺なんじゃないかな?

バージョンとかは適当だよ!でもそんなに変わらないよね?(笑)