Raspberry Pi 3 + LCD タッチパネルのセットアップ

Raspberry Pi 3、無事に届きました。いわゆるラズパイ。

a244.hateblo.jp

5インチタッチパネルLCDつきのセット商品(定価15,899円キャンペーンで500円引き)を購入しました。

ぶっちゃけバラ売りしているものを個別に購入する方が安いです。面倒なのでワンセットになっているものを購入。

ARMのCPUを搭載した開発キットとしては過去にSheevaPlug*1を購入して全く活用せしなかった*2という前科があるので 今回はリターンマッチです。

内容物など

f:id:atuyosi:20161008191154j:plain

特に不足はなし。

  • 本体(Raspberry Pi 3 model B)
  • ケース(カバー?)
  • 32GB microSD
  • microSD カードリーダー(ライター)
  • 5inch LCD(Touch Screen)
  • HDMIケーブル
  • ヒートシンク
  • USBケーブル
  • 簡易マニュアル(英語)

一応、日本語の説明書き(A4用紙2枚)とAmazonのレビューよろしくみたいな紙切れつき。
ただし、LCDの接続方法については日本語の説明書きに写真が2枚記載されているだけで特に説明なし。

まあ見た感じでわかりますけどね。そんな調子で大丈夫か?って思わずにはいられません。

USB接続のキーボードとマウス、予備のmicroSDも購入しています。

せっかくなので付属品各種。

f:id:atuyosi:20161008191249j:plain
LCDタッチパネル

f:id:atuyosi:20161008191344j:plain
ラズパイ本体(イギリス製)

f:id:atuyosi:20161008194103j:plain
御本尊(?)

f:id:atuyosi:20161008192836j:plain
ヒートシンク

f:id:atuyosi:20161008193902j:plain
保護ケース


なお、型番がどこにも明記されていないですが、おそらく付属のLCDタッチパネルは、下記のリンク先と同じものだろうと思います。

5inch HDMI LCD


肝心の設定手順ですが、後述するように設定済みのOSイメージを使うか、ドライバを導入する必要があります。

ドライバの入手先としては、下記のサイトのようです。ハードウェアの製造元のサイトは特定できませんでした。

両ページとも"LCD-show-yyMMdd.tar.gz"という形式のファイルへのリンクがあります。この記事を書いている時点での最新のドライバ*3は”LCD-show-160811.tar.gz”、です。

ハードウェアのセットアップ

電源は抜いたままで作業します。

ヒートシンクの取り付け

f:id:atuyosi:20161008192737j:plain

ヒートシンクの裏面の白い剥離(はくり)()を剥がしてラズパイのLSIチップに貼り付けます。黒い面が粘着面。

f:id:atuyosi:20161008192227j:plain

ピンセットがあると作業しやすいかと思います。

f:id:atuyosi:20161008192756j:plain

位置を微調整して軽く数秒間押さえておけばOK。

LCDタッチパネルの接続

ラズパイ側のピンの本数と、タッチパネル側のコネクタの数があっていませんが、microSDスロット側に寄せて差し込むとちょうどHDMI端子の位置が重なります。

f:id:atuyosi:20161008194307j:plain:w480

f:id:atuyosi:20161008194223j:plain:w480

カチッと音がするまでHDMIコネクタを押し込む。

f:id:atuyosi:20161008194257j:plain:w480

なお、付属のケースは干渉するので使えないようです。間のスペーサーを外せば良いのかも知れませんが……。

LCDの四隅に付属のスペーサーを取り付けてネジ止めすれば完了。

OSのセットアップ

macOS で作業しています。一部を除きLinux での作業と同じ要領です。Windows 環境の場合はddコマンドの代用品*4が必要なはずです。

タッチパネル用の設定済みOSイメージを使う方法と、Raspbian を自前でセットアップしてからタッチパネル用のドライバを設定する方法があります。

microSDが2枚あったので両方ともやってみました。結論から言うとセキュリティアップデートを適用する際に時間がかかるので、後者の方法が良いと思います。

A. 設定済みのOSイメージを使う場合

付属のLCD用のドライバを組み込んだ設定済みのOSイメージが配布されているので大人しく導入してみます。

