SPIバスは、I2Cバスに比べて転送速度が速いため、表示面積の大きな表示器で使われます。マニュアルでは、board.SPI() → busio.SPIと書かれているので、busioモジュールのSPIを使います。
###TFTディスプレイST7789を利用
Adafruitから入手したSPI接続のTFTディスプレイを利用します。320×240ドットで、バックライトはデフォルトでONです。
###接続
ST7789ボードの端子 | Picoの端子(GPIO) | 名称 |
---|---|---|
BackLight | - | - |
SD CS | - | - |
D/C | GP7 | GP7 |
RESET | GP6 | GP6 |
LCD CS | GP5 | GP5 |
MOSI | GP3 | SPI0 TX |
MISO | - | - |
SCK | GP2 | SPI0 SCK |
GND | GND | GND |
3.3 | - | - |
Vin | 3.3V | 3V3(OUT) |
###プログラム
Helvetica-Bold-16.bdfはここからダウンロードし、CIRCUITPYドライブのルートにコピーします。
テキストの表示に絞っています。CPUの温度を、text_area2で表示しています。
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
from board import *
import busio
import terminalio
import displayio
from adafruit_display_text import label
from adafruit_bitmap_font import bitmap_font
from adafruit_st7789 import ST7789
import microcontroller
import time
displayio.release_displays() # Release any resources
spi = busio.SPI(clock=GP2, MOSI=GP3) # SPI0BUS PIN
display_bus = displayio.FourWire(
spi, command=GP7, chip_select=GP5, reset=GP6) # other PIN
display = ST7789(display_bus, width=240, height=320)
splash = displayio.Group() # Make the display context
display.show(splash)
# Draw a label=text
text_group = displayio.Group(scale=4, x=20, y=110)
text = "Temp"
font = bitmap_font.load_font("/Helvetica-Bold-16.bdf")
label.anchor_point = (0.0, 0.0)
label.anchored_position = (0, 0)
text_area = label.Label(font, text=text, color=0xFF00FF)
text_group.append(text_area) # Subgroup for text
splash.append(text_group)
text_group = displayio.Group(scale=2, x=100, y=10)
text = 'start'
text_area2 = label.Label(terminalio.FONT, text=text, color=0xFFFF00)
text_group.append(text_area2) # Subgroup for text
splash.append(text_group)
RANGE = 66
while True:
for i in range(1,RANGE):
text_area2.text = str(round(microcontroller.cpu.temperature,1)) + 'C'
text_area2.y = i
text_area2.x = int(i/2)
for i in range(1,RANGE):
text_area2.text = str(round(microcontroller.cpu.temperature,1)) + 'C'
text_area2.y = RANGE+i
text_area2.x = RANGE-int(i/2+RANGE/2)
for i in range(RANGE,1,-1):
text_area2.text = str(round(microcontroller.cpu.temperature,1)) + 'C'
text_area2.y = RANGE+i
text_area2.x = int(i/2-RANGE + RANGE/2)
for i in range(1,RANGE):
text_area2.text = str(round(microcontroller.cpu.temperature,1)) + 'C'
text_area2.y = RANGE-i
text_area2.x = int(i/2 - RANGE/2)
実行中の様子です。二つのテキスト領域はスプライト画面なので、独立しています。温度を表示している部分を、壁にぶつかるとコースを変えるような形で動かしています。