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画像が描画されます。