161 lines
4.8 KiB
Python
161 lines
4.8 KiB
Python
import gc
|
|
import time
|
|
from machine import reset
|
|
import inky_helper as ih
|
|
|
|
# Uncomment the line for your Inky Frame display size
|
|
from picographics import PicoGraphics, DISPLAY_INKY_FRAME_4 as DISPLAY # 4.0"
|
|
# from picographics import PicoGraphics, DISPLAY_INKY_FRAME as DISPLAY # 5.7"
|
|
|
|
# Create a secrets.py with your Wifi details to be able to get the time
|
|
#
|
|
# secrets.py should contain:
|
|
# WIFI_SSID = "Your WiFi SSID"
|
|
# WIFI_PASSWORD = "Your WiFi password"
|
|
|
|
# A short delay to give USB chance to initialise
|
|
time.sleep(0.5)
|
|
|
|
# Setup for the display.
|
|
graphics = PicoGraphics(DISPLAY)
|
|
WIDTH, HEIGHT = graphics.get_bounds()
|
|
graphics.set_font("bitmap8")
|
|
|
|
|
|
def launcher():
|
|
|
|
# Apply an offset for the Inky Frame 5.7".
|
|
if HEIGHT == 448:
|
|
y_offset = 20
|
|
else:
|
|
y_offset = 0
|
|
|
|
# Draws the menu
|
|
graphics.set_pen(1)
|
|
graphics.clear()
|
|
graphics.set_pen(0)
|
|
|
|
graphics.set_pen(5)
|
|
graphics.rectangle(0, 0, WIDTH, 50)
|
|
graphics.set_pen(0)
|
|
len = graphics.measure_text("Launcher", 4) // 2
|
|
graphics.text("Launcher", (WIDTH // 2 - len), 10, WIDTH, 4)
|
|
|
|
graphics.set_pen(4)
|
|
graphics.rectangle(30, HEIGHT - (340 + y_offset), WIDTH - 100, 50)
|
|
graphics.set_pen(1)
|
|
graphics.text("A. NASA Picture of the Day", 35, HEIGHT - (325 + y_offset), 600, 3)
|
|
|
|
graphics.set_pen(6)
|
|
graphics.rectangle(30, HEIGHT - (280 + y_offset), WIDTH - 150, 50)
|
|
graphics.set_pen(1)
|
|
graphics.text("B. Word Clock", 35, HEIGHT - (265 + y_offset), 600, 3)
|
|
|
|
graphics.set_pen(2)
|
|
graphics.rectangle(30, HEIGHT - (220 + y_offset), WIDTH - 200, 50)
|
|
graphics.set_pen(1)
|
|
graphics.text("C. Daily Activity", 35, HEIGHT - (205 + y_offset), 600, 3)
|
|
|
|
graphics.set_pen(3)
|
|
graphics.rectangle(30, HEIGHT - (160 + y_offset), WIDTH - 250, 50)
|
|
graphics.set_pen(1)
|
|
graphics.text("D. Headlines", 35, HEIGHT - (145 + y_offset), 600, 3)
|
|
|
|
graphics.set_pen(0)
|
|
graphics.rectangle(30, HEIGHT - (100 + y_offset), WIDTH - 300, 50)
|
|
graphics.set_pen(1)
|
|
graphics.text("E. Random Joke", 35, HEIGHT - (85 + y_offset), 600, 3)
|
|
|
|
graphics.set_pen(7)
|
|
graphics.rectangle(WIDTH - 100, HEIGHT - (340 + y_offset), 70, 50)
|
|
graphics.rectangle(WIDTH - 150, HEIGHT - (280 + y_offset), 120, 50)
|
|
graphics.rectangle(WIDTH - 200, HEIGHT - (220 + y_offset), 170, 50)
|
|
graphics.rectangle(WIDTH - 250, HEIGHT - (160 + y_offset), 220, 50)
|
|
graphics.rectangle(WIDTH - 300, HEIGHT - (100 + y_offset), 270, 50)
|
|
|
|
graphics.set_pen(0)
|
|
graphics.text("Hold A + E, then press Reset, to return to the Launcher", 65, HEIGHT - 30, 600, 2)
|
|
|
|
ih.led_warn.on()
|
|
graphics.update()
|
|
ih.led_warn.off()
|
|
|
|
# Now we've drawn the menu to the screen, we wait here for the user to select an app.
|
|
# Then once an app is selected, we set that as the current app and reset the device and load into it.
|
|
|
|
# You can replace any of the included examples with one of your own,
|
|
# just replace the name of the app in the line "ih.update_last_app("nasa_apod")"
|
|
|
|
while True:
|
|
if ih.inky_frame.button_a.read():
|
|
ih.inky_frame.button_a.led_on()
|
|
ih.update_state("nasa_apod")
|
|
time.sleep(0.5)
|
|
reset()
|
|
if ih.inky_frame.button_b.read():
|
|
ih.inky_frame.button_b.led_on()
|
|
ih.update_state("word_clock")
|
|
time.sleep(0.5)
|
|
reset()
|
|
if ih.inky_frame.button_c.read():
|
|
ih.inky_frame.button_c.led_on()
|
|
ih.update_state("daily_activity")
|
|
time.sleep(0.5)
|
|
reset()
|
|
if ih.inky_frame.button_d.read():
|
|
ih.inky_frame.button_d.led_on()
|
|
ih.update_state("news_headlines")
|
|
time.sleep(0.5)
|
|
reset()
|
|
if ih.inky_frame.button_e.read():
|
|
ih.inky_frame.button_e.led_on()
|
|
ih.update_state("random_joke")
|
|
time.sleep(0.5)
|
|
reset()
|
|
|
|
|
|
# Turn any LEDs off that may still be on from last run.
|
|
ih.clear_button_leds()
|
|
ih.led_warn.off()
|
|
|
|
if ih.inky_frame.button_a.read() and ih.inky_frame.button_e.read():
|
|
launcher()
|
|
|
|
ih.clear_button_leds()
|
|
|
|
if ih.file_exists("state.json"):
|
|
# Loads the JSON and launches the app
|
|
ih.load_state()
|
|
ih.launch_app(ih.state['run'])
|
|
|
|
# Passes the the graphics object from the launcher to the app
|
|
ih.app.graphics = graphics
|
|
ih.app.WIDTH = WIDTH
|
|
ih.app.HEIGHT = HEIGHT
|
|
|
|
else:
|
|
launcher()
|
|
|
|
try:
|
|
from secrets import WIFI_SSID, WIFI_PASSWORD
|
|
ih.network_connect(WIFI_SSID, WIFI_PASSWORD)
|
|
except ImportError:
|
|
print("Create secrets.py with your WiFi credentials")
|
|
|
|
# Get some memory back, we really need it!
|
|
gc.collect()
|
|
|
|
# The main loop executes the update and draw function from the imported app,
|
|
# and then goes to sleep ZzzzZZz
|
|
|
|
file = ih.file_exists("state.json")
|
|
|
|
print(file)
|
|
|
|
while True:
|
|
ih.app.update()
|
|
ih.led_warn.on()
|
|
ih.app.draw()
|
|
ih.led_warn.off()
|
|
ih.sleep(ih.app.UPDATE_INTERVAL)
|