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