pimoroni-pico/micropython/examples/inky_frame/inky_frame_rtc_demo.py

89 wiersze
3.0 KiB
Python

import time
import uasyncio
import WIFI_CONFIG
import inky_frame
from network_manager import NetworkManager
# from picographics import PicoGraphics, DISPLAY_INKY_FRAME as DISPLAY # 5.7"
# from picographics import PicoGraphics, DISPLAY_INKY_FRAME_4 as DISPLAY # 4.0"
from picographics import PicoGraphics, DISPLAY_INKY_FRAME_7 as DISPLAY # 7.3"
# Set tz_offset to be the number of hours off of UTC for your local zone.
# Examples: tz_offset = -7 # Pacific time (PST)
# tz_offset = 1 # CEST (Paris)
tz_offset = 0
tz_seconds = tz_offset * 3600
# Sync the Inky (always on) RTC to the Pico W so that "time.localtime()" works.
inky_frame.pcf_to_pico_rtc()
# Avoid running code unless we've been triggered by an event
# Keeps this example from locking up Thonny when we want to tweak the code
if inky_frame.woken_by_rtc() or inky_frame.woken_by_button():
graphics = PicoGraphics(DISPLAY)
WIDTH, HEIGHT = graphics.get_bounds()
graphics.set_pen(1)
graphics.clear()
# Look, just because this is an RTC demo,
# doesn't mean we can't make it rainbow.
for x in range(WIDTH):
h = x / WIDTH
p = graphics.create_pen_hsv(h, 1.0, 1.0)
graphics.set_pen(p)
graphics.line(x, 0, x, HEIGHT)
graphics.set_pen(0)
graphics.rectangle(0, 0, WIDTH, 14)
graphics.set_pen(1)
graphics.text("Inky Frame", 1, 0)
graphics.set_pen(0)
def status_handler(mode, status, ip):
print(mode, status, ip)
year, month, day, hour, minute, second, dow, _ = time.localtime(time.time() + tz_seconds)
# Connect to the network and get the time if it's not set
if year < 2023:
connected = False
network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler, client_timeout=60)
t_start = time.time()
try:
uasyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK))
connected = True
except RuntimeError:
pass
t_end = time.time()
if connected:
inky_frame.set_time()
graphics.text("Setting time from network...", 0, 40)
graphics.text(f"Connection took: {t_end-t_start}s", 0, 60)
else:
graphics.text("Failed to connect!", 0, 40)
# Display the date and time
year, month, day, hour, minute, second, dow, _ = time.localtime(time.time() + tz_seconds)
date_time = f"{year:04}/{month:02}/{day:02} {hour:02}:{minute:02}:{second:02}"
graphics.set_font("bitmap8")
text_scale = 8 if WIDTH == 800 else 6
text_height = 8 * text_scale
offset_left = (WIDTH - graphics.measure_text(date_time, scale=text_scale)) // 2
offset_top = (HEIGHT - text_height) // 2
graphics.set_pen(graphics.create_pen(50, 50, 50))
graphics.text(date_time, offset_left + 2, offset_top + 2, scale=text_scale)
graphics.set_pen(1)
graphics.text(date_time, offset_left, offset_top, scale=text_scale)
graphics.update()
inky_frame.sleep_for(2)