Python3を使ってRaspberry Pi 3でサインスマート 1.8″ LCDに描画します。すでに、サインスマート 1.8″ LCDに描画への表示は、「Pythonを使ってRaspberry PI 3でサインスマート 1.8″ LCDに円形の表示」で行いましたが、今回は、Adafruit Python ILI9341を元にライブラリ化した「Python ST7735」を使用します。なお、Raspberry Pi 3とサインスマート 1.8″ LCDの接続については、「Raspberry PI 3でサインスマート 1.8″ LCDの表示」を参照してください。
LCDライブラリ「Python ST7735」のインストール
実行するために必要なライブラリを次のようにインストールします。
$ sudo apt-get install build-essential python-dev python-smbus python-pip python-imaging python-numpy
RPi.GPIOとAdafruit GPIOライブラリを次のようにインストールします。
$ sudo pip install RPi.GPIO $ sudo pip install Adafruit_GPIO
LCDライブラリ「Python ST7735」提供サイト(前述)からZIPファイルでダウンロードして解凍し、Python3で実行できるように次のようにインストールします。
$ cd Python_ST7735-master $ sudo python3 setup.py install
次のようにサンプルプログラムを実行します。
$ cd examples $ python3 shapes.py
楕円と長方形がLCDに表示されれば、正常にセットアップできました。
LCDプログラムの作成
LCDプログラム「lcd.py」は、Python の画像処理ライブラリ「Pillow (PIL) 」を使用って作成します。1.8″ LCDには、テキストと長方形を表示させます。Pillowで提供されている関数は「Pillow Doc」を参照してください。
- Image.new関数により描画するキャンパスを作成します。ここにテキストと長方形を書くために、ImageDraw.Draw関数を使用します。
- テキストはtext関数、長方形はline関数を使用して描画します。
- 表示の初期化はTFT.ST7735.begin関数、表示の開始はTFT.ST7735.display関数を使用します。
lcd.py
</ul>
from PIL import Image
from PIL import ImageFont, ImageDraw
import time
import ST7735 as TFT
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.SPI as SPI
WIDTH = 128
HEIGHT = 160
SPEED_HZ = 4000000
# Raspberry Pi configuration.
DC = 24
RST = 25
SPI_PORT = 0
SPI_DEVICE = 0
# Create TFT LCD display class.
disp = TFT.ST7735(
DC,
rst=RST,
spi=SPI.SpiDev(
SPI_PORT,
SPI_DEVICE,
max_speed_hz=SPEED_HZ))
# Initialize display.
disp.begin()
str_test = "Hello,723456 "
image = Image.new('RGB', (128, 50), (255,255,255))
draw1 = ImageDraw.Draw(image)
draw1.text((30, 25), str_test, (0,0, 255))
draw1.line((5, 0, 5, 40), fill=(255, 255, 0), width=10)
disp.display(image)
次に複数行のテキストとjpg画像を表示させます。
- multiline_text関数で複数行のテキストを表示させます。各行は「\n」で分割し、行間は「spacing」パラメータで指定します。
- open関数でjpg画像をイメージとして読み込み、paste関数により指定した位置から読み込んだイメージを貼り付けます。
- 画像のRGBがBRGになっているため、split関数で各色を分割し、merge関数で組み直して、BRGからRGBにイメージを変換します。
lcd1.py
from PIL import Image
from PIL import ImageFont, ImageDraw
import time
import ST7735 as TFT
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.SPI as SPI
WIDTH = 128
HEIGHT = 160
SPEED_HZ = 4000000
# Raspberry Pi configuration.
DC = 24
RST = 25
SPI_PORT = 0
SPI_DEVICE = 0
# Create TFT LCD display class.
disp = TFT.ST7735(
DC,
rst=RST,
spi=SPI.SpiDev(
SPI_PORT,
SPI_DEVICE,
max_speed_hz=SPEED_HZ))
# Initialize display.
disp.begin()
str_test = "1 xxx\n2 yyy\n3 zzz"
image = Image.new('RGB', (128, 160), (255,255,255))
draw1 = ImageDraw.Draw(image)
draw1.multiline_text((40, 25), str_test, (0,0, 0),spacing=0)
draw2 = Image.open('logo.jpg')
image.paste(draw2, (5, 80))
b, g, r = image.split()
image = Image.merge("RGB", (r, g, b))
disp.display(image)
LCDプログラムの実行
次のコマンドで作成したLCDプログラムを実行します。
$ python3 lcd.py
次のように、サインスマート 1.8″ LCDにテキストと長方形が描画されます。
次のコマンドで作成したLCDプログラムを実行します。
$ python3 lcd1.py
次のように、サインスマート 1.8″ LCDに複数行のテキストとJpg画像が描画されます。

