119 lines
3.2 KiB
Python
119 lines
3.2 KiB
Python
import time
|
|
|
|
import machine
|
|
import network
|
|
import ntptime
|
|
from interstate75 import DISPLAY_INTERSTATE75_128X128, Interstate75
|
|
|
|
SHADOW_OFFSET = 1
|
|
|
|
# Check and import the Network SSID and Password from secrets.py
|
|
try:
|
|
from secrets import WIFI_PASSWORD, WIFI_SSID
|
|
if WIFI_SSID == "":
|
|
raise ValueError("WIFI_SSID in 'secrets.py' is empty!")
|
|
if WIFI_PASSWORD == "":
|
|
raise ValueError("WIFI_PASSWORD in 'secrets.py' is empty!")
|
|
except ImportError:
|
|
raise ImportError("'secrets.py' is missing from your Plasma 2350 W!")
|
|
except ValueError as e:
|
|
print(e)
|
|
|
|
rtc = machine.RTC()
|
|
|
|
DAYS = ["Mon", "Tue", "Wed", "Thur", "Fri", "Sat", "Sun"]
|
|
|
|
# Enable the Wireless
|
|
wlan = network.WLAN(network.STA_IF)
|
|
wlan.active(True)
|
|
|
|
|
|
def network_connect(SSID, PSK):
|
|
|
|
# Number of attempts to make before timeout
|
|
max_wait = 5
|
|
|
|
# Sets the Wireless LED pulsing and attempts to connect to your local network.
|
|
print("connecting...")
|
|
wlan.config(pm=0xa11140) # Turn WiFi power saving off for some slow APs
|
|
wlan.connect(SSID, PSK)
|
|
|
|
while max_wait > 0:
|
|
if wlan.status() < 0 or wlan.status() >= 3:
|
|
break
|
|
max_wait -= 1
|
|
print('waiting for connection...')
|
|
time.sleep(1)
|
|
|
|
# Handle connection error. Switches the Warn LED on.
|
|
if wlan.status() != 3:
|
|
print("Unable to connect. Attempting connection again")
|
|
|
|
|
|
# Function to sync the Pico RTC using NTP
|
|
def sync_time():
|
|
|
|
try:
|
|
network_connect(WIFI_SSID, WIFI_PASSWORD)
|
|
except NameError:
|
|
print("Create secrets.py with your WiFi credentials")
|
|
|
|
if wlan.status() < 0 or wlan.status() >= 3:
|
|
try:
|
|
ntptime.settime()
|
|
except OSError:
|
|
print("Unable to sync with NTP server. Check network and try again.")
|
|
|
|
|
|
# Setup for the display
|
|
i75 = Interstate75(
|
|
display=DISPLAY_INTERSTATE75_128X128, stb_invert=False, panel_type=Interstate75.PANEL_GENERIC)
|
|
display = i75.display
|
|
|
|
WIDTH, HEIGHT = display.get_bounds()
|
|
|
|
# Pens
|
|
RED = display.create_pen(120, 0, 0)
|
|
WHITE = display.create_pen(255, 255, 255)
|
|
BLACK = display.create_pen(0, 0, 0)
|
|
|
|
sync_time()
|
|
|
|
while True:
|
|
|
|
current_t = rtc.datetime()
|
|
|
|
# Set the pen to Red and clear the screen.
|
|
display.set_pen(WHITE)
|
|
display.clear()
|
|
|
|
# Measures the length of the text to help us with centring later.
|
|
day_length = display.measure_text(DAYS[current_t[3]], 4)
|
|
date_length = display.measure_text(str(current_t[2]), 7)
|
|
|
|
# Red banner
|
|
display.set_pen(RED)
|
|
display.rectangle(0, 0, WIDTH, 30)
|
|
|
|
# Drop Shadow
|
|
display.set_font("bitmap6")
|
|
display.set_pen(BLACK)
|
|
|
|
display.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2) + SHADOW_OFFSET, 2 + SHADOW_OFFSET, WIDTH, 4)
|
|
|
|
display.set_font("bitmap8")
|
|
display.text(str(current_t[2]), (WIDTH // 2) - (date_length // 2) + SHADOW_OFFSET + 4, 55 + SHADOW_OFFSET, WIDTH, 7)
|
|
|
|
# Main Text
|
|
display.set_font("bitmap6")
|
|
display.set_pen(WHITE)
|
|
display.text(DAYS[current_t[3]], (WIDTH // 2) - (day_length // 2), 2, WIDTH, 4)
|
|
|
|
display.set_pen(RED)
|
|
display.set_font("bitmap8")
|
|
display.text(str(current_t[2]), (WIDTH // 2) - (date_length // 2) + 4, 55, WIDTH, 7)
|
|
|
|
display.set_pen(display.create_pen(0, 0, 0))
|
|
|
|
i75.update()
|