Raspberry Pi2 + Volumioに3.5インチ液晶をつないでみた
【スポンサーリンク】
前回の続きでRaspberry Pi2 とラズパイ・オーディオのOSに3.5インチ液晶をつけてみた
yukimi0721.hatenablog.com
液晶いろいろあるよ
ラズパイには色々液晶があるが接続方式としてDSI、HDMI、SPIがある
DSIは純正の7インチ液晶とかがDSI接続です。
純正はよさげなケースもあるが一万円と高いので却下。
SPIは表示がもっさりだし設定めんどくさそうなので却下 。
HDMIであればケーブルつなげるだけで表示されそうなので楽そう。
といういことでAmazonで3250円のKuman(クマン?)の液晶を買ってみたが、思いのほか苦労したので何をしたか色々書いておきます。
www.kumantech.com
今回買ったやつ
Kuman 3.5インチ HDMI ディスプレイ タッチスクリーン LCDモニター SC6AC
純正はお高い
GPIOを分岐してるやつを見つけてしまったこれ買えばよかった
開封と接続
今回はケース付を買ってみた
2枚のアクリルで本体をサンドイッチする構造とシンプルだが無いよりはマシである。
そもそも液晶とラズパイが一体になるケースって種類が少ない。
液晶も付けれてI2SのDACが付けれるような大きめのケース作れば売れるのではと思う。
液晶にはKumanと書いてある。どこかのメーカ液晶のパクリなのだろうか
インストールマニュアルにMPI3508の文字があるのでそれと同じなのだろうか
接続はラズパイのボードに挿してHDMIの小さいコの字コネクタで接続するだけで完了
液晶にはボタンがひとつだけあって、押すと画面の明るさが変わる。
長押しで消灯。
なおHDMIがノーシグナルのとき放置すると消灯するような機能はないようだ。
これがあればもっとよかったのだが。
電源投入すると画面が表示されたがこのままでは解像度が大きすぎる。
またタッチパネルをタッチしてもカーソルの位置がおかしい。
具体的には大文字アルファベットの箇所をタッチすると小文字の場所にカーソルが移動します
⎡ C B A ⎤ ⎡ g d a ⎤ ⎜ F E D ⎥ ⎜ h e b ⎥ ⎣ I H G ⎦ ⎣ i f c ⎦
設定
解像度の変更
/boot/config.txt の設定ファイルに追記
なおBOOTエリアはFATなのでSDをカードリーダーで読んでWindows上からでも編集できる
sudo nano /boot/config.txt
下記をまるごと追記して選択したい解像度の#hdmi_cvtのコメントを外す
下記は810x540になってる
# Uncomment some or all of these to enable the optional hardware interfaces dtparam=spi=on enable_uart=1 hdmi_drive=2 hdmi_force_hotplug=1 hdmi_group=2 hdmi_mode=87 # HDMI Setting #hdmi_cvt 480 320 60 6 0 0 0 #480x320 #hdmi_cvt 600 400 60 6 0 0 0 #600x400 #hdmi_cvt 720 480 60 6 0 0 0 #720x480 hdmi_cvt 810 540 60 6 0 0 0 #810x540 #hdmi_cvt 960 640 60 6 0 0 0 #960x640 # Touch Panel Setting 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
タッチパネル座標補正
補正するには結果としては40-libinput.confに
TransformationMatrix形式で記入すると正しく表示された。
sudo nano /usr/share/X11/xorg.conf.d/40-libinput.conf
下記の2行をSection内に追加(libinput touchscreen catchall)
#SwapX,Y and inverting X,Y
Option "TransformationMatrix" "0 -1 1 -1 0 1 0 0 1"
追加後の内容
# Match on all types of devices but tablet devices and joysticks Section "InputClass" Identifier "libinput pointer catchall" MatchIsPointer "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput keyboard catchall" MatchIsKeyboard "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput touchpad catchall" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput touchscreen catchall" MatchIsTouchscreen "on" MatchDevicePath "/dev/input/event*" Driver "libinput" #SwapX,Y and inverting X,Y Option "TransformationMatrix" "0 -1 1 -1 0 1 0 0 1" EndSection
なおここまで来るのに色々苦労したので失敗した方法もメモとして残しておく
失敗したこと色々
ドライバのインストール
MPI3508でぐぐってドライバインストール方法を探す
下記のコマンドを入れて再起動するとカーネルパニックで死んだ
sudo rm -rf LCD-show git clone https://github.com/goodtft/LCD-show.git chmod -R 755 LCD-show cd LCD-show/ sudo ./MPI3508_720_480-show
失敗した原因はどうもVolumioはパスが違うらしくファイルの無い場所を読みに行く設定に書き換えられてしまうようだ。
そもそもタッチパネル自体は認識されてるからきっとドライバは入れなくていいのである。
ということでLCD-showの中身を見て手動でコンフィグを書換えることにした。
キャリブレーション
キャリブレーションツールがあるのでそれを使えばいいだろうと思ってやってみるがキャリブレーションツールが起動しない
sudo apt-get install xinput-calibrator xinput_calibrator
99-calibiration.confを作って書けばよいらしくとりあえず
sudo nano /usr/share/X11/xorg.conf.d/99-calibiration.conf
の中に下記を書いたが変わらず
Section "InputClass" Identifier "calibration" MatchProduct "ADS7846 Touchscreen" Option "Calibration" "3945 233 3939 183" Option "SwapAxes" "1" EndSection
xのログを見ると設定ファイルは読み込まれているようだが無視されてのだろうか。
cat /var/log/Xorg.0.log [ 33.255] (**) ADS7846 Touchscreen: Applying InputClass "calibration" [ 33.255] (II) No input driver specified, ignoring this device. [ 33.255] (II) This device may have been added with another device file.
ということで他に設定方法がないか探す
40-libinput.confを変更してみる
40-libinput.confのファイルにTransformationMatrix形式で指定する方法を見つける。
TransformationMatrixtとは…
Transformation matrix - Wikipedia
なるほど、さっぱりわからん。
#in case of swapping x and y Option "TransformationMatrix" "0 1 0 1 0 0 0 0 1"
とりあえず上のように書いてみたら今までとカーソルが違う挙動をしたのでここのパラメータをいじればいいことがわかった。
XY入替を指定するとXYが入れ替わるが両方とも逆方向にカーソルが動く。
⎡ C B A ⎤ ⎡ g h i ⎤ ⎜ F E D ⎥ ⎜ d e f ⎥ ⎣ I H G ⎦ ⎣ a b c ⎦
XY入替プラスX反転Y反転すればよさそうだがパラメータの指定がよくわからん。
waveshare-dtoverlays/README.md at master · swkim01/waveshare-dtoverlays · GitHub
とりあえずTransformationMatrixの意味はわからんが反転は1文字目か2文字目の1をマイナスにして3文字目を1にすればいいのかなと感で直したら当たりだった
XY入れ替え Option "TransformationMatrix" "0 1 0 1 0 0 0 0 1" ⎡ 0 1 0 ⎤ ⎜ 1 0 0 ⎥ ⎣ 0 0 1 ⎦ XY入れ替え+X反転+Y反転 Option "TransformationMatrix" "0 -1 1 -1 0 1 0 0 1" ⎡ 0 -1 1 ⎤ ⎜-1 0 1 ⎥ ⎣ 0 0 1 ⎦
やったこれで液晶を買ってから3日間の長い戦いは終わった。
ということで今日は推しメンのハロウィンライブがあるので、
渋谷に出かけてライブを見てチェキを撮って帰った。
めでたしめでたし。