いまさらRaspberryPiにSPI TFT
(※私の2020年10月11日WordPress投稿より転載)
遅れ馳せながらSPI TFT
Amazonで安かったので、遅ればせながらディスプレイモジュールを買ってみる。
安いとは言ってもかつての値段よりは上がっているみたい?
スペック:
・2.4インチSPI TFT LCDシリアルポートモジュール
・ブランド Hilitand
・ドライバ ILI9341(?)
SPIとは、SPI通信(Serial Peripheral Interface)のことで、マイコン-周辺チップ間で通信をするときのスタンダードなやり方。
ドライバに(?)と書いたのは販売店の表示に対して違うものが多数出回ったらしい情報があるから。
実際になんのチップが載っているのかはArduinoを使って判定するのがこの世界の一般的な方法らしい(GitHub)けど、RaspberryPiで確認できないものかねぇ。
ドライバ問題
Raspberry Piでつかうには、すでに用意されている(いた)ドライバを使うと超簡単に利用可能(だった)。
ドライバはFBTFT
modprobe で fbtft_deviceを指定するだけで普通のモニタみたいに使えちゃうんだから、そりゃ流行るわな。
ところがこのFBTFTは2015年をもって止まっている。なんでもgpioのコードが作り直されたため動かなくなったとか。
fbtft_device was removed because the gpio code had been reworked without fixing up fbtft_device so it didn’t work.
fbtft_deviceが削除されたのは、gpioのコードがfbtft_deviceを直さずに作り直されていて動かなかったからです。
それでも動かす方法については、
fbtft will now only work with Device Tree due to the above mentioned disruptive gpio rework.
fbtft は、上記の破壊的な gpio のリワークにより、デバイスツリーでのみ動作するようになりました。
デバイスツリーでは動作することができる、らしい。
でもどうやればいいの?
FBTFTを分からないままに調べる
FBTFT自体は存在しているみたい。
https://github.com/notro/fbtft/blob/master/dts/rpi.dts
このソースの195行目にili9341とあるので、なにか使えるのかも。
それでもなんとかTFT LCDを動かす
結線について
Raspbianのboot
/boot/config.txt にて
dtoverlay=rpi-display
(ファイルの一番後ろに追加)
/boot/cmdline.txt にて
fbcon=map:10 fbcon=font:VGA8x8
(行の末尾に追加する)
昔の記事でよく見るようなmodprobeはいらないみたい。
上記を設定するだけでlsmodでfbtftとfb_ili9341の文字列は現れる。
CUIであればこれだけで既に画面に起動ログが出る状態なので使えると思う。
GUIを画面に表示したい場合は、さらに次のコマンドをssh越しに実行する。
(ユーザーモードでカレントディレクトリに居るとして)
$ sudo mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf ~
$ sudo FRAMEBUFFER=/dev/fb1 startx
画面の回転設定とかいけるかもしれないけど、試していないので割愛。
上記のコマンドを自動実行させて、起動時にいつもTFT LCDに表示したいならば、/etc/rc.local のexit 0の前あたりに追加するとよいかと。(2021/4/5一部修正)
mv /usr/share/X11/xorg.conf.d/99-fbturbo.conf /root/
FRAMEBUFFER=/dev/fb1 startx
exit 0
デスクトップを見やすくする設定
とにかくモニタが小さいので、「小さな画面向け設定」を行うと上記写真のようになる。
・ラズベリマーク(スタートメニュー?)を開く
・「設定」→「外観の設定」を開く
・「デフォルト」タブを開いて、「小さな画面向け」の右にある「デフォルト設定にする」を押してしばらく待つ