
【Raspberry Pi zero 2w】fbcpが使えないOSで小型LCDを使う
また寒波が来ているようですが、ほとんど家にいる毎日です。
気づいたら朝方まで機械いじりをしていました。
昼ごろには展示の搬入の荷出しがありますが、起きていられるでしょうか。。
新しい機種では古いOSが使えない
さて、今回は久しぶりにRaspberry Piの手持ちがなくなったので注文しようとしたところ、Raspberry Pi Zeroが在庫なし、Rasberry Pi Zero2 は在庫があるとのこと。これからどんどん旧機種が手に入りにくくなるのでしょうか。
なんとかなるだろうと甘く考え、 Zero 2を購入しました。
作業を始めてから気が付いた
考えてみれば当たり前かもしれないのですが、Zero2には古いOSが入れられませんでした。
fbcpやらomxplayerやらを使いたい関係でいつもRaspberry Piには2020年ごろのOSを入れています。
嫌な予感がしながらも、仕方なく最新のOSを入れました。
1.44inch のディスプレイを繋ぐ
前回と違い、今回は特にWikiとかもない1.44インチのディスプレイ。
裏を見るとドライバーがST7735Sと書いてあります。
解像度は128×128pxとありますね。
見た感じは違えど、使われている液晶パネル、ドライバーと解像度が一緒なので、これはピンの差し方さえ間違えなければ前回のWikiが流用できます。
ピン配置
一応参考までに、ピンは
GND…25番 VCC…17番 SCL…23番 SDA…19番
RES…18番 DC…22番 CS…24番 BLK…12番
https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#gpio
GNDとVCCはそれぞれGround,3V3 Powerとなっているところであればどこでもいいと思いますが、今回はピンの位置をなるべく固めたかったのでこのようにしています。
さて、古いOSであればこのままWiki通り進めばいいのですが、何も考えずwiki通り進めたところfbcpのところで躓きました。エラ〜〜
調べてみたけどやっぱり新しいOSではfbcpは使えないみたいですね。
と言うことで代替手段がないか調べることに。
fbcpに代わる手段…ありました!
ありました!こちらを参考に進めていきます。
まずconfig.txtの場所が古いOSと違って戸惑いました。
sudo nano /boot/firmware/config.txt
config.txtに入ったら、一番下の行に以下のように追記します。
dtoverlay=mipi-dbi-spi,spi0-0,speed=70000000
dtparam=width=128,height=128
dtparam=reset-gpio=24,dc-gpio=25
dtparam=backlight-gpio=18
パラメータはサイトを参考にしながら1.44インチモニタ用に調整しています。
dtparam=~の部分ですがピンを挿したところの番号を書きます。
reset-gpioはRESのピンを挿したところ。dc-gpioはDCのピン、backlight-gpioはBLKです。
今度は通し番号じゃなくてさっきの表を見ながら、GPIO24とかの名前についている数字を入れてください。
1.44インチモニタでなくても色々と応用が効くと思います。
ctrl+xで保存して出ます。
git clone https://github.com/notro/panel-mipi-dbi.git
cd panel-mipi-dbi
nano ili9341.txt
参考サイトにはさらっと書いてありますが、普段wiki通り進めるのがやっとなので解読に時間がかかってしまいました。gitのダウンロードは git cloneというコマンドを使うようです。
次にテキストファイルを作ります。参考サイトに倣ってili9341.txtとしましたが、テキストファイルの名前はなんでも良さそうです。
中身は最終的にこのように書きました。
# Adafruit ILI9341 PiTFT TFT LCD Screen
# width=320,height=240
command 0x01 # Software reset
delay 128
command 0xEF 0x03 0x80 0x02
command 0xCF 0x00 0xC1 0x30
command 0xED 0x64 0x03 0x12 0x81
command 0xE8 0x85 0x00 0x78
command 0xCB 0x39 0x2C 0x00 0x34 0x02
command 0xF7 0x20
command 0xEA 0x00 0x00
command 0xc0 0x23 # Power control VRH[5:0]
command 0xc1 0x10 # Power control SAP[2:0];BT[3:0]
command 0xc5 0x3e 0x28 # VCM control
command 0xc7 0x86 # VCM control2
# Command 36h sets the read order from frame memory to the display panel
# Remember to swap width/height on 0/180 rotations
#command 0x36 0x40 # rotation 0
#command 0x36 0xE8 # rotation 90
#command 0x36 0x48 # rotation 180
#command 0x36 0x28 # rotation 270
command 0x36 0x08
command 0x37 0x00 # Vertical scroll zero
command 0x3a 0x55 # COLMOD: Pixel Format Set
command 0xb1 0x00 0x18 # Frame Rate Control (In Normal Mode/Full Colors)
command 0xb6 0x08 0x82 0x27 # Display Function Control
command 0xF2 0x00 # 3Gamma Function Disable
command 0x26 0x01 # Gamma curve selected
# Set Gamma
command 0xe0 0x0F 0x31 0x2B 0x0C 0x0E 0x08 0x4E 0xF1 0x37 0x07 0x10 0x03 0x0E 0>
command 0xe1 0x00 0x0E 0x14 0x03 0x11 0x07 0x31 0xC1 0x48 0x08 0x0F 0x0C 0x31 0>
command 0x11 # Exit Sleep
delay 120
command 0x29 # Display on
delay 120
格闘の末に…
最終形に辿り着くまでに3時間くらいの格闘がありました。
最初元のデータのままやってみたのですが、色は正常だけども左右反転。
画面の下をケーブルにしたかったので角度も違う。

ということで
# rotation90と書いてあるところをコメントアウトすると左右反転と画面方向が正しくなるが、色が青みがかったおかしな色に。
その後もいろんな場所をコメントアウトしたりして試しましたが、なかなか原因特定に至らず。
ヤケクソでChatGPTに画面の青みについて聞いてみるとRGB/BGR設定と言うのがあるとの答え。
なんかそれ怪しいな?と思い試してみるとようやくやっと色が正しく出るようになりました。
ちなみに command 0x36 0x08 がRGB→BGRにするコマンドだそうです。
command 0x36 0x00がBGR→RGBにリセットのコマンド。
逆でしたけどね。謎です。
格闘のほどはさておき、このテキストファイルをctrl+xで保存しておきます。
python mipi-dbi-cmd panel.bin ili9341.txt
sudo cp /home/pi/panel-mipi-dbi/panel.bin /lib/firmware
sudo reboot
この辺は参考サイトままなのですが、作ったili9341.txtというのをビルドしてpanel.binってファイルにします。それを/lib/firmwareと言う場所にコピーするという流れです。
再起動したら…出ました!

しかし、mipi-dbi-spiというのはfbcpよりもディスプレイのドライバーの数が少ないし不調を微調整するためのコマンドもかなり専門的っぽくて調べにくいので、これから古いOSが使いにくい環境になってくると毎回大変かもしれない。
できるだけRaspberry Pi Zeroが欲しい。Zero2じゃなくて。HDMI接続ならZero2でもいいんだけど…ピン接続のモニターはきびしいなあ
そろそろ寝ます。展示前は徹夜しないと誓ったのに。ついついやりすぎました。
次回はいつになるかわかりませんがこの小型モニターに映像を流す部分を書いていきます。
展示いっぱいあるからがんばるぞ〜
2025/2/22 追記
HDMI接続を外して単体で起動してみたところ、右と下に僅かにグリッジが表示されるようになってしまいました。またも色々格闘しましたが、
sudo nano /boot/firmware/config.txt
config.txtに入って、
dtparam=width=130,height=130
ディスプレイの解像度は128x128ピクセルですが、なぜかこうすると直りました。画面のぼやけ等もなさそうです。
また、色々格闘した上でChatGPTにST7735S用に書き直してとお願いし、
ili9341.txtも書き直しました。
command 0x01 # Software Reset
delay 150
command 0x11 # Sleep Out
delay 150
command 0xB1 0x05 0x3C 0x3C # Frame Rate Control (例: 通常モード用)
command 0xB2 0x05 0x3C 0x3C # Inversion Control (場合により)
command 0xB3 0x05 0x3C 0x3C 0x05 0x3C 0x3C # Partial Frame (オプション)
command 0xB4 0x03 # Display Inversion Control
command 0xB6 0x02 0x82 0x3B
command 0x13 # Normal Display Mode (Partial Mode OFF)
command 0x36 0x08 # MADCTL: Memory Access Control (通常、RGB順・正位置)
command 0x3A 0x05 # COLMOD: Interface Pixel Format (16-bit/pixel)
command 0x2A 0x00 0x00 0x00 0x83 # Column Ad
command 0x2B 0x00 0x00 0x00 0x81 # Row Ad
command 0x29 # Display ON
delay 150
変えなくても大丈夫かもしれませんが、色が良くなったような気がします。
よくわからないですが・・・
どなたかのご参考になれば幸いです。