Raspi用表示装置4種を試す -2.1-

OSOYOO HDMI 3.5インチLCDディスプレイ モニター タッチスクリーン Raspberry Pi3 2 Model B に対応 (3.5" HDMI LCD)
https://www.amazon.co.jp/dp/B077PTBB8N/ ¥3,680

 以前からRaspiでよく使われている3.5インチの液晶モジュールだ。ほぼ、Raspiと同じサイズであるのでおさまりもいい。ケースは必要なかったのだが、今回は付いたものしか売っていなかった。
 OSOYOというか、KeDeiのLCDにはロットがいくつかあるようで、基板に書かれたバージョン情報を確認しておく必要がある。
 I2Cでの画像入力ができるが、バイナリで供給されるデバイスドライバがkernel依存になっているので、動作しない条件もあると聞いていた。HDMI出力も付いているので、今回はそちらを使うことを想定している。専用のU型のHDMIコネクタが付いているので、Raspiに装着時はケーブル接続が必要なく、場所を取らない工夫がされている。

 Raspi3に、ちょうど上に乗るようにピンを差し込んで液晶をセットする。付属のHDMI用U字型のコネクタを使って、LCDとRaspiを接続する。ピンとコネクタで、パネルは固定される。HDMIコネクタを使わない場合は、NICやUSBコネクタの上に数ミリの隙間ができるので、厚手の両面テープなどをはさんで固定したほうがよさそうだ。
 電源を入れると、青地に白文字でkedeiと表示され、暗転後に左上に四角い枠に囲まれたHDMI表示がしばらく出た。Raspbianの起動画面が表示される。普段使っているのは、GUIのないRaspbian Liteであるので、起動画面しか表示されない。解像度の問題もあって、HDMIとして認識されると拡大してもコンソールの文字は読めない。

 メーカーのWebサイトでは、ドライバインストール済みのイメージファイルが配布されている。

Osoyoo 3.5インチディスプレイfor Raspberry Piのインストール方法 « osoyoo.com http://osoyoo.com/ja/2016/05/26/osoyoo-lcd-touch-screen-for-raspberry-pi-installation-guide/

3.5インチLCD - Google ドライブ https://drive.google.com/drive/folders/1PP_jwPz2s5WfnCRTAvWt0RBmE4HuU88p

 Ubuntu-MATE 16.04.2、Raspbian Stretch、kedei KALI OSの起動イメージがダウンロードできる。しかし、どれも使うには古すぎる。

 お仕着せの環境でないところに入れるためのドライバも提供されているようだ。

Raspberry Pi(Raspbian Stretchを装着)で3.5” タッチスクリーンのドライバーをインストールする « osoyoo.com https://osoyoo.com/ja/2016/09/13/install-raspberry-pi-3-5-touch-screen-driver-for-raspbian-jessie/

 このページ内にリンクがある以下のURIでは、情報のみが表示されて、ダウンロードができなかった。以下で"LCD_show_v6_1_3.tar.gz"がダウンロードができる。

https://drive.google.com/file/d/1zJjej8B-Z9pYMZk4jPr3hEEnodFYCvZ4/edit

 ダウンロード時にウイルススキャンができない警告が出るが、ダウンロードボタンで続行する。

 ダウンロードしたアーカイブを展開すると、こんな構成になっていた。

 hdmiやlcd_35vのディレクトリには、各Raspiに対応したdevfs用のdtbファイル、cmdline.txt、config.txt、kernelイメージなどが入っている。LCDなにがしというバイナリファイルは、それらを切り替えるバイナリコマンドになっているのだろう。これらがshell scriptなら読んで見る価値がありそうだけど、バイナリでは内容を追うのはめんどくさい。特に隠蔽する必要はないと思うのだが、バイナリで隠蔽している感じがするのも嫌だ。
 おそらく、バイナリコマンドは、Raspiの機種判定をして、dtbファイルとkernelの差し替え、cmdline.txtとconfig.txtの上書き、再起動などの処理を順次やっているのだろう。  LCD35_vを実行するとSPI表示モードに、LCD_hdmiを実行するとHDMIモードになるようだ。つまり、表示は、HDMIかSPIかの二択になってしまう。モードの切り替えは再起動が必要になる。タッチのキャリブレーションの方法は書かれていない。
 コンディションのよくわからないkernelに勝手に差し替えられるのは、ちょっと許容できない。Raspbianの標準kernelと異なるバージョンのkernelに差し替えられるのもおもしろくない。
 さらに、サイトには書かれていないがRaspbianのデフォルトではSPIが有効になっていないので、SPIで使用するにはraspi-configでSPIを有効に設定してやる必要がある。
 というわけで、ちょっとこれを使うのは抵抗がある。

 ユニットの供給元であると思われるKeDeiのサイトでも、ドライバが配布されている。こちらのドライバのほうが新しいようだ。

KeDei LCD
http://kedei.net/raspberry/raspberry.html

 ここから、LCD_driver.zipをダウンロードしてみると、rpi-fbcpのソースコードが入っている。READMEを読むと、仕組み的にはデフォルトのフレームバッファをLCDのフレームバッファにコピーして表示するようなドライバ実装になっているそうだ。なるほど、切り替えで二択になってしまうわけだ。その他は、OSOYOで供給されているものと同じバイナリものになる。これも使えない。

 少し調べてみると、SPI接続するLCDディスプレイについて、リポジトリを提供しているプロジェクトがあった。メンテナンスされているプロジェクトのようだ。使わない部分も多いが、簡単にセットアップするには、これを使うのがよさそう。ただ、こちらも実装は同じで、切り替えの二択になることに変わりはない。

goodtft/LCD-show: 2.4" 2.8"3.2" 3.5" 5.0" 7.0" TFT LCD driver for the Raspberry PI 3B+/A/A+/B/B+/PI2/ PI3/ZERO/ZERO W
https://github.com/goodtft/LCD-show

$ git clone https://github.com/goodtft/LCD-show.git
$ chmod -R 755 LCD-show
$ cd LCD-show /
$ sudo ./LCD35-show

戻す

$ chmod -R 755 LCD-show
$ cd LCD-show /
$ sudo ./LCD-hdmi

 基本的にはX11環境で切り替えることを想定しているようだ。タッチパネルの対応はなさそうな感じ。
 希望としては、コストの高いX11を使うのではなく、フレームバッファへの画像の流し込みとタッチの受け取りができればいいのだけど、SPI接続でそれを行うのは、ちょっと時間をかけて調べないといけなさそうだった。
 また、SPIはデータ転送が遅いので、表示をHDMIにして、タッチパネルだけを使う方法を取るのがベストなのだけど、そのような方法も提供されていない。なによりソースがないのが嫌だ。

 探してみると、他にもSPI接続のTFT LCDをターゲットにした、こんなプロジェクトも見つかった。すでにkernelに取り込み済みで、ここのソースツリーはメンテナンスされていないようだ。

notro/fbtft: Linux Framebuffer drivers for small TFT LCD display modules
https://github.com/notro/fbtft

 対応するLCDはソースコードを見るしかないようだ。オリジナルのほうには、3.5インチはないっぽい。

https://github.com/notro/fbtft/blob/master/fbtft_device.c

 Linux kernelに取り込まれたものはこちら。だいぶ構成が変わっている。

linux/drivers/staging/fbtft at master · torvalds/linux
https://github.com/torvalds/linux/tree/master/drivers/staging/fbtft

 これを使うと、フレームバッファデバイスとして見えるようなので、/dev/fb0などに直接データを書き込むことができるかもしれない。

 こんなプロジェクトもある。こちらはいくつかの3.5インチLCDにも対応しているようだ。

juj/fbcp-ili9341: A blazing fast display driver for SPI-based LCD displays for Raspberry Pi A, B, 2, 3 and Zero
https://github.com/juj/fbcp-ili9341

 forkしたプロジェクトもあった。

kpishere/fbcp-ili9341: A blazing fast display driver for SPI-based LCD displays for Raspberry Pi A, B, 2, 3 and Zero
https://github.com/kpishere/fbcp-ili9341

つづく


オリジナル投稿: Raspi用表示装置4種を試す -2.1-|kinneko|pixivFANBOX
https://www.fanbox.cc/@kinneko/posts/653995