airpocketのアイコン画像
airpocket 2023年01月31日作成
セットアップや使用方法 セットアップや使用方法 閲覧数 1700
airpocket 2023年01月31日作成 セットアップや使用方法 セットアップや使用方法 閲覧数 1700

Raspberry Pi で小型LCDを動かす その3

Raspberry Pi で小型LCDを動かす その3

はじめに

この記事はRaspberry Piで小型LCDを動かすの第3弾です。
Raspberry PiでILI9341というLCDを動かす方法がいくつかあったため、以下の4つの方法についてそれぞれまとめています。

方法1.pythonからSPI接続したディスプレイに表示する
方法2.pythonでフレームバッファに直接書き込み
方法3.fbiを使って静止画を表示
方法4.MPlayerを使って動画を表示

この記事では方法3と4についてまとめています。

まとめ

今回はデバイスツリー上でILI9341を認識し、アプリを使って静止画や動画を表示させました。
お手軽に使うにはこれもアリかと思います。
ILI9341はサブディスプレイとして使いたいのですが、

使用したLCD

今回はよく見かけるSPI接続タイプの小型LCDを使用しました。
よく似たLCDでも、ドライバICが異なるとライブラリが使用できない場合があるため注意が必要です。
今回はドライバにILI9341を使っている2.2inch 320x240サイズのTFT LCDを使用します
ライブラリにはadafruitのライブラリを用います。よく使われるドライバに対応しているライブラリですがLCDのインスタンスの読み込みに微妙な違いがある様ですので、他のドライバのLCDを使用する際はご注意ください。

Raspberry Pi

Raspberry Pi は4Bで32bit版 Raspberry Pi OS(Bullseye)を使用しました。
64bit版を使いたいところですが、まだ64bit版に対応できていないライブラリも多くあります。使用用途や環境が限定的かつ64bi対応済みならば64bit版でも良いのですが、古くからあるデバイスやアプリを使うときには32bit版、場合によっては最新のBullseyeではなくLegacy版(Buster)の方が良い場合もあります。
今回使用するLCDやドライバ群は比較的昔からあるものなので、32bit版を使用してトラブルを回避します。

接続方法

Raspberry Piとディスプレイの接続は次の通りです。

ili9341の場合

LCD Raspberry Pi
SDO/MISO 21:GPIO9(SPI0 MISO)
LED 12:GPIO18
SCK 23:GPIO11(SPI0 SCLK)
SDI/MOSI 19:GPIO10(SPI0 MOSI)
DC/RS 18:GPIO24
RESET 16:GPIO23
CS 24:GPIO8(SPI0 CS0)
GND 9:GND
VCC 17:3V3

バックライトを点灯させ続けるならLEDは3V3ラインにつなげておいてもOKです。
今回はバックライトのON/OFFも制御したいのでGPIOに接続しています。

前準備

まずはRaspberry Piの設定を行い、必要なモジュールをインストールします。

ライブラリの準備

まずはパッケージを最新状態にしておきます。

sudo apt-get update
sudo apt-get upgrade

続いてopencvとlcdのモジュールをインストールします。
lcdを動かすだけならopencvは不要ですが、今回はUSBカメラ画像を表示する際にopencvを使用します。
2023/1/13現在、pip install opencv-pythonではうまく入らいないのでapt で入れます。

sudo apt-get install python3-opencv

fbiをインストールする

fbiを使うと、ili9341に静止画を表示できます。

sudo apt-get install fbi

mplayerをインストールする。

mplayerを使うと、ili9341に動画やカメラ画像を表示できます。

sudo apt-get install mplayer

デバイスツリーからili9341を有効化する

python内でSPI接続するのではなく、デバイスツリーを書き換えてili9341を有効化します。

sudo nano /boot/config.txt

エディターでconfig.txtを開き、最後に次の一行を追加して保存します。

dtoverlay=rpi-display

保存するにはctrl+x>y>enter

config.txtが編集できたら、rebootしてディスプレイが認識されているか確認します。

lsmodで確認すると、ili9341が認識されています。

$ lsmod | grep ili9341
fb_ili9341             16384  0
fbtft                  45056  1 fb_ili9341

lsコマンドで見ると、デバイスツリーにfb1ができています。fb0が通常のディスプレイ用、fb1がili9341のフレームバッファです。

$ ls -al /dev/fb*
crw-rw---- 1 root video 29, 0 Jan 13 20:58 /dev/fb0
crw-rw---- 1 root video 29, 1 Jan 13 20:58 /dev/fb1

fbsetコマンドで見ると、320x240サイズで設定されています。

fbset -fb /dev/fb1

mode "320x240"
    geometry 320 240 320 240 16
    timings 0 0 0 0 0 0 0
    nonstd 1
    rgba 5/11,6/5,5/0,0/0
endmode

ILI9341に静止画を表示する

****.jpgの部分に表示させたいファイルを指定すると静止画が表示されます。
表示している間はraspiが動かないので、リモートログインしている場合は要注意です。(リモートからのコマンドも受け付けなくなります)

sudo fbi -nocomments -noverbose -a -T 1 -d /dev/fb1 ****.jpg

ili9341に動画を表示する

sudo mplayer -vo fbdev2:/dev/fb1 -x 320 -y 240 -zoom ****.mp4

#ili9341にUSBカメラ画像を表示する

sudo mplayer tv:// -vo fbdev2:/dev/fb1 -x 320 -y 240 -zoom

おまけ

LCDに表示した画像を消す際はバッファをNullで塗りつぶしときましょう。

dd if=/dev/zero of=/dev/fb1 > /dev/null 2>&1

mplayerで動画をサイズ修正無しで再生するときは

sudo mplayer -vo fbdev2:/dev/fb1 ****.mp4

無限ループ再生するなら

sudo mplayer -vo fbdev2:/dev/fb1 ****.mp4  -loop 0
airpocketのアイコン画像
電子工作、プログラミング、AI、DIY、XR、IoT M5Stack / Raspberry Pi / Arduino / spresense / K210 / ESP32 / Maix / maicro:bit / oculus / Jetson Nano / minipupper etc
ログインしてコメントを投稿する