購入した製品
すぐ届くということでAmazonで以下の製品を購入しました。
ラズパイ用 1.3インチ IPS液晶 - 240×240解像度/SPI接続/LCD HAT(ドライバ:ST7789)
https://www.amazon.co.jp/dp/B07KVMK2DZ
設定手順
/etc/modules
ファイルに追記します。
ファイルの一番下に以下を追記してください。
spi-bcm2835
flexfb
fbtft_device
ファイル作成
/etc/modprobe.d/fbtft.conf
ファイルを作成します。
中身には以下2行を記載してください。
options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 custom=1 height=240 width=240 rotate=180 speed=40000000 fps=60 bgr=1
options flexfb setaddrwin=0 width=240 height=240 init=-1,0x11,-2,120,-1,0x36,0x70,-1,0x3A,0x05,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x1A,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x0B,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0x21,-1,0xE0,0x00,0x19,0x1E,0x0A,0x09,0x15,0x3D,0x44,0x51,0x12,0x03,0x00,0x3F,0x3F,-1,0xE1,0x00,0x18,0x1E,0x0A,0x09,0x25,0x3F,0x43,0x52,0x33,0x03,0x00,0x3F,0x3F,-1,0x29,-3
マニュアルには以下が記載されていますが、これだと私の環境ではうまく動きませんでした。
options fbtft_device name=flexfb gpios=reset:27,dc:25,cs:8,led:24 speed=40000000 bgr=1 fps=60 custom=1 height=240 width=240
options flexfb setaddrwin=0 width=240 height=240 init=-1,0x11,-2,120,-1,0x36,0x70,-1,0x3A,0x05,-1,0xB2,0x0C,0x0C,0x00,0x33,0x33,-1,0xB7,0x35,-1,0xBB,0x1A,-1,0xC0,0x2C,-1,0xC2,0x01,-1,0xC3,0x0B,-1,0xC4,0x20,-1,0xC6,0x0F,-1,0xD0,0xA4,0xA1,-1,0x21,-1,0xE0,0x00,0x19,0x1E,0x0A,0x09,0x15,0x3D,0x44,0x51,0x12,0x03,0x00,0x3F,0x3F,-1,0xE1,0x00,0x18,0x1E,0x0A,0x09,0x25,0x3F,0x43,0x52,0x33,0x03,0x00,0x3F,0x3F,-1,0x29,-3
SPIの有効化
sudo raspi-config
5 Interfacing Option -> P4 SPI -> Yes
を選択
結果確認
/dev
の中に、fb1
というファイルができていたら成功です。
ファイルの上書き
cd /dev
sudo cp -a fb0 fb1
ツールのインストール
sudo apt-get install cmake git
コードのダウンロード
cd ~
git clone https://github.com/tasanakorn/rpi-fbcp
cd rpi-fbcp/
mkdir build
cd build/
cmake ..
make
sudo install fbcp /usr/local/bin/fbcp
自動実行の設定
/etc/rc.local
ファイルに追記します。
ミスったら起動しなくなるかもしれませんので要注意です。
修正点は最後から2行目にfbcp &
を追加しました。
修正前
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
exit 0
###修正後
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
fbcp &
exit 0
ディスプレイ設定
/boot/config.txt
に追記します。
以下を追記してください。
hdmi_force_hotplug=1
hdmi_cvt=720 720 60 1 0 0 0
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
display_rotate=1
マニュアルにはhdmi_cvt=300 300 60 1 0 0 0
と記載されています。
確かにこの設定だと文字は目視できるサイズですが、デスクトップ全体が表示されない可能性がありますので、720x720に変更しました。
ラズパイの再起動
sudo reboot
これで画面にデスクトップ画面が表示されているはずです。
画面をスリープさせない設定
デフォルトでは数分で画面がスリープしてしまいますが、以下を設定することで画面が表示され続けます。
まず/etc/xdg/lxsession/LXDE/autostart
に以下を追加します。
@xset s off
@xset s noblank
@xset -dpms
次に/etc/lightdm/lightdm.conf
に以下を追記します。
[SeatDefaults]
xserver-command=X -s 0 -dpms
トラブルシューティング
ログイン・ログオフ時の文字だけ画面に表示されるが、デスクトップ画面が表示されない場合
GL Driverで変なものを選択している可能性があります。
(sudo raspi-config -> 7 Advanced Options -> A7 GL Driver
で何か選んでいる可能性があります)
上記の設定をした場合は/boot/config.txt
の最終行に1行追加されていると思いますので、その行を削除してrebootしてください。
参考URL
https://www.waveshare.com/wiki/1.3inch_LCD_HAT
https://www.waveshare.com/w/upload/6/6b/1.3inch_lcd_hat_user_manual_en.pdf
https://blog.goo.ne.jp/peki-k/e/e62456f9006e41753de574d38eddf63c
関連
Raspberry Pi Zero WHに接続した物理ボタン(LCD HAT)にキーバインドする方法
https://qiita.com/hanzawak/items/774214a608efe0a6ab86