8000 Add an extended version of st7789_280x240_simpletest.py · Issue #42 · adafruit/Adafruit_CircuitPython_ST7789 · GitHub
[go: up one dir, main page]

Skip to content

Add an extended version of st7789_280x240_simpletest.py #42

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
CrackXT opened this issue Apr 26, 2025 · 3 comments
Closed

Add an extended version of st7789_280x240_simpletest.py #42

CrackXT opened this issue Apr 26, 2025 · 3 comments
Assignees

Comments

@CrackXT
Copy link
CrackXT commented Apr 26, 2025

Hello Adafruit team,

I have extended the test code of st7789_280x240_simpletest.py.

Now the backlight setting and the offset correction of the ST7789 display driver at a resolution of 280x240 (1.69", Product ID: 5206) is included.

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

"""
This test will initialize the display using displayio, set display brighness and draw a solid green
background, a smaller purple rectangle, and some yellow text.
"""

import board
import displayio
import terminalio
from adafruit_display_text import label
from fourwire import FourWire

from adafruit_st7789 import ST7789

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

spi = board.SPI()
tft_cs = board.D20
tft_dc = board.D21
backlight = board.D6

display_bus = FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=board.D5)

#display = ST7789(display_bus, width=240, height=280, colstart=0, rowstart=20, rotation=0, backlight_pin=backlight)			# default setting for 1.69" with 0° rotation
display = ST7789(display_bus, width=280, height=240, colstart=0, rowstart=20, rotation=90, backlight_pin=backlight)			# default setting for 1.69" with 90° rotation
#display = ST7789(display_bus, width=240, height=280, colstart=0, rowstart=20, rotation=180, backlight_pin=backlight)		# default setting for 1.69" with 180° rotation
#display = ST7789(display_bus, width=280, height=240, colstart=0, rowstart=20, rotation=270, backlight_pin=backlight)		# default setting for 1.69" with 270° rotation

# set the backlight
# minimum value 0.001 (0.000 would be off), maximum value 1.000
display.brightness = 0.5

# Make the display context
splash = displayio.Group()
display.root_group = splash

#color_bitmap = displayio.Bitmap(240, 280, 1)			# default setting for 1.69" with 0° and 180° rotation
color_bitmap = displayio.Bitmap(280, 240, 1)			# default setting for 1.69" with 90° and 270° rotation
color_palette = displayio.Palette(1)
color_palette[0] = 0x00FF00  # Bright Green

bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)

# Draw a smaller inner rectangle
#inner_bitmap = displayio.Bitmap(200, 240, 1)			# default setting for 1.69" with 0° and 180° rotation
inner_bitmap = displayio.Bitmap(240, 200, 1)			# default setting for 1.69" with 90° and 270° rotation
inner_palette = displayio.Palette(1)
inner_palette[0] = 0xAA0088  # Purple
inner_sprite = displayio.TileGrid(inner_bitmap, pixel_shader=inner_palette, x=20, y=20)
splash.append(inner_sprite)

# Draw a label
#text_group = displayio.Group(scale=2, x=50, y=140)		# default setting for 1.69" with 0° and 180° rotation
text_group = displayio.Group(scale=3, x=37, y=120)		# default setting for 1.69" with 90° and 270° rotation
text = "Hello World!"
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFF00)
text_group.append(text_area)  # Subgroup for text scaling
splash.append(text_group)

while True:
    pass

The code was tested with a Waveshare display (SKU: 27057) and an Unexpected Maker FeatherS2.

PXL_20250426_214142896
PXL_20250426_214215669
PXL_20250426_214125253
PXL_20250426_214229871
PXL_20250426_214303211

Thank you for your work and that of the community!

With kind regards
CrackXT

@makermelissa
Copy link
Collaborator

Awesome. Thanks for sharing.
The only suggestion I have for improving it is to have the rotation be its own variable and the width and height adjust based on the rotation. Something like this:

rotation = 90
if rotation not in (0, 90, 180, 270)
    raise ValueError("Rotation must be be one of: 0, 90, 180, 270")
width = 280 if rotation % 180 else 240
height = 240 if rotation % 180 else 280
display = ST7789(display_bus, width=width, height=height, colstart=0, rowstart=20, rotation=rotation, backlight_pin=backlight)

Want to submit the code as a PR for using this as an additional example?

@CrackXT
Copy link
Author
CrackXT commented May 16, 2025

Hello makermelissa,

Sorry for the delay and late response from me and thanks for the food for thought to improve the code once again.

Here is the optimized version, please have a look at it, thank you.

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

"""
This test will initialize the display using displayio, set display brightness and draw a solid green
background, a smaller purple rectangle, and some yellow text. The test also has the option of
rotating the screen content.
"""

import board
import displayio
import terminalio
from adafruit_display_text import label
from fourwire import FourWire
from adafruit_st7789 import ST7789

# set the display rotation
rotation = 90
if rotation not in (0, 90, 180, 270):
    raise ValueError("The value of rotation must be one of: 0, 90, 180, 270")

# Display settings depending on the selected rotation
# first value default setting for 1.69" with 0° and 180° rotation
# second value default setting for 1.69" with 90° and 270° rotation
width = 240 if rotation in (0, 180) else 280
height = 280 if rotation in (0, 180) else 240
color_bitmap_x = 240 if rotation in (0, 180) else 280
color_bitmap_y = 280 if rotation in (0, 180) else 240
inner_bitmap_x = 200 if rotation in (0, 180) else 240
inner_bitmap_y = 240 if rotation in (0, 180) else 200
scale = 2 if rotation in (0, 180) else 3
x = 50 if rotation in (0, 180) else 37
y = 140 if rotation in (0, 180) else 120

# Release any resources currently in use for the displays
displayio.release_displays()
spi = board.SPI()
tft_cs = board.D20
tft_dc = board.D21
backlight = board.D6
display_bus = FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=board.D5)
display = ST7789(display_bus, width=width, height=height, colstart=0, rowstart=20, rotation=rotation, backlight_pin=backlight)

# set the backlight
# minimum value 0.001 (0.000 would be off), maximum value 1.000
display.brightness = 0.5

# Make the display context
splash = displayio.Group()
display.root_group = splash

# Draw background rectangle
color_bitmap = displayio.Bitmap(color_bitmap_x, color_bitmap_y, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0x00FF00  # Bright Green
bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)

# Draw a smaller inner rectangle
inner_bitmap = displayio.Bitmap(inner_bitmap_x, inner_bitmap_y, 1)
inner_palette = displayio.Palette(1)
inner_palette[0] = 0xAA0088  # Purple
inner_sprite = displayio.TileGrid(inner_bitmap, pixel_shader=inner_palette, x=20, y=20)
splash.append(inner_sprite)

# Draw a label
text_group = displayio.Group(scale=scale, x=x, y=y)
text = "Hello World!"
text_area = label.Label(terminalio.FONT, text=text, color=0xFFFF00)
text_group.append(text_area)  # Subgroup for text scaling
splash.append(text_group)

while True:
    pass

If you think the code is good enough, we would be happy to do a PR.

Thank you for your work and that of the community!

With kind regards
CrackXT

@makermelissa
Copy link
Collaborator

Looks great. Yes, please submit a PR.

CrackXT added a commit to CrackXT/Adafruit_CircuitPython_ST7789 that referenced this issue May 21, 2025
#Issue 
Add an extended version of st7789_280x240_simpletest.py adafruit#42
#Pull Request  
Enhanced compatibility adafruit#40
@CrackXT CrackXT closed this as completed May 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants
0