2019年11月22日金曜日

ラズベリーパイでradikoラジオをつくる: その4 2.8インチTFTディスプレイを使う


2.8インチTFTディスプレイ

2.8インチSPI接続 240×320ドットのもので、ebayで入手しました。ILI9341というメジャーなコントローラチップが使われています。タッチパネルも付いてますが、今回は使いません。3.3V電源で動作させるときは、裏面J1をショートして3.3Vレギュレータ(XC6206)をスルーにします。



Adafruitのソフトウエア設定

  • 今回はデスクトップ画面のディスプレイとしてではなく、Pythonから文字や画像の描画をさせるつもりで、ここでもAdafruit のお世話になります。リンク先の記事User-space SPI TFT Python Library - ILI9341では、This code is discontinuedとありますが代替えのものはCircuitPythonベースのものなので、あえて旧い記事のものを試してみます。
  • ラズパイとLCDの結線は、Adafruit のデフォルトでは次の通りです。(括弧内は今回の基板での結線)事前にラズパイのSPIを有効にしておきます。
Raspberry Pi SCLK (SPI0 SCLK) to TFT CLK. (SCK)
Raspberry Pi MOSI (SPI0 MOSI) to TFT MOSI.(MOSI)
Raspberry Pi CE0 (GPIO 8/SPI0_CE1) to TFT CS.(CS)
Raspberry Pi GPIO 18 (GPIO 25) to TFT D/C.
Raspberry Pi GPIO 23 (GPIO 7) to TFT RST.
  • ソフトウエアをインストールします。元記事では python-imagingが指定されていましたが、python-pilに読み替えました。PIL(Python Imaging Library)はPython 3未対応のうえ2011年を最後に開発が止まっているため、後継のPillowをインストールしようとしましたがexceptionが出てうまく入らなかったので、やむなくPILで続けます。
$ sudo apt-get update
$ sudo apt-get install build-essential python-dev python-smbus python-pip python-pil python-numpy git
$ sudo pip install RPi.GPIO
  • 次にTFTモジュールをインストールします。
$ cd ~
$ git clone https://github.com/adafruit/Adafruit_Python_ILI9341.git
$ cd Adafruit_Python_ILI9341
$ sudo python setup.py install

動作確認

  • ~/Adafruit_Python_ILI9341/examples にサンプルが入っています。
  • まずはimage.pyです。エディタでピンアサインを変更します。変更箇所は次の通りです。他のサンプルも同様に修正します。
# Raspberry Pi configuration.
DC = 25
RST = 7
SPI_PORT = 0
SPI_DEVICE = 0
  • image.pyを動作させると、猫の写真が描画されます。
$ sudo python image.py

  • image_timed.py は、猫の写真を連続描画させて所要時間を測るベンチマークみたいな物です。概ね6fps程度、JPEGデコードしてシリアルのSPI接続でデータを送るならこんなものなんですかね。

  • shapes.pyを動作させると、Pythonスクリプトで設定した図形や文字が表示されます。しかし文字が小さすぎです。デフォルトフォントは8px固定で高さは1.2ミリ程度。
$ sudo python shapes.py
  • この機能を使って、ラジオの表示パネルっぽいものを作ってみます。まずは文字を大きくしたいところ。スクリプトにフォントの変更方法が書かれています。使用できるフォントの一覧は次のコマンドで取得できます。
$ fc-list
  • インストール済みのフォントから、TrueTypeフォントのDejavu Sansを試します。フォント名あるいはフォントをフルパスで指定できます。
font = ImageFont.truetype('DejaVuSans.ttf',16)
font = ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',24)
  • ラジオのディスプレイっぽい雰囲気にしてみました。スイッチを押してもまったく動かないハッタリですけど、完成した感が出ます。文字の位置や大きさを調整していたところ、面倒なことに気がつきました。どうやらTFTパネルは縦長画面がデフォルトで、横長表示するには回転させる必要があるようです。だから、この文字はソフトウエアで90度回転させて描画しています。

0 件のコメント:

コメントを投稿