5
7

More than 5 years have passed since last update.

Raspberry Pi Zero WHにディスプレイを接続し、デスクトップ画面を表示する方法

Last updated at Posted at 2019-05-04

購入した製品

すぐ届くということでAmazonで以下の製品を購入しました。

ラズパイ用 1.3インチ IPS液晶 - 240×240解像度/SPI接続/LCD HAT(ドライバ:ST7789)
https://www.amazon.co.jp/dp/B07KVMK2DZ

接続したらこんな感じです。
image.png

設定手順

/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

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7