matuconとマイコン

ITガジェットが好物です

BerryBoot 環境でELECROWのタッチディスプレイを動かす

f:id:mazcon:20200814165704j:plain

はじめに

今回は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

ファンが一緒についていて、両面テープで取り付けるようです。

f:id:mazcon:20200814170648j:plain

ラズパイにケースがついてるとファンが干渉してしまうのでピンを延長しました。

f:id:mazcon:20200814170816j:plain

隙間が広くてちょっと不安定ですがとりあえずこれで頑張ります。。

f:id:mazcon:20200814171406j:plain

環境

リソース 内容
本体 Raspberry Pi 4 4GB RAM
OS RaspberryPi OS 64bit beta
MicroSD 8GB (ブート用)
SSD 480GB (メインストレージ)
ディスプレイ ELECROW 4inch HDMI 800x480 タッチパネル
Mac ssh 接続の操作用端末

RaspberryPi の状態

  • インターネットに接続可能
  • Mac からssh 接続可能
  • ミニディスプレイは接続状態
  • 電源on時はDesktopで自動ログインされる

以降の作業はssh 接続でroot ユーザで実施します。

なにもしない状態で起動するとX Window だけは表示されました。角度はあとで調整します。

f:id:mazcon:20200814171844j:plain

BerryBoot やttyなどほかの画面では青く点滅するだけの状態です。

f:id:mazcon:20200814171957g:plain

ドライバインストール

公式サイトの手順では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」のエラーは消えましたが、その他は変わらずです。

スクリプトを覗くと、ざっくり以下の内容をやっているようです。

  • 設定ファイルのバックアップ
  • 設定ファイル書き換えと配置
  • タッチパネル関連パッケージのインストール
  • OS リブート

スクリプトでは/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 リブートします。

f:id:mazcon:20200814173845j:plain

f:id:mazcon:20200814173906j:plain

f:id:mazcon:20200814171844j:plain

表示は問題なさそうです。次は画面を回転させます。

画面のローテート設定

X Window はスタートメニューから設定します。

スタートメニュー > 設定 > Screen Configuration

設定画面から回転角度を設定します。グリーンのチェックボタンを押すと反映されます。

Configure > Screens > HDMI-1 > 向き > left

f:id:mazcon:20200814175742p:plain

横向きにできました。

ctrl + alt + F1 でtty1に切り替えると、

f:id:mazcon:20200814175936p:plain

こっちは変わってくれないようです。。

調べたところ、cmdline.txtでフレームバッファーコンソールの角度が指定できるようなので以下を追記して再起動します。 (設定値は上記のdisplay_rotateと同じです。)

fbcon=rotate:3

f:id:mazcon:20200814180050p:plain

見事に横向きになりました。

もう一つ気になるのは、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

f:id:mazcon:20200814185224p:plain

コマンドを実行すると赤の十字を順次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

再起動するとタッチパネルが正常に動くようになりました。

最後に

調査に時間かかりましたが、なんとか使えるようになりました。ラズパイ専用画面があると大きいディスプレイは別用途で使えるので助かります。

フォトフレームにしたり、ダッシュボードとして利用するのも面白そうです。