設定済みのOSイメージの入手と準備

Amazonの商品説明ページにあるURLです。

Dropbox - kksmart 5inch gpio.7z

7zip形式で圧縮されているので、展開するためにp7zipが必要…。仕方がないのでHomebrewでインストール。

$ brew  install p7zip

ダウンロードしたファイルを展開。

$ 7z x kksmart\ 5inch\ gpio.7z

圧縮ファイルを展開した5inch HDMI LCD GPIO TouchというフォルダのIMAGEフォルダ配下にOSのイメージがあります。

書き込み先デバイス名の特定

書き込み先のmicroSDを接続しておきます。SDカードリーダーであればどのようなものでも問題はないはず。

せっかくなので付属品のUSB接続のmicroSDカードリーダーを使用しました。

接続した状態で、dfコマンドを実行してデバイス名を確認。以下はあくまでも実行例。

$ df -h
Filesystem                          Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk1                         222Gi  114Gi  109Gi    52% 2001766 4292965513    0%   /
devfs                              196Ki  196Ki    0Bi   100%     678          0  100%   /dev
map -hosts                           0Bi    0Bi    0Bi   100%       0          0  100%   /net
map auto_home                        0Bi    0Bi    0Bi   100%       0          0  100%   /home
localhost:/wkLUqFGRhUNYwBbfPeObKf  222Gi  222Gi    0Bi   100%       0          0  100%   /Volumes/MobileBackups
/dev/disk2s2                       652Gi  289Gi  363Gi    45% 8006801 4286960478    0%   /Volumes/HGST
/dev/disk2s3                       279Gi  127Gi  152Gi    46%  500028 4294467251    0%   /Volumes/DSHGST
/dev/disk3s1                        30Gi  2.3Mi   30Gi     1%       0          0  100%   /Volumes/NO NAME

最後の/dev/disk3s1が接続したmicroSD。/dev/disk3がデバイスの実体で、s1は一番目のパーティション(スライス*5)。

diskN(Nは数字)のNは環境によって変化するので注意してください。間違えて別のデバイスを指定すると悲惨なことになります。上記の例で行くとdisk1がOSのパーティション、disk2はバックアップ用の外付けディスク、です。

microSDへのイメージの書き込み

まずマウント解除。

$  diskutil umountDisk /dev/disk3

macOS環境の場合は上記で確認したデバイス名に対応するraw device を書き込み先に。要するに/dev/diskNの代わりに/dev/rdiskNのようにrdiskNを使用。

rdisk3の部分は環境に応じて変更のこと。

$ sudo dd bs=1m if=5inch\ HDMI\ LCD\ GPIO\ Touch/IMAGE/5inch_HDMI_Raspbian-160406.img of=/dev/rdisk3 conv=sync

[2017/09/11 追記]

ここ最近のインストールイメージではddコマンドに追加のオプションが必要らしいです(macOSの場合はconv=sync)。

[追記ここまで]


“5inch\ HDMI\ LCD\ GPIO\ Touch/IMAGE/5inch_HDMI_Raspbian-160406.img"はダウンロードしたファイルを展開したフォルダ内にあるイメージファイル。

以下のようにメッセージが出力されるはず。

7746879488 bytes transferred in 404.839545 secs (19135679 bytes/sec)

microSDから起動

書き込んだmicroSDをマウント解除して取り外し、Raspberry Pi側のSCスロットへ。電源その他を接続して電源をONしてやれば raspbian のGUIが起動するはず。

f:id:atuyosi:20161008192815j:plain

パッケージのアップデート

まずはネットワークにに接続。

接続に成功したらip a | grep inetでIPアドレスを確認。 画面サイズ的に見づらいので、sshで接続する。

user名: pi / password: raspberry となっている。

$ ssh -l pi 192.168.0.X

Xは環境に応じて修正。


設定済みのOSイメージのバージョンの確認など

$ cat  /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

さすがに古いのでアップデート

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade
$ sudo reboot

microSDへのデータの書き込みにやたらと時間がかかります。

アップデートすると見た目が様変わりするので注意。

