CircuitPython 10行プログラミング Step9 (5) SPIとグラフィック・ディスプレイ <その2>

 ここでは、マイコン・ボードESP32-S3-DevKitC-1-N8のSPIバスにグラフィック・ディスプレイ(コントローラはST7789)をつないでテキストを表示します。CircuitPython は8.0.0-beta.4です。

  リファレンス Adafruit Display_Text Library

x,yの座標

テキストの表示

 温湿度センサAHT20の読み出した値を表示します。


# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import board
import terminalio
import displayio
from busio import SPI
from adafruit_display_text import label
from adafruit_st7789 import ST7789

from board import *
from busio import I2C
import time
import adafruit_ahtx0

i2c = I2C(IO4,IO5)  # uses board.SCL and board.SDA
sensor = adafruit_ahtx0.AHTx0(i2c)

# Release any resources currently in use for the displays
displayio.release_displays()

spi = SPI(clock=board.IO14, MOSI=board.IO11)
tft_cs = board.IO10
tft_dc = board.IO46
tft_rst = board.IO9

display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=tft_rst)
display = ST7789(display_bus, width=320, height=170, colstart=35, rotation=90)

while True:

    print("\nTemperature: %0.1f C" % sensor.temperature)
    print("Humidity: %0.1f %%" % sensor.relative_humidity)
    text = str(round(sensor.temperature,1)) + "C " + str(round(sensor.relative_humidity,1)) + "%"
    text_area = label.Label(terminalio.FONT, text=text)
    text_area.x = 50
    text_area.y = 50
    text_area.scale = 3
    display.show(text_area)
    time.sleep(2)

 実行例です。文字の大きさはscale=3なので、3倍に拡大しています。

 x,yはフォントの座標なので、x=0,y=10では、文字の上部が欠けてしまいます。scale=3であれば、y=20以上にすれば、欠けずに表示ができます。

 adafruit_display_textのlabelを使いました。最新はbitmap_labelですが、変更しても、表示は変わりません。

 複数の解説を読むと、文字列が長くなったときにメモリが少なめになるとのとこです。

 adafruit_display_textのlabelは、描画システム上、一番内側に属する領域を描画します。その上位はGroupです。画面全体を一つのGroupに見なした場合、省略できるようです。

文字のパラメータ

fontの種類は、デフォルトではシステム・フォントのterminalio.FONTが使われます。

大きさはscaleの整数値で指定します。デフォルトは1で大きいほど拡大されます。

テキストの色colorは、RGB 3バイトの16進値で指定します。デフォルトは0xff00ffです。

背景色のデフォルトはNoneです。色は、3バイトの16進値で指定します。background_color=0xff00ff

行間隔line_spacingのデフォルトは1.25です。改行コード\nで下にずれるスペースの指定です。

ベースラインをそろえたいときは、base_alignment=True

文字の中央ぞろえのままは、base_alignment=False

<そのほか>

background_tight ( bool ) –True背景ボックスでテキストをしっかりと囲む場合にのみ設定します。「True」に設定すると、パディング パラメータは無視されます。

padding_top ( int ) – 上部の背景バウンディング ボックスに追加されるピクセル

padding_bottom ( int ) – 下部の背景バウンディング ボックスにピクセルを追加

padding_left ( int ) – 左側の背景境界ボックスに追加されるピクセル

padding_right ( int ) – 右側の背景境界ボックスに追加される追加のピクセル

anchor_point ( Tuple ( float , float ) ) – anchored_position が相対的に移動するポイント。幅と高さの小数パーセントのタプル(例: (0,0) は左上、(1.0, 0.5): は中央右)

anchored_position ( Tuple ( int , int ) ) – anchor_point に対する相対的な位置。x,y ピクセル座標を含むタプル。

abel_direction ( str ) – ラベル テキストの向きを定義する文字列。LTR左から右、右RTLから左 UPD、上下逆、上向き、下向きUPRの五つの構成が可能DWRです。デフォルトではLTR