Skip to content

Commit 54eb946

Browse files
committed
add new guide contnets
1 parent 0eba9f2 commit 54eb946

File tree

5 files changed

+122
-0
lines changed

5 files changed

+122
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
# SPDX-FileCopyrightText: 2024 Brent Rubell, written for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
import time
5+
import board
6+
import displayio
7+
import terminalio
8+
import adafruit_imageload
9+
from adafruit_display_shapes.rect import Rect
10+
from adafruit_display_text import label
11+
from adafruit_pyportal import PyPortal
12+
13+
# Adafruit IO shared feed key
14+
IO_FEED_KEY = 'location'
15+
# Fetch the location every 5 seconds
16+
SLEEP_DELAY_SECONDS = 5
17+
# Set the backlight brightness, 0.0 (off) to 1.0 (max brightness)
18+
BACKLIGHT_BRIGHTNESS = 0.5
19+
# Location text and images
20+
LOCATION_IMAGES = { 'home': 'images/home.bmp', 'work': 'images/office.bmp', 'gym': 'images/workout.bmp', 'commute': 'images/subway.bmp' }
21+
22+
# Create the PyPortal object
23+
pyportal = PyPortal(status_neopixel=board.NEOPIXEL)
24+
25+
# Configure the PyPortal's display
26+
display = board.DISPLAY
27+
display.rotation = 0
28+
display.brightness = BACKLIGHT_BRIGHTNESS
29+
30+
# Display label and image coordinates
31+
TEXT_AREA_X = display.width // 14
32+
TEXT_AREA_Y = 20
33+
TEXT_AREA_LOCATION_X = display.width // 3
34+
TEXT_AREA_LOCATION_Y = display.height - 20
35+
IMAGE_SPRITE_X = (display.width // 3) - 10
36+
IMAGE_SPRITE_Y = display.height // 5
37+
38+
# Create a displayIO Group
39+
group = displayio.Group()
40+
41+
# Draw the background
42+
bg_group = displayio.Group()
43+
rect = Rect(0, 0, display.width, display.height, fill=0xFFFFFF)
44+
bg_group.append(rect)
45+
group.append(bg_group)
46+
47+
# Use the default font
48+
font = terminalio.FONT
49+
50+
# Draw a label for the header text
51+
text_area = label.Label(font, text="Where is Trevor?", color=0x000000, scale=3)
52+
text_area.x = TEXT_AREA_X
53+
text_area.y = TEXT_AREA_Y
54+
group.append(text_area)
55+
56+
# Draw a label for the location text
57+
text_area_location = label.Label(font, text="@ home", color=0x000000, scale=3)
58+
text_area_location.x = TEXT_AREA_LOCATION_X
59+
text_area_location.y = TEXT_AREA_LOCATION_Y
60+
group.append(text_area_location)
61+
62+
# Create a group for the icon only
63+
icon_group = displayio.Group()
64+
group.append(icon_group)
65+
66+
# Show the group
67+
display.root_group = group
68+
69+
def set_image(group, filename):
70+
"""Sets the image file for a given group for display."""
71+
print(f"Set image to {filename}")
72+
if group:
73+
group.pop()
74+
75+
if not filename:
76+
return # we're done, no icon desired
77+
try:
78+
if image_file:
79+
image_file.close
80+
except NameError:
81+
pass
82+
image_file = open(filename, "rb")
83+
image = displayio.OnDiskBitmap(image_file)
84+
image_sprite = displayio.TileGrid(image, pixel_shader=getattr(image, 'pixel_shader', displayio.ColorConverter()))
85+
image_sprite.x = IMAGE_SPRITE_X
86+
image_sprite.y = IMAGE_SPRITE_Y
87+
group.append(image_sprite)
88+
89+
prv_location = None
90+
while True:
91+
try:
92+
print("Fetching location data...")
93+
# Fetch the location data from Adafruit IO
94+
feed = pyportal.get_io_feed(IO_FEED_KEY)
95+
# If the location value is in the list of images
96+
if feed['last_value'] in LOCATION_IMAGES:
97+
# Check if the location has changed from the last time
98+
# we fetched the location
99+
if prv_location == feed['last_value']:
100+
print("Location has not changed!")
101+
else: # Location has changed
102+
print(f"Location: {feed['last_value']}")
103+
# Load the image for the current location
104+
set_image(icon_group, LOCATION_IMAGES[feed['last_value']])
105+
# Update the location text
106+
text_area_location.text=f"@ {feed['last_value']}"
107+
# Show the refreshed group
108+
display.root_group = group
109+
# Update the previous location
110+
prv_location = feed['last_value']
111+
else:
112+
print("Location not found in images!")
113+
# Update the location text
114+
text_area_location.text=f"Error: Unknown Value!"
115+
# Show the refreshed group
116+
display.root_group = group
117+
except Exception as e:
118+
print(f"Failed to fetch location data: {e}")
119+
120+
# Wait 5 minutes (300 seconds) before fetching the location feed again
121+
print("Sleeping, fetching the location again in 5 minutes!")
122+
time.sleep(SLEEP_DELAY_SECONDS * 60)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)