f:id:atuyosi:20161009214428p:plain

見た目の変化の理由は下記参照

新しいRaspbianセットアップして新デスクトップ「PIXEL」を試してみました - karaage. [からあげ]

ついでに不要なパッケージを削除しておきます。

$ sudo apt-get autoremove


B. Rapsbianに自分でドライバを入れる場合

得体の知れないOSイメージは不安な場合はこっち。

ダウンロードとmicroSDへの書き込み

Raspberry 本家から圧縮された状態のイメージファイルをダウンロードしてくる。タッチパネルがあるのでGUI付きの方(RASPBIAN JESSIE WITH PIXEL)。

f:id:atuyosi:20161009013120p:plain

Download Raspbian for Raspberry Pi

$ unzip 2016-09-23-raspbian-jessie.zip
Archive:  2016-09-23-raspbian-jessie.zip
  inflating: 2016-09-23-raspbian-jessie.img

ダウンロードが完了したらunzipで展開、上記手順のAと同様にmicroSDに書き込む。

$ sudo dd bs=1m if=2016-09-23-raspbian-jessie.img of=/dev/rdisk3
4147+0 records in
4147+0 records out
4348444672 bytes transferred in 258.882692 secs (16796969 bytes/sec)

microSDをアンマウントして、取り外す。microSDをラズパイ側に。

電源をオンにする。

f:id:atuyosi:20161009003325j:plain

LCDの設定が未完了なので画面の右端のエリアが正常に表示できない状態。

LCDの設定

設定済みのイメージを使う場合と同様に、sshで接続して作業。

最新のRaspbianではホスト名で接続可能(初期状態でAvahiが起動しているため)。

$ ssh pi@raspberrypi.local

設定ファイルとスクリプトを入手。

5inch HDMI LCD - Waveshare Wiki

$ wget http://www.waveshare.com/w/upload/3/3d/LCD-show-160811.tar.gz


作業ディレクトリを作って、取得したアーカイブを展開。

mkdir work
mv /tmp/LCD-show-160811.tar.gz work/
cd work
tar zxf LCD-show-160811.tar.gz

ls LCD-showして展開されたファイルを確認すると、設定ファイル

LCD-show フォルダ(ディレクトリ)配下に設定用のスクリプトが一式あるのでディスプレイのサイズに対応する スクリプトを実行。5inchなので./LCD5-showを実行。

$ cd LCD-show
$ ./LCD5-show

もうちょっとましな名前にできなかったのか。setupXXXとか。 ちなみにLCD-hdmiが元に戻す時用のスクリプト。

リモートから接続している場合はコネクションが切れるので注意。

f:id:atuyosi:20161009003614j:plain

これで画面全体に表示されるようになり、かつタッチパネルが反応するようになる。

視野角はともかくとして、見た目がイマイチなのは保護フィルムをはがしていないため。


C. 共通の設定(初期設定)

日本語フォント

インストールされていないとのことなので、IPA明朝/ゴシックをインストールする。QiitaあたりでなぜかVLゴシック、さざなみフォントなどをインストールしているケースがあるのは理解不能。なぜそんなイマイチなフォントにするのか。

$ sudo apt install fonts-ipafont

他にもIPAexフォントもインストール可能です。

$ sudo apt install fonts-ipaexfont

apt search fonts と実行すれば他にもフォントパッケージが見つかるのでお好みで。fonts-notoパッケージはあるのにfonts-noto-cjkは見つからない……。

[2016/10/11 追記]

UbuntuでおなじみのTakao明朝/ゴシックも利用可能です。

$ sudo apt install fonts-takao

Raspbian独自の設定ツールによる設定(raspi-config)

専用の設定ツール(raspi-config)が用意されています。 メインメニューから「Preferences」、「Raspberry Pi Configuration」をクリックすると起動します。

f:id:atuyosi:20161009215745p:plain

Localization タブから以下を設定。

  • Locale
  • Timezone
  • Keyboard

「OK」を押すと再起動するか確認してくるので"Yes"をクリックして再起動。

Linuxのインストール経験があれば見ればわかるような気もしますが、各項目は以下を参考に。

日本語入力(mozc)

変換エンジンとしてはほぼmozc一択ですが、インターフェイスとしてはいくつか種類があります。

fcitxibusuimの三種が定番です。残念ながらuimは開発が停止していたはずで、またここ最近のiBusは劣化しているのでfcitxの方が無難です。

$ sudo apt install fcitx-mozc

再起動するか、一旦ログアウトしてログインすると、日本語入力のオンオフが「Ctrl+Space」でできるはず。

画面右上にキーボードのアイコンが表示され、メインメニューの「設定」配下に「Fcitx設定」、「Mozcの設定」、「入力メソッド」のメニューが追加されるはず。

好みに応じて「Fcitx設定」、「Mozcの設定」を変更する。

[2016/10/11 追記]

上記の設定だけでは不十分というか不便です。インプットメソッドとして英語レイアウト用の設定が残ったままなので除去します。fcitxをインストール済みの状態で、

  1. 画面右上のキーボードのアイコンを右クリックし、表示されるメニューから「現在の入力メソッドの設定」をクリック
  2. 設定用のウィンドウが表示されるので1行目に英語キーボード用の設定が存在しているのでクリックして選択
  3. ウィンドウ左下のマイナスボタンをクリックして削除
  4. 左下のプラス記号のアイコンをクリックしてキーボードのレイアウトを追加
  5. ポップアップが表示されるので、最初の「キーボード - 日本語」を選択
  6. OKをクリックしてポップアップを閉じる
  7. 「キーボード - 日本語」を選択した状態で、左下にある下向きの不等号をクリックして順序を変更
  8. 右上のバツ印をクリックして設定ウィンドウを閉じる。

f:id:atuyosi:20161011011840p:plain
設定前の状態

この画像の状態だとデフォルトが英語配列の状態なのでとても不便です。


f:id:atuyosi:20161011013712p:plain
英語配列のキーボードを削除した状態

f:id:atuyosi:20161011011509p:plain
日本語配列を追加する

f:id:atuyosi:20161011011103p:plain
優先順位を変更する順序を変更する


f:id:atuyosi:20161011011052p:plain 設定後

これで英語レイアウトの設定を除去できたので「半角/全角」キーで日本語入力をオン/オフできるはずです。


※ iBusを利用している場合は上記の作業は不要です。iBusの場合は「Ctrl+Space」でローマ字入力用のキーボードとかな漢字変換用のキーボードを切り替えるようなイメージなのでまた違った考え方のはず。

ファームウェアの更新

$ sudo rpi-update

再起動を促すメッセージが表示されるので、素直に再起動する。

$ sudo reboot
$ uname -a
Linux raspberrypi 4.4.23-v7+ #913 SMP Tue Oct 4 14:16:19 BST 2016 armv7l GNU/Linux

ファームウェアのバージョンの確認方法はよくわからない。

そのほか細かいオプションは以下を参照。

GitHub - Hexxeh/rpi-update: An easier way to update the firmware of your Raspberry Pi

タッチパネルのキャリブレーション

参考:Raspberry Pi 3でCocoparタッチパネルLCD(5インチ)を使う(180°反転等) - Qiita

最新のドライバのアーカイブにはキャリブレーション用のツールは含まれていないようなので、aptでインストール。

$ sudo apt install xinput-calibrator

ssh経由では動作しないので、ラズパイにキーボードを接続した状態で下記のように実行。

$ DISPLAY=:0.0 xinput_calibrator

sudoコマンドを使う必要はないみたいです。実行すると下記の画像のように、赤い十字のマーカーが表示されるのでスタイラスでタップ。

一箇所タップするごとに次のマーカーが表示されます。

f:id:atuyosi:20161009204144p:plain

タップせずに一定時間経過するか、キーを押すと中断します。

4ヶ所ともタップすると設定ファイルの修正を促すメッセージが表示されるはず。

Calibrating EVDEV driver for "ADS7846 Touchscreen" id=6
        current calibration values (from XInput): min_x=172, max_x=3955 and min_y=152, max_y=3985

Doing dynamic recalibration:
        Setting calibration data: 170, 3972, 151, 3990
        --> 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"   "170 3972 151 3990"
        Option  "SwapAxes"      "0"
EndSection


指示通りに/etc/X11/xorg.conf.d/99-calibration.confというファイルを修正。

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

ファイルがない場合は新規作成。私の環境では以下のようになっていました。

Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "208 3905 288 3910"
        Option  "SwapAxes"      "0"
EndSection

"Calibration"の行を出力されたメッセージに従って修正します。

        Option  "Calibration"   "170 3972 151 3990"

あとはXを再起動するか、リブートすれば校正結果が反映されるはず(それほどズレていなかったように思いますが)。

そのほか

LCDタッチパネルのドライバについての補足

基盤にプリントされている文字を見る限り、タッチスクリーンのコントローラーはXPT2046 というチップ。 ADS7846 のドライバで代替可能な模様。

参考:XPT2046 Touch Controller Driver · Issue #24 · notro/rpi-firmware · GitHub

dmesg の出力では

[    4.456739] ads7846 spi0.1: touchscreen, irq 191

となっている。lsmodの出力においても、

ads7846                11390  0

というモジュールを読み込んでいる。

特に問題はなく動いているので、ドライバとしてはads7846で良いみたい。

電源アダプタについて

5V/2.5AのUSB ACアダプタもしくはパソコンのUSBポートから給電、だそうです。iPhone用のアダプタ(5V/2.4A)でひとまず動作させていますが、 やはり電力不足なのか、右上に黄色い稲妻のマーク(lightning bolt/thunderbolt?)*6が表示される時があります(ブート直後など)。そのうち電源を新調した方が良さそうです。

タッチパネルを取り外して普通の液晶ディスプレイに接続したときは2.4Aのアダプタでも警告は出ないのは確認済み。結局のところ、タッチパネルがGPIO経由で電力を消費しているという見解です。一応タッチパネル側にもバックライト用の電源コネクタはあるのでそちらから給電すればいいのか、もしくはバックライトOFF……。

f:id:atuyosi:20161009004322j:plain:w480

[2016/10/09 21:00 追記]
試しにタッチパネル側のmicroUSBポートにもケーブルをつないだところ、警告は出ませんでした。

また、ラズパイ側に電源を接続せずに、タッチパネル側のみに電源を接続しても起動はしますが、やはり警告は出ます。結局のところ電力面で万全を期すなら電源が2系統必要なようです。

[追記ここまで]

なお、電圧低下の警告表示ですが、以前は虹色の四角形だったらしいですが、いつの間にか仕様変更のようです。

f:id:atuyosi:20161009004307j:plain:w480

ファームウェアを更新すると適用される模様。

気になった点など

  • ダウンロードしたアーカイブにあるマニュアルが.doc形式…
  • LCDを接続した状態だと購入した商品付属のケースは微妙に干渉してしまうのが難点
  • Raspberry Pi 3、無線LANの5GHz帯に対応してない
  • 付属の電源ケーブル、スイッチを押し込むとONかと思いきや、押し込むとOFF……
  • LCD用の電源ケーブルが添付されていてしかるべきでは?

感想

SheevaPlug に比べるとブートローダーとかファームウェアのバグが云々とか気にしなくていいのは最高。電源がUSB給電なのも故障対策としては悪くなさそう。
普通にキーボード、マウス、モニタをつなぐだけでLinuxデスクトップとしてそこそこ使える印象。

電源は別途発注するとして、次はwebカメラの接続かな。

いっそArch Linux で 64bit化、あるいはGentoo とか。


ずいぶんといろいろ遊べそうです。

無駄に長い記事になってしまったのであとで分割する、かも。

参考にしたURL

細かいのは省略。みんんだラズパイで遊びすぎ。Qiita は内容の被りっぷりがちょっとどうかと思うレベル。

*1:正確にいうとeSATA付きのSheevaPlug+

*2:いざホームサーバーにしようと思ったら電源がダメになっていた

*3:厳密にいうと設定ファイルとスクリプト

*4:DD for win でしたっけ?

*5:BSD系の用語

*6:稲妻というか雷鳴というか