Skip to content

Commit a596a55

Browse files
committed
newxie multi display
adding two demos for using four newxie displays together with raspberry pi
1 parent fbf893b commit a596a55

File tree

2 files changed

+167
-0
lines changed

2 files changed

+167
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
import time
6+
from threading import Thread
7+
from PIL import Image, ImageDraw, ImageFont
8+
import digitalio
9+
import board
10+
import busio
11+
from adafruit_rgb_display import st7789
12+
13+
BAUDRATE = 10000000
14+
WIDTH = 135
15+
HEIGHT = 240
16+
17+
cs_pin0 = digitalio.DigitalInOut(board.D23)
18+
dc_pin0 = digitalio.DigitalInOut(board.D25)
19+
20+
cs_pin1 = digitalio.DigitalInOut(board.CE1)
21+
dc_pin1 = digitalio.DigitalInOut(board.D24)
22+
23+
cs_pin2 = digitalio.DigitalInOut(board.D16)
24+
dc_pin2 = digitalio.DigitalInOut(board.D26)
25+
26+
cs_pin3 = digitalio.DigitalInOut(board.D17)
27+
dc_pin3 = digitalio.DigitalInOut(board.D27)
28+
29+
spi = board.SPI()
30+
spi1 = busio.SPI(clock=board.D21, MOSI=board.D20)
31+
32+
disp0 = st7789.ST7789(spi, rotation=180, width=WIDTH, height=HEIGHT,
33+
x_offset=53, y_offset=40, cs=cs_pin0, dc=dc_pin0, baudrate=BAUDRATE)
34+
disp1 = st7789.ST7789(spi, rotation=180, width=WIDTH, height=HEIGHT,
35+
x_offset=53, y_offset=40, cs=cs_pin1, dc=dc_pin1, baudrate=BAUDRATE)
36+
disp2 = st7789.ST7789(spi1, rotation=180, width=WIDTH, height=HEIGHT,
37+
x_offset=53, y_offset=40, cs=cs_pin2, dc=dc_pin2, baudrate=BAUDRATE)
38+
disp3 = st7789.ST7789(spi1, rotation=180, width=WIDTH, height=HEIGHT,
39+
x_offset=53, y_offset=40, cs=cs_pin3, dc=dc_pin3, baudrate=BAUDRATE)
40+
41+
def update_digit_display(disp, get_digit_func):
42+
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 80)
43+
while True:
44+
digit = get_digit_func()
45+
image = Image.new("RGB", (WIDTH, HEIGHT), "black")
46+
draw = ImageDraw.Draw(image)
47+
48+
text = str(digit)
49+
text_width, text_height = draw.textsize(text, font=font)
50+
text_x = (WIDTH - text_width) // 2
51+
text_y = (HEIGHT - text_height) // 2
52+
draw.text((text_x, text_y), text, font=font, fill="white")
53+
54+
disp.image(image)
55+
time.sleep(1)
56+
57+
def get_hour_tens():
58+
current_time = time.localtime()
59+
hour = current_time.tm_hour % 12 or 12
60+
return hour // 10
61+
62+
def get_hour_ones():
63+
current_time = time.localtime()
64+
hour = current_time.tm_hour % 12 or 12
65+
return hour % 10
66+
67+
def get_minute_tens():
68+
current_time = time.localtime()
69+
minute = current_time.tm_min
70+
return minute // 10
71+
72+
def get_minute_ones():
73+
current_time = time.localtime()
74+
minute = current_time.tm_min
75+
return minute % 10
76+
77+
Thread(target=update_digit_display, args=(disp0, get_hour_tens)).start()
78+
Thread(target=update_digit_display, args=(disp1, get_hour_ones)).start()
79+
Thread(target=update_digit_display, args=(disp2, get_minute_tens)).start()
80+
Thread(target=update_digit_display, args=(disp3, get_minute_ones)).start()
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
import time
6+
from threading import Thread, Lock
7+
from PIL import Image, ImageDraw, ImageFont
8+
import digitalio
9+
import board
10+
import busio
11+
from adafruit_rgb_display import st7789
12+
13+
BAUDRATE = 25000000
14+
WIDTH = 135
15+
HEIGHT = 240
16+
17+
cs_pin0 = digitalio.DigitalInOut(board.D23)
18+
dc_pin0 = digitalio.DigitalInOut(board.D25)
19+
20+
cs_pin1 = digitalio.DigitalInOut(board.CE1)
21+
dc_pin1 = digitalio.DigitalInOut(board.D24)
22+
23+
cs_pin2 = digitalio.DigitalInOut(board.D16)
24+
dc_pin2 = digitalio.DigitalInOut(board.D26)
25+
26+
cs_pin3 = digitalio.DigitalInOut(board.D17)
27+
dc_pin3 = digitalio.DigitalInOut(board.D27)
28+
29+
spi = board.SPI()
30+
spi1 = busio.SPI(clock=board.D21, MOSI=board.D20)
31+
32+
disp0 = st7789.ST7789(spi, rotation=180, width=WIDTH, height=HEIGHT,
33+
x_offset=53, y_offset=40, cs=cs_pin0, dc=dc_pin0, baudrate=BAUDRATE)
34+
disp1 = st7789.ST7789(spi, rotation=180, width=WIDTH, height=HEIGHT,
35+
x_offset=53, y_offset=40, cs=cs_pin1, dc=dc_pin1, baudrate=BAUDRATE)
36+
disp2 = st7789.ST7789(spi1, rotation=180, width=WIDTH, height=HEIGHT,
37+
x_offset=53, y_offset=40, cs=cs_pin2, dc=dc_pin2, baudrate=BAUDRATE)
38+
disp3 = st7789.ST7789(spi1, rotation=180, width=WIDTH, height=HEIGHT,
39+
x_offset=53, y_offset=40, cs=cs_pin3, dc=dc_pin3, baudrate=BAUDRATE)
40+
41+
def update_digit_display(disp, get_digit_func):
42+
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 80)
43+
while True:
44+
digit = get_digit_func()
45+
image = Image.new("RGB", (WIDTH, HEIGHT), "black")
46+
draw = ImageDraw.Draw(image)
47+
48+
text = str(digit)
49+
text_width, text_height = draw.textsize(text, font=font)
50+
text_x = (WIDTH - text_width) // 2
51+
text_y = (HEIGHT - text_height) // 2
52+
draw.text((text_x, text_y), text, font=font, fill="white")
53+
54+
disp.image(image)
55+
time.sleep(0.1)
56+
57+
counter = 0
58+
counter_lock = Lock()
59+
# pylint: disable=global-statement
60+
def increment_counter():
61+
global counter
62+
while True:
63+
with counter_lock:
64+
counter = (counter + 1) % 10000
65+
time.sleep(0.01)
66+
67+
def digit_0():
68+
with counter_lock:
69+
return (counter // 1000) % 10
70+
71+
def digit_1():
72+
with counter_lock:
73+
return (counter // 100) % 10
74+
75+
def digit_2():
76+
with counter_lock:
77+
return (counter // 10) % 10
78+
79+
def digit_3():
80+
with counter_lock:
81+
return counter % 10
82+
83+
Thread(target=increment_counter).start()
84+
Thread(target=update_digit_display, args=(disp0, digit_0)).start()
85+
Thread(target=update_digit_display, args=(disp1, digit_1)).start()
86+
Thread(target=update_digit_display, args=(disp2, digit_2)).start()
87+
Thread(target=update_digit_display, args=(disp3, digit_3)).start()

0 commit comments

Comments
 (0)