ArmbianのPythonでST7735ディスプレイを使う

小型カラーTFTディスプレイのST7735はだいぶ前にArduino上で動かした記事や、MicroPythonで動かした記事など、当ブログで何度か取り上げた。

ST7735はCircuitPython用ドライバがあるのでBlinkaをインストールしたラズパイや、ラズパイ用のPythonライブラリも存在するためラズパイであれば問題なく使えるのだが、Blinka非対応のNano Pi Neoでは通常使えない。が、前回記事にてラズパイ用のGPIO制御PythonライブラリRPi.GPIOをNano Pi Neoに対応させたことでST7735ディスプレイを動かす事が出来たので方法を記事にまとめる。

スポンサーリンク

ST7735ディスプレイとNano Pi Neoを接続する

SPIの他にGPIOへの配線が必要。ST7735側のDCピン・RESETピンをNano Pi Neo側のGPIOピンA0・A1にそれぞれ接続した。

ST7735Nano Pi Neoピン番号備考
DC(A0)11GPIOA0(PA0)
Vcc173.3V
SDA19SPI0_MOSI
GND20GND
RESET22GPIOA1(PA1)
SCK23SPI0_CLK
CS24SPI0_CS
LED150Ωを介して3.3Vへ

ST7735のPythonライブラリ

ライブラリは、Adafruit社によるCircuitPython用ドライバをベースにインタフェースがカスタマイズされた以下の物を使った。

GitHub - pimoroni/st7735-python: Python library to control an ST7735 TFT LCD display. Allows simple drawing on the display without installing a kernel module.
PythonlibrarytocontrolanST7735TFTLCDdisplay.Allowssimpledrawingonthedisplaywithoutinstallingakernelmodule.-GitHub-pimoroni/st7735-python:Pythonlibrarytocontrola...

このドライバはBlinka無しでも使えるように、ディスプレイとマイコンの間はspidev経由でSPI通信、RPi.GPIO経由でGPIOを叩くよう変更されている。RPi.GPIOはラズパイ専用のライブラリだが、前回記事で取り上げたようにOPi.GPIOというライブラリに少し手を加えてNano Pi Neo2上でRPi.GPIO互換ライブラリとして使うことが出来るので、これを利用する。

Pythonライブラリのインストール

ST7735のPythonドライバ本体はPyPIに登録されておりpipでインストール可能。但し、デバイスへのアクセスにroot権限が必要なため、インストールもroot権限で行う。

sudo pip install st7735 numpy

サンプルプログラムが画像処理ライブラリPillowを使っているのでこちらもインストール。

sudo pip install Pillow

サンプルプログラムの実行

ドライバと一緒にGitHubに置かれているサンプルプログラム(image.py)を少し改造し、以下のプログラムを作成した。

import sys
from PIL import Image
import ST7735 as ST7735

if len(sys.argv) < 2:
    print("Usage: {} <image_file>".format(sys.argv[0]))
    sys.exit(1)

image_file = sys.argv[1]

WIDTH = 128
HEIGHT = 128

# Create ST7735 LCD display class.
disp = ST7735.ST7735(
    port=0,
    cs=0,
    dc=11,
    rst=22,
    rotation=0,
    width=WIDTH,
    height=HEIGHT,
    offset_top=0,
    offset_left=0,
    invert=False,
    spi_speed_hz=10000000
)

# Initialize display.
disp.begin()

# Load an image.
print('Loading image: {}...'.format(image_file))
image = Image.open(image_file)

# Resize the image
image = image.resize((WIDTH, HEIGHT))

# Draw the image on the display hardware.
print('Drawing image')

disp.display(image)

DCピンとRSTピンの指定について

ST7735クラスのコンストラクタの引数dcとrstにDCとRSTの各ピンの接続先は、上の表に書いた通りNano Pi NeoボードのPA0とPA1なので、それぞれのピン番号11と22を指定している。

プログラムを実行して画像を表示

引数に画像ファイルを指定すれば、画像が表示される。実行にはsudoを付けてroot権限が必要。

sudo python st7735image.py fuji0.jpg

下はST7789に写真を表示した時の様子。

まとめ

ST7735のラズパイ用ドライバを使って、Nano Pi Neo上のPythonでST7735に画像表示をすることが出来た。中華製シングルボードコンピュータも、ちょっとした工夫でラズパイ用のPythonドライバを使える事が分かったのは収穫。素直にラズパイ買えばいいじゃんという話もあるが、ラズパイは相変わらず入手困難だし、選択肢の一つとしてアリじゃないかなと思う。

コメント