ラズパイで1.3インチのCS無し液晶を使う【2021】(Kernel5.4版)

以前の記事ラズパイに小さいLCDを付けてデスクトップを表示するで紹介した1.3インチの小さい液晶を使う方法ですが、RaspberryPi OSのカーネルが5.4にバージョンアップしたため記事の手順が使えなくなりました。2021/1現在デスクトップを表示する方法はまだ分かっていませんが、Pythonを使って画像を表示するというところまではできたので紹介します。
1.3インチの液晶(CS端子なし)
この記事で紹介するのは、AmazonやAliExpressにて格安で売っている1.3インチの液晶です。小さいながらも解像度が240×240あるため様々なところで利用できます。SPI接続で利用するのですが、CS端子無いので他の液晶と使い方が異なります。(SPIモード3を利用する。)


接続について
今回は、GoogleAIYVoiceKitV2付属のVoiceBonnet上に付けたためピンは下記のように配置しました。RST(RESET),DC,BLK(LED Backlight)は変更可能です。
LCDのピン | GPIO (GPIO番号) | PinNo (40ピンの番号) | 備考 |
---|---|---|---|
GND | GND | 20 | |
VCC | 3.3v | 17 | |
SDL | GPIO11 | 23 | SCLK |
SDA | GPIO10 | 19 | MOSI |
RES | GPIO22 | 16 | 変更可 |
DC | GPIO24 | 18 | 変更可 |
BLK | GPIO25 | 22 | 変更可 |
Pythonから利用する
試行錯誤と検索を繰り返してやっと下記の「あっきぃ日誌」に辿り着きました。Pinomoriの1.3インチの液晶について書かれています。しかし、Pinomoriの液晶はCS端子が付いているため、今回使っているCS端子の無い液晶の場合ST7789ライブラリに手を加える必要があります。
ライブラリの変更点
元のライブラリをForkして改変しました。変更点は下記のコミットを参照してください。コンストラクタのパラメーターにspi_modeを追加しただけです。
Fix for LCD without CS_PIN · mongonta0716/st7789-python@ff213de · GitHub
下記の手順でライブラリをインストールしサンプルを実行すると猫の画像が表示されます。
mkdir ~/GitRepos
cd ~/GitRepos
git clone https://github.com/mongonta0716/st7789-python
cd st7789-python/library
python setup.py build
sudo python setup.py install
cd ../examples
python image.py cat.jpg

Python3でも使用可能
Python3でインストールすればPython3環境でも利用できました。
mkdir ~/GitRepos
cd ~/GitRepos
git clone https://github.com/mongonta0716/st7789-python
cd st7789-python/library
python3 setup.py build
sudo python3 setup.py install
cd ../examples
python3 image.py cat.jpg
デスクトップの表示について
参考にさせていただいたあっきぃ日誌に詳細が書いてありますが、Kernel5.4で重要な変更があったにもかかわらず、モジュールfbtftとfbcp_deviceは動かず削除されてしまったため、別の対応が必要なようです。多分DeviceTreeを使う方法だと思うのですが、もうちょっと調べてみてからやろうと思います。
はじめまして。ST7789(240×240 CS無)をVolumioで使っております。
このページを拝見し、他のアプリでも画像表示させてみたいと思います。
書かれた手順で問題無くインストールでき表示されました。
大変参考になりました。有難うございます。
しかしながら、私が取り付けたST7789の配置ですと、
画像や文字が上下逆さまに表示されてしまいます。
ライブラリを弄って、表示を180度回転(rotation)させれば良いと思いますが、
どこをどのように変更、あるいは追記すればよいか、未だ判明できておりません。
ご教示頂ければ幸いです。今後もよろしくお願いします。
追伸です。
image.pyの中身を調査致しました。
下記に追記部分を示します。
パラメータの最後の項目として、rotationの項目を追記しました。
直前のmode=3のあとには、カンマを入れました。
元々rotationが初期設定されている箇所を探りますと、
90度になっているようでしたので、
上下逆さまに表示させるために、270を設定致しました。
今のところ、うまく正対して表示されております。
ちなみに、rst、backlightのピン番号は、私が接続しているGPIO#に変更しております。
# Create ST7789 LCD display class.
disp = ST7789.ST7789(
port=0,
cs=0, # for LCD without cs_pin
rst=25, # gpio25 for reset(res or rst)
dc=24, # gpio24 for dc
backlight=12, # gpio12 for led backlight(blk)
spi_speed_hz=80 * 1000 * 1000,
spi_mode=3, # for LCD without cs_pin
rotation=270
)