Raspberry Pi 3 + LCD タッチパネルのセットアップ
スポンサーリンク
Raspberry Pi 3、無事に届きました。いわゆるラズパイ。
5インチタッチパネルLCDつきのセット商品(定価15,899円キャンペーンで500円引き)を購入しました。
kksmart Raspberry pi 3 model b ラズベリーパイ電子工作入門 5インチタッチパネルキット
- 出版社/メーカー: kksmart
- メディア: エレクトロニクス
- この商品を含むブログを見る
ぶっちゃけバラ売りしているものを個別に購入する方が安いです。面倒なのでワンセットになっているものを購入。
ARMのCPUを搭載した開発キットとしては過去にSheevaPlug*1を購入して全く活用せしなかった*2という前科があるので 今回はリターンマッチです。
ラズパイ用のタッチパネル液晶ですが、最近はGPIO端子を全て塞がないタイプが登場しています。
内容物など
特に不足はなし。
- 本体(Raspberry Pi 3 model B)
- ケース(カバー?)
- 32GB microSD
- microSD カードリーダー(ライター)
- 5inch LCD(Touch Screen)
- HDMIケーブル
- ヒートシンク
- USBケーブル
- 簡易マニュアル(英語)
一応、日本語の説明書き(A4用紙2枚)とAmazonのレビューよろしくみたいな紙切れつき。
ただし、LCDの接続方法については日本語の説明書きに写真が2枚記載されているだけで特に説明なし。
まあ見た感じでわかりますけどね。そんな調子で大丈夫か?って思わずにはいられません。
USB接続のキーボードとマウス、予備のmicroSDも購入しています。
- iBUFFALO USB接続 有線スタンダードキーボード ホワイト BSKBU18WH
- BUFFALO 有線光学式マウス 静音/3ボタン/Mサイズ ホワイト BSMOU27SMWH
- 【Amazon.co.jp限定】Transcend microSDHCカード 32GB Class10 UHS-I対応 無期限保証 Nintendo Switch / 3DS 動作確認済 TS32GUSDU1PE (FFP)
せっかくなので付属品各種。
LCDタッチパネル
ラズパイ本体(イギリス製)
御本尊(?)
ヒートシンク
保護ケース
なお、型番がどこにも明記されていないですが、おそらく付属のLCDタッチパネルは、下記のリンク先と同じものだろうと思います。
肝心の設定手順ですが、後述するように設定済みのOSイメージを使うか、ドライバを導入する必要があります。
ドライバの入手先としては、下記のサイトのようです。ハードウェアの製造元のサイトは特定できませんでした。
- 5 inch HDMI TFT LCD Touch Screen SKU:384212 - raspberry pi wiki
- www.spotpear.com/learn/EN/raspberry-pi/Raspberry-Pi-LCD/Drive-the-LCD.html
両ページとも"LCD-show-yyMMdd.tar.gz"という形式のファイルへのリンクがあります。この記事を書いている時点での最新のドライバ*3は”LCD-show-160811.tar.gz”、です。
ハードウェアのセットアップ
電源は抜いたままで作業します。
ヒートシンクの取り付け
ヒートシンクの裏面の白い剥離紙を剥がしてラズパイのLSIチップに貼り付けます。黒い面が粘着面。
ピンセットがあると作業しやすいかと思います。
位置を微調整して軽く数秒間押さえておけばOK。
LCDタッチパネルの接続
ラズパイ側のピンの本数と、タッチパネル側のコネクタの数があっていませんが、microSDスロット側に寄せて差し込むとちょうどHDMI端子の位置が重なります。
カチッと音がするまでHDMIコネクタを押し込む。
なお、付属のケースは干渉するので使えないようです。間のスペーサーを外せば良いのかも知れませんが……。
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
)。
- Raspbian2017-05以降のイメージはddコマンドで書き込む時に追加のオプションが必要 - あっきぃ日誌
- corrupted files on raspbian jessie 2017-07-05 - Raspberry Pi Forums
[追記ここまで]
"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が起動するはず。
パッケージのアップデート
まずはネットワークにに接続。
接続に成功したら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へのデータの書き込みにやたらと時間がかかります。
アップデートすると見た目が様変わりするので注意。
見た目の変化の理由は下記参照
新しいRaspbianセットアップして新デスクトップ「PIXEL」を試してみました - karaage. [からあげ]
ついでに不要なパッケージを削除しておきます。
$ sudo apt-get autoremove
B. Rapsbianに自分でドライバを入れる場合
得体の知れないOSイメージは不安な場合はこっち。
ダウンロードとmicroSDへの書き込み
Raspberry 本家から圧縮された状態のイメージファイルをダウンロードしてくる。タッチパネルがあるのでGUI付きの方(RASPBIAN JESSIE WITH PIXEL)。
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をラズパイ側に。
電源をオンにする。
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
が元に戻す時用のスクリプト。
リモートから接続している場合はコネクションが切れるので注意。
これで画面全体に表示されるようになり、かつタッチパネルが反応するようになる。
視野角はともかくとして、見た目がイマイチなのは保護フィルムをはがしていないため。
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」をクリックすると起動します。
Localization タブから以下を設定。
- Locale
- Timezone
- Keyboard
「OK」を押すと再起動するか確認してくるので"Yes"をクリックして再起動。
Linuxのインストール経験があれば見ればわかるような気もしますが、各項目は以下を参考に。
日本語入力(mozc)
変換エンジンとしてはほぼmozc
一択ですが、インターフェイスとしてはいくつか種類があります。
fcitx
、ibus
、uim
の三種が定番です。残念ながらuim
は開発が停止していたはずで、またここ最近のiBusは劣化しているのでfcitxの方が無難です。
$ sudo apt install fcitx-mozc
再起動するか、一旦ログアウトしてログインすると、日本語入力のオンオフが「Ctrl+Space」でできるはず。
画面右上にキーボードのアイコンが表示され、メインメニューの「設定」配下に「Fcitx設定」、「Mozcの設定」、「入力メソッド」のメニューが追加されるはず。
好みに応じて「Fcitx設定」、「Mozcの設定」を変更する。
[2016/10/11 追記]
上記の設定だけでは不十分というか不便です。インプットメソッドとして英語レイアウト用の設定が残ったままなので除去します。fcitx
をインストール済みの状態で、
- 画面右上のキーボードのアイコンを右クリックし、表示されるメニューから「現在の入力メソッドの設定」をクリック
- 設定用のウィンドウが表示されるので1行目に英語キーボード用の設定が存在しているのでクリックして選択
- ウィンドウ左下のマイナスボタンをクリックして削除
- 左下のプラス記号のアイコンをクリックしてキーボードのレイアウトを追加
- ポップアップが表示されるので、最初の「キーボード - 日本語」を選択
- OKをクリックしてポップアップを閉じる
- 「キーボード - 日本語」を選択した状態で、左下にある下向きの不等号をクリックして順序を変更
- 右上のバツ印をクリックして設定ウィンドウを閉じる。
設定前の状態
この画像の状態だとデフォルトが英語配列の状態なのでとても不便です。
英語配列のキーボードを削除した状態
日本語配列を追加する
優先順位を変更する順序を変更する
設定後
これで英語レイアウトの設定を除去できたので「半角/全角」キーで日本語入力をオン/オフできるはずです。
※ 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
ファームウェアのバージョンの確認方法はよくわからないvcgencmd version
で可能。
そのほか細かいオプションは以下を参照。
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
コマンドを使う必要はないみたいです。実行すると下記の画像のように、赤い十字のマーカーが表示されるのでスタイラスでタップ。
一箇所タップするごとに次のマーカーが表示されます。
タップせずに一定時間経過するか、キーを押すと中断します。
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……。
[2016/10/09 21:00 追記]
試しにタッチパネル側のmicroUSBポートにもケーブルをつないだところ、警告は出ませんでした。
また、ラズパイ側に電源を接続せずに、タッチパネル側のみに電源を接続しても起動はしますが、やはり警告は出ます。結局のところ電力面で万全を期すなら電源が2系統必要なようです。
[追記ここまで]
なお、電圧低下の警告表示ですが、以前は虹色の四角形だったらしいですが、いつの間にか仕様変更のようです。
- Raspberry Pi • View topic - Under-voltage warnings
- Raspberry Pi • View topic - Pi3 with a lightning bolt?
- Raspberry Pi • View topic - Spark appearing on screen
- On-screen warning icons are ambiguous · Issue #367 · raspberrypi/firmware · GitHub
ファームウェアを更新すると適用される模様。
気になった点など
- ダウンロードしたアーカイブにあるマニュアルが
.doc
形式… - LCDを接続した状態だと購入した商品付属のケースは微妙に干渉してしまうのが難点
- Raspberry Pi 3、無線LANの5GHz帯に対応してない
- 付属の電源ケーブル、スイッチを押し込むとONかと思いきや、押し込むとOFF……
- LCD用の電源ケーブルが添付されていてしかるべきでは?
感想
SheevaPlug に比べるとブートローダーとかファームウェアのバグが云々とか気にしなくていいのは最高。電源がUSB給電なのも故障対策としては悪くなさそう。
普通にキーボード、マウス、モニタをつなぐだけでLinuxデスクトップとしてそこそこ使える印象。
電源は別途発注するとして、次はwebカメラの接続かな。
いっそArch Linux で 64bit化、あるいはGentoo とか。
ずいぶんといろいろ遊べそうです。
無駄に長い記事になってしまったのであとで分割する、かも。
参考にしたURL
細かいのは省略。Qiitaはラズパイ関連記事多すぎ。Qiita は内容の被りっぷりがちょっとどうかと思うレベル。
人の記事に修正リクエスト送る人は少ないのかな。
[2018/03/24] 一部の誤字などを修正・情報追加