BerryBoot 環境でELECROWのタッチディスプレイを動かす
はじめに
今回はBerryBoot で起動したOSでミニディスプレイを動かしてみます。
タッチパネル付きなのでダッシュボード表示させてをタッチ操作できると便利そうだなーと思いAmazonでポチりました。
普通にインストールしたOSでは動くもののBerryBoot上ではてこずってしまったので、動かすまでの記録を残しておきます。
ディスプレイ
設定するディスプレイは以下のものです。
https://www.amazon.co.jp/Raspberry-%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC-%E3%82%BF%E3%83%83%E3%83%81%E3%83%91%E3%83%8D%E3%83%AB%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC-%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%96%E3%83%AB%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC-%E5%AE%89%E5%BF%83%E4%BF%9D%E8%A8%BC%EF%BC%91%E5%B9%B4%E4%BB%98%E3%81%8D/dp/B0895F173Ywww.amazon.co.jp
ファンが一緒についていて、両面テープで取り付けるようです。
ラズパイにケースがついてるとファンが干渉してしまうのでピンを延長しました。
隙間が広くてちょっと不安定ですがとりあえずこれで頑張ります。。
環境
リソース | 内容 |
---|---|
本体 | Raspberry Pi 4 4GB RAM |
OS | RaspberryPi OS 64bit beta |
MicroSD | 8GB (ブート用) |
SSD | 480GB (メインストレージ) |
ディスプレイ | ELECROW 4inch HDMI 800x480 タッチパネル |
Mac | ssh 接続の操作用端末 |
RaspberryPi の状態
以降の作業はssh 接続でroot ユーザで実施します。
なにもしない状態で起動するとX Window だけは表示されました。角度はあとで調整します。
BerryBoot やttyなどほかの画面では青く点滅するだけの状態です。
ドライバインストール
公式サイトの手順ではgitからインストール用リソースを落としてスクリプトを実行するだけで設定完了です。
http://www.lcdwiki.com/4inch_HDMI_Display-C
残念ながら最新のBerryBoot 環境で実行するとスクリプトエラーになってしまいます。
# ./MPI4008-show grep: /boot/cmdline.txt: そのようなファイルやディレクトリはありません cp: '/boot/cmdline.txt' を stat できません: そのようなファイルやディレクトリはありません grep: /boot/cmdline.txt: そのようなファイルやディレクトリはありません 2020 need to update touch configuration 以前に未選択のパッケージ xserver-xorg-input-evdev:armhf を選択しています。 (データベースを読み込んでいます ... 現在 92993 個のファイルとディレクトリがインストールされています。) .../xserver-xorg-input-evdev_1%3a2.10.6-1+b1_armhf.deb を展開する準備をしています ... xserver-xorg-input-evdev:armhf (1:2.10.6-1+b1) を展開しています... man-db (2.8.5-2) のトリガを処理しています ... dpkg: 依存関係の問題により xserver-xorg-input-evdev:armhf の設定ができません: xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: libevdev2 (>= 1.2.2+dfsg-1~). xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: libmtdev1 (>= 1.1.0). xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: libudev1 (>= 183). xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: xorg-input-abi-24. xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: xserver-xorg-core (>= 2:1.18.99.901). dpkg: パッケージ xserver-xorg-input-evdev:armhf の処理中にエラーが発生しました (--install): 依存関係の問題 - 設定を見送ります 処理中にエラーが発生しました: xserver-xorg-input-evdev:armhf reboot now
最後のリブートは勝手に実行されてしまうので、コメントアウトして実行しました。 「cmdline.txt」がなぜか見つからないようなので、手動で作って再実行してみます。
# touch /boot/cmdline.txt # ./MPI4008-show (データベースを読み込んでいます ... 現在 93003 個のファイルとディレクトリがインストールされています。) xserver-xorg-input-evdev:armhf (1:2.10.6-1+b1) を削除しています ... man-db (2.8.5-2) のトリガを処理しています ... 2020 need to update touch configuration 以前に未選択のパッケージ xserver-xorg-input-evdev:armhf を選択しています。 (データベースを読み込んでいます ... 現在 92993 個のファイルとディレクトリがインストールされています。) .../xserver-xorg-input-evdev_1%3a2.10.6-1+b1_armhf.deb を展開する準備をしています ... xserver-xorg-input-evdev:armhf (1:2.10.6-1+b1) を展開しています... man-db (2.8.5-2) のトリガを処理しています ... dpkg: 依存関係の問題により xserver-xorg-input-evdev:armhf の設定ができません: xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: libevdev2 (>= 1.2.2+dfsg-1~). xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: libmtdev1 (>= 1.1.0). xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: libudev1 (>= 183). xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: xorg-input-abi-24. xserver-xorg-input-evdev:armhf は以下に依存 (depends) します: xserver-xorg-core (>= 2:1.18.99.901). dpkg: パッケージ xserver-xorg-input-evdev:armhf の処理中にエラーが発生しました (--install): 依存関係の問題 - 設定を見送ります 処理中にエラーが発生しました: xserver-xorg-input-evdev:armhf reboot now
「cmdline.txt」のエラーは消えましたが、その他は変わらずです。
スクリプトを覗くと、ざっくり以下の内容をやっているようです。
スクリプトでは/boot/cmdline.txt を修正しているようですが、初期状態ではこのファイルが存在しませんでした。
ファイルを探してみると
# find / -name cmdline.txt ... /media/matucon/SDCARD/cmdline.txt /usr/local/src/LCD-show/usr/cmdline.txt ...
/boot のマウントのされ方が変わっている?ようでSDカードとして認識されてるようです。 (BerryBootの1個前のバージョンでは/boot 内にあったような気がします)
というわけで、「/media/{ユーザ名}/SDCARD/」内のcmdline.txt, config.txt を修正します。その前にこの2ファイルをMacにバックアップしておきます。SD直下に入ってるファイルなのでMacに挿してコピーしておきます。
以下の設定はタイポなどミスがあるとブートしなくなる可能性があります。壊れたらバックアップからすぐに復元します。
config.txt の修正内容
ファイルの末尾に以下を追記します。インストールスクリプトの内容をほぼコピペしたものです。 内容の詳細はRaspberryPi公式サイトに載っていました。
Video options in config.txt - Raspberry Pi Documentation
[EDID=ADA-MPI4008] hdmi_force_hotplug=1 hdmi_force_edid_audio=1 dtparam=i2c_arm=on dtparam=spi=on enable_uart=1 display_rotate=3 max_usb_current=1 config_hdmi_boost=7 hdmi_group=2 hdmi_mode=87 hdmi_drive=2 hdmi_cvt=480 800 60 6 dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900
一番最後の行が切れてしまってますが、内容は「dtoverlay=ads7846,cs=1,penirq=25,penirq_pull=2,speed=50000,keep_vref_on=0,swapxy=0,pmax=255,xohms=150,xmin=200,xmax=3900,ymin=200,ymax=3900」です。
一番上の行はスクリプトに存在しない内容ですが「EDID=」で設定を反映するディスプレイを指定できるようです。EDIDは以下のコマンドで確認できます。
# tvservice -n
「display_rotate」はdepricated になってるようで、項目名が変わったようですが一旦このままにしておきます。 設定値は以下ですが、この設定では画面の回転はできませんでした。
- 0:回転なし
- 1:右へ90度
- 2:右へ180度
- 3:右へ270度
cmdline.txt の修正内容
これもインストールスクリプトを参考にしたものです。スペース区切りで1行で記述する必要があるようです。
修正前
elevator=deadline quiet bootmenutimeout=10 datadev=UUID=XXXXXXXXXXXXX qmap=jp
修正後
idwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo elevator=deadline quiet bootmenutimeout=10 datadev=UUID=XXXXXXXXXXXXX qmap=jp
UUIDはマスクしましたが、BerryBootが参照してるストレージのUUIDが設定されています。
スクリプトでは以下も設定されましたが、ブート関連の内容なので削除しました。
root=/dev/mmcblk0p2 rootfstype=ext4
ここまで設定したらOS リブートします。
表示は問題なさそうです。次は画面を回転させます。
画面のローテート設定
X Window はスタートメニューから設定します。
スタートメニュー > 設定 > Screen Configuration
設定画面から回転角度を設定します。グリーンのチェックボタンを押すと反映されます。
Configure > Screens > HDMI-1 > 向き > left
横向きにできました。
ctrl + alt + F1 でtty1に切り替えると、
こっちは変わってくれないようです。。
調べたところ、cmdline.txtでフレームバッファーコンソールの角度が指定できるようなので以下を追記して再起動します。 (設定値は上記のdisplay_rotateと同じです。)
fbcon=rotate:3
見事に横向きになりました。
もう一つ気になるのは、BerryBoot のメニュー画面ですが、これはどうしても回転させらませんでした。全く操作できないわけじゃないのとブートの一瞬だけなのでいったんこれでよしとします。
タッチパネルの設定
上記のブート関連の設定でタッチパネルは動くようになりましたが、画面を回転させた影響か動きがずれてしまってます。上から下に動かすと、カーソルは左に動いてしまいます。 タッチパネルも画面に合わせて回転させる必要があるようなので設定していきます。
キャリブレーション用のパッケージをインストールします。以下はsshではなくRaspberryPi側で直接操作します。
# apt install xinput-calibrator パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。 以下のパッケージには満たせない依存関係があります: xserver-xorg-input-evdev:armhf : 依存: libevdev2:armhf (>= 1.2.2+dfsg-1~) しかし、インストールされようとしていません 依存: libmtdev1:armhf (>= 1.1.0) しかし、インストールされようとしていません 依存: libudev1:armhf (>= 183) しかし、インストールされようとしていません 依存: xorg-input-abi-24:armhf 依存: xserver-xorg-core:armhf (>= 2:1.18.99.901) しかし、インストールされようとしていません E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。
エラーです。。解決コマンドが載ってたので試してみます。
# apt --fix-broken install # apt install xinput-calibrator
エラーが出なければ、公式インストーラーでこけていたパッケージも入れておきます。
# apt xserver-xorg-input-evdev # apt remove xserver-xorg-input-libinput
不要かもしれませんが一応リブートしてからキャリブレーションを試してみます
$ sudo xinput_calibrator Calibrating EVDEV driver for "ADS7846 Touchscreen" id=9 current calibration values (from XInput): min_x=84, max_x=4019 and min_y=122, max_y=3961 Doing dynamic recalibration: Setting calibration data: 32, 4046, 184, 3815 --> 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" "32 4046 184 3815" Option "SwapAxes" "0" EndSection
コマンドを実行すると赤の十字を順次4箇所タップすると設定値が表示されるので、この内容を指定されたファイルに書き込みます。 2ファイル表示されていますが「/etc/X11/xorg.conf.d/99-calibration.conf」にファイルができてたので、こっちの内容を修正します。存在しなければ新規作成します。
Section "InputClass" Identifier "calibration" MatchProduct "ADS7846 Touchscreen" Option "Calibration" "32 4046 184 3815" Option "SwapAxes" "0" Option "TransformationMatrix" "0 -1 1 1 0 0 0 0 1" EndSection
「TransformationMatrix」は画面を回転させた場合にタッチパネルの座標も回転させる設定です。
右回転角 | 設定値 |
---|---|
90 | 0 1 0 -1 0 1 0 0 1 |
180 | -1 0 1 0 -1 1 0 0 1 |
270 | 0 -1 1 1 0 0 0 0 1 |
再起動するとタッチパネルが正常に動くようになりました。
最後に
調査に時間かかりましたが、なんとか使えるようになりました。ラズパイ専用画面があると大きいディスプレイは別用途で使えるので助かります。
フォトフレームにしたり、ダッシュボードとして利用するのも面白そうです。