update to newst version
This commit is contained in:
parent
65122b9a53
commit
4928c3bbdb
File diff suppressed because it is too large
Load Diff
3039
PICO-8ROMMono.bdf
3039
PICO-8ROMMono.bdf
File diff suppressed because it is too large
Load Diff
160
code.py
160
code.py
|
@ -4,26 +4,33 @@ import gc
|
|||
import board
|
||||
import displayio
|
||||
import random
|
||||
import math
|
||||
from adafruit_bitmap_font import bitmap_font
|
||||
from adafruit_matrixportal.network import Network
|
||||
from adafruit_matrixportal.matrix import Matrix
|
||||
import adafruit_requests as requests
|
||||
|
||||
# statics
|
||||
SPEED = 6 # should be even
|
||||
SPEED = 24 # should be even
|
||||
|
||||
COLORS = [
|
||||
0x50FA7B,
|
||||
0xffb86c,
|
||||
0xf1fa8c,
|
||||
0xff5555,
|
||||
0xff79c6,
|
||||
0x8be9fd,
|
||||
]
|
||||
FONT = bitmap_font.load_font("/PICO-8ROMMono.bdf")
|
||||
0xFFB86C,
|
||||
0xF1FA8C,
|
||||
0xFF5555,
|
||||
0xFF79C6,
|
||||
0x8BE9FD,
|
||||
]
|
||||
FONT = bitmap_font.load_font("/Bm437_Paradise132_7x9-12.bdf")
|
||||
TEXTWIDTH = 7
|
||||
|
||||
tick = 0
|
||||
|
||||
|
||||
def random_color():
|
||||
return random.choice(COLORS)
|
||||
|
||||
|
||||
# Get wifi details and more from a secrets.py file
|
||||
try:
|
||||
from secrets import secrets
|
||||
|
@ -31,38 +38,50 @@ except ImportError:
|
|||
print("WiFi secrets are kept in secrets.py, please add them there!")
|
||||
raise
|
||||
|
||||
network = Network(debug=False, status_neopixel=board.NEOPIXEL,)
|
||||
network = Network(
|
||||
debug=False,
|
||||
status_neopixel=board.NEOPIXEL,
|
||||
)
|
||||
matrix = Matrix()
|
||||
display = matrix.display
|
||||
upper_text_content = "jacking"
|
||||
upper_text_content = " =^_^="
|
||||
upper_text = Label(
|
||||
FONT,
|
||||
text=upper_text_content,
|
||||
color=random_color(),
|
||||
)
|
||||
upper_text.y = 6
|
||||
upper_text.y = 2
|
||||
|
||||
middle_text_content = " in"
|
||||
decoration = Label(FONT, text="»»»»»»»»»»»»", color=random_color())
|
||||
decoration.y = 10
|
||||
|
||||
middle_text_content = "jacking"
|
||||
middle_text = Label(
|
||||
FONT,
|
||||
text=middle_text_content,
|
||||
color=random_color(),
|
||||
)
|
||||
middle_text.y = 17
|
||||
middle_text.y = 16
|
||||
|
||||
lower_text_content = "=^_^="
|
||||
lower_text_content = " in..."
|
||||
lower_text = Label(
|
||||
FONT,
|
||||
text=lower_text_content,
|
||||
color=random_color(),
|
||||
)
|
||||
lower_text.y = 28
|
||||
lower_text.y = 25
|
||||
|
||||
maingroup = displayio.Group()
|
||||
g = displayio.Group()
|
||||
g.append(upper_text)
|
||||
maingroup.append(decoration)
|
||||
g.append(middle_text)
|
||||
g.append(lower_text)
|
||||
display.show(g)
|
||||
maingroup.append(g)
|
||||
|
||||
display.brightness = 0.01
|
||||
display.auto_refresh = False
|
||||
display.show(maingroup)
|
||||
|
||||
daynames = {
|
||||
0: "monday",
|
||||
|
@ -74,13 +93,17 @@ daynames = {
|
|||
6: "sunday",
|
||||
}
|
||||
|
||||
def sliceForTextField(s, i, max_chars=8) -> str:
|
||||
|
||||
def sliceForTextField(s, i, max_chars=10) -> str:
|
||||
i = math.trunc(i)
|
||||
if len(s) < max_chars:
|
||||
return s
|
||||
return str(s[i % len(s):] + " " + s[: i % len(s)])[:max_chars]
|
||||
return str(s[i % len(s) :] + s[: i % len(s)])[:max_chars]
|
||||
|
||||
|
||||
def update_content():
|
||||
global middle_text_content, upper_text_content
|
||||
global middle_text_content, upper_text_content, tick
|
||||
tick = 0
|
||||
try:
|
||||
# set time from network
|
||||
network.get_local_time()
|
||||
|
@ -90,65 +113,96 @@ def update_content():
|
|||
# get unread rss feeds
|
||||
print("loading rss feeds")
|
||||
headers = {"X-Auth-Token": secrets["miniflux_token"]}
|
||||
rssresponse = requests.get(secrets["miniflux_url"] + "/entries?status=unread&direction=desc", headers=headers,)
|
||||
rssresponse = requests.get(
|
||||
secrets["miniflux_url"] + "/entries?status=unread&direction=desc",
|
||||
headers=headers,
|
||||
)
|
||||
entries = rssresponse.json()["entries"]
|
||||
rssresponse.close()
|
||||
upper_text_content = str(len(entries)) + " unread entries"
|
||||
upper_text_content = str(len(entries)) + " unread entries "
|
||||
for e in entries:
|
||||
gc.collect()
|
||||
upper_text_content += " | " + e["feed"]["title"]
|
||||
upper_text_content += "-" + e["title"]
|
||||
upper_text_content += "|" + e["feed"]["title"]
|
||||
upper_text_content += "-" + e["title"] + "| "
|
||||
gc.collect()
|
||||
except RuntimeError as e:
|
||||
print("failed loading unread")
|
||||
gc.collect()
|
||||
try:
|
||||
weatherresponse = requests.get("https://wttr.in/?format='%l:+%C+%t+%w+%h+humidty'")
|
||||
middle_text_content = weatherresponse.text.replace("\n", " ").replace("'", "")
|
||||
weatherresponse = requests.get(
|
||||
"https://wttr.in/?format='%l:+%C+precipitation+%p+%t+%w+humidity+%h+dawn:+%D+dusk:+%d+uv:+%u'"
|
||||
)
|
||||
middle_text_content = (
|
||||
weatherresponse.text.replace("\n", " ").replace("'", "") + " "
|
||||
)
|
||||
weatherresponse.close()
|
||||
except RuntimeError as e:
|
||||
print("failed getting weather")
|
||||
|
||||
|
||||
def update_time():
|
||||
global lower_text_content
|
||||
now = time.localtime()
|
||||
lower_text_content = "{dayname} {day}.{month}.{year} {hours}:{minutes}:{seconds}".format(
|
||||
hours=now[3],
|
||||
minutes=now[4],
|
||||
seconds=now[5],
|
||||
dayname=daynames[now[6]],
|
||||
day=now[2],
|
||||
month=now[1],
|
||||
year=now[0],
|
||||
lower_text_content = (
|
||||
"{dayname} {day}.{month:02d}.{year} {hours:02d}:{minutes:02d}:{seconds:02d}".format(
|
||||
hours= now[3],
|
||||
minutes=now[4],
|
||||
seconds=now[5],
|
||||
dayname=daynames[now[6]],
|
||||
day=now[2],
|
||||
month=now[1],
|
||||
year=now[0],
|
||||
)
|
||||
+ " "
|
||||
)
|
||||
|
||||
def update(tick):
|
||||
# do this once about every hour
|
||||
if tick % (360 * SPEED) == 0:
|
||||
update_content()
|
||||
# do this every second
|
||||
if tick % SPEED == 0:
|
||||
update_time()
|
||||
global display
|
||||
|
||||
if tick % (10 * SPEED) == 0:
|
||||
upper_text.color = random_color()
|
||||
middle_text.color = random_color()
|
||||
lower_text.color = random_color()
|
||||
lower_text.text = sliceForTextField(
|
||||
lower_text_content,
|
||||
tick,
|
||||
decoration.color = random_color()
|
||||
# do this once about every half hour
|
||||
if tick % (1800 * SPEED) == 0:
|
||||
update_content()
|
||||
|
||||
# do this every new letter
|
||||
offset = 0 - tick % TEXTWIDTH
|
||||
if offset == 0:
|
||||
texttick = tick / TEXTWIDTH
|
||||
update_time()
|
||||
lower_text.text = sliceForTextField(
|
||||
lower_text_content,
|
||||
texttick,
|
||||
)
|
||||
middle_text.text = sliceForTextField(
|
||||
middle_text_content,
|
||||
tick,
|
||||
)
|
||||
upper_text.text = sliceForTextField(
|
||||
upper_text_content,
|
||||
tick,
|
||||
|
||||
middle_text.text = sliceForTextField(
|
||||
middle_text_content,
|
||||
texttick,
|
||||
)
|
||||
|
||||
upper_text.text = sliceForTextField(
|
||||
upper_text_content,
|
||||
texttick,
|
||||
)
|
||||
|
||||
g.x = offset
|
||||
decoration.x = -1 * offset - TEXTWIDTH * 2
|
||||
display.refresh(
|
||||
minimum_frames_per_second=0,
|
||||
target_frames_per_second=SPEED,
|
||||
)
|
||||
|
||||
|
||||
|
||||
display.refresh(
|
||||
minimum_frames_per_second=0,
|
||||
target_frames_per_second=SPEED,
|
||||
)
|
||||
network.connect()
|
||||
i = 0
|
||||
|
||||
while True:
|
||||
update(i)
|
||||
time.sleep(1 / SPEED)
|
||||
i += 1
|
||||
update(tick)
|
||||
tick += 1
|
Loading…
Reference in New Issue