あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

240px四方の1.3インチLCDにコンソールとかデスクトップとかを映す!

Raspberry Pi Advent Calendar 2020の22日目です。19日目はまめもさんの自作ファンコントローラー、20日目はつぼさんのネットワーク遅延装置づくり、21日目はgyaboさんでPi 4のベアメタル環境で V3Dレジスタにアクセスするまでのお話でした。

adventar.org

今日からはまた私のターン!今日は18日に1.3インチLCDでfbtftができるできないを追記でごっちゃにしたので整理していきます。

できました

まず、18日目の記事ではfbtftがカーネル5.xに上がったと同時に動いてたものが動かなくなったりなんだりしていて情報が錯綜していると書きましたが、なんとか1.3インチLCD(ST7789v)でも動作させられるようになりました。表示させられるようになって満足した!

やりかた

基本的にはPimoroniのフォーラムで書かれている方の手順でOKです。

forums.pimoroni.com

以下から最新のdtsをダウンロードします(フォーラムでは直接Rawのリンクになってますが、元のページ見れたほうがいい場合もあるよね)。

device tree overlay to use pidi with fbtft driver for rpi 2 B · GitHub

$ wget https://gist.githubusercontent.com/hgroll/2731ae6d05350df663b123615f765bf5/raw/f8fe3829136296c20ba670dcd572e8a5c60da995/pidi-overlay.dts

dtsをダウンロードしたらエディターで開いて、regの行を0から1に書き換えます。regは何かというと、Chip Selectの値が当てはまるらしく、CE0(BCM8)なら0、CE1(BCM7)なら1となるようです。Pimoroniの1.3インチLCDは、Breakout Garden向けモジュールも、PirateAudioもCE1が使われていたため、regが0では動作しなかったというわけでした。

(参考) Raspberry Pi - SPI device tree changes - Stack Overflow

reg = <0>;
↓
reg = <1>;

また、バックライトの設定がなぜか反対?になっていて消灯してしまっていたので、1から0に書き換えてみたところ点灯しました。13の値はPirateAudioの場合のバックライトLED用ピン番号で、ブレイクアウトのときは19になります。もしかするとconfig.txtの方で上書きできるかもしれないですが、やり方は不明なので必要に応じてここを書き換えてしまうのも手です。

led-gpios = <&gpio 13 1>;
↓
led-gpios = <&gpio 13 0>;

書き換えたらdtcコマンドでdtsをコンパイルします。

$ sudo dtc -@ -I dts -O dtb -o /boot/overlays/pidi.dtbo pidi-overlay.dts

/boot/config.txtにpidiを読み込む設定を追記します。

dtoverlay=pidi

/boot/cmdline.txtにコンソール向け設定を追記します。rootwaitのあとにスペースを入れてから続けて追記します。

 fbcon=map:10 fbcon=font:VGA8x16

コンソールセットアップで、コンソールの文字サイズの設定を変更します。

$ sudo dpkg-reconfigure console-setup

以下の通り選択する
コンソールで使うエンコーディング: UTF-8
コンソールフォントとしてサポートすべき文字セット: 最適な文字セットを指定してください
コンソールのフォント: システムに適当なフォントを選ばせる
フォントのサイズ: 8x16

あとはSPIの有効化も忘れずにやります。

$ sudo raspi-config nonint do_spi 0

ここまでできたら再起動して、1.3インチLCDにコンソールが出ることを確認します。

f:id:Akkiesoft:20201221174338j:plain

GUIも出したいときは

小さくてあまり使い物になりませんがfbcpを使えばGUIも出ます。

github.com

インストールは略しますが、手順通り設定すればデスクトップが映るようになります。ただ、解像度の設定次第では何がなんだかわからない感じになるので、VGAくらいに設定しておくと良いかもしれません。

f:id:Akkiesoft:20201221174328j:plain

また、Pimoroniのフォーラムやdtsファイルのコメントにも書かれているとおり、結構ちらつきが激しいです。dtsのinitパラメーターをいじっらた改善できるんかしら?

まとめ

Pimoroni製品についてる1.3インチ240x240LCDを最近(Linux Kernel 5.4くらい)のRaspberry Piでfbtftとして使う手順でした。

映るには映ったんですが、まあ文字が小さくて読み安くはないので、IPアドレスを読み取るとか、CM4でカーネルクラッシュしたときの表示を軽く拾う(拾えるのか?)とか、そんくらいの用途になりそうです。

2021/1/13追記

2021年初めから流行ってて私も入手していたマジョカアイリス方面から参照されていてチビッた。私も後でそちらを参考にさせてほしいですー(超絶他力本願寺)。あと、fbcpの代わりにX11に設定書いちゃうのもいけます。こっちのが多少は早いはず。

$ sudo vi /etc/X11/xorg.conf.d/99-fbdev.conf

Section "Device"  
  Identifier "myfb"
  Driver "fbdev"
  Option "fbdev" "/dev/fb1"
EndSection

qiita.com