2026年02月01日

Raspberry Pi 5 + SPI液晶でスクリーンセーバーを自作した話

rpi_fb_srnsv.jpg

 

背景

表示用に使っているのは、以下の SPI 接続ディスプレイ。

  • 3.5インチ TFT LCD(480×320)

  • SPI 接続

  • ILI9486 framebuffer

  • ADS7846 タッチ

  • CUQI RP-01

Raspberry Pi 5 を PBX(電話交換機)として 稼働させる場合、PBX はバックグラウンドで動作するため、
デスクトップが長時間表示される。
そのため、TFT LCD の 焼き付き(イメージリテンション) が起きないか気になった。


SPI液晶の制約

この系統のディスプレイは以下が使えない。

  • DPMS

  • /sys/class/backlight

  • バックライト OFF 制御

  • X11 用スクリーンセーバー

仕様上、バックライト制御インターフェースが存在しない。
参考:
https://www.lcdwiki.com/3.5inch_RPi_Display

つまり、

OS 任せの画面消灯は不可能(らしい)


方針

ハード改造は避けたい。
ならば ソフトウェアで画面を動かすしかない

そこで、

  • /dev/fb0 に直接描画

  • 常に動く表示

  • タッチしたら即復帰

という アプリ型スクリーンセーバーを自作することにした。


作ったもの

Windows 98 時代にあった、3D 文字が画面内を動くスクリーンセーバー風の表示。

特徴:

  • フレームバッファ直描画(RGB565)

  • 擬似 3D(押し出し+陰影)

  • 画面端で反射しながら移動

  • 常時移動するため焼き付き防止になる

  • ADS7846 タッチで即終了し元画面に復帰

  • X11 / Wayland 不要

SPI 液晶向けとしては、これが一番素直な解決策ではないでしょうか。


サービスとして起動する

PBX なので、起動時から常駐させたい。
systemd サービスとして登録する。

インストール

sudo install -m 0755 fb_saver_3dtext.py /usr/local/bin/fb_saver_3dtext.py
sudo install -m 0644 fb-screensaver.service /etc/systemd/system/fb-screensaver.service

有効化(自動起動)

sudo systemctl daemon-reload
sudo systemctl enable --now fb-screensaver.service

これで、

  • 起動後は常に待機

  • 一定時間無操作でスクリーンセーバー起動

  • タッチで即復帰

という動きになる。


停止・無効化


sudo systemctl stop fb-screensaver.service
sudo systemctl disable fb-screensaver.service

プログラムは以下にあります。

https://github.com/7m4mon/rpi-spi-fb-screensaver



posted by MON at 00:00| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
【今是昨非】http://nomulabo.com/