Skip to content

Commit 3ae2370

Browse files
committed
Added pyportal remote project
1 parent 3ed8e41 commit 3ae2370

File tree

4 files changed

+223
-0
lines changed

4 files changed

+223
-0
lines changed

PyPortal_Remote/code.py

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
# SPDX-FileCopyrightText: 2019 ladyada for Adafruit Industries
2+
# SPDX-License-Identifier: MIT
3+
4+
import time
5+
import board
6+
import busio
7+
from digitalio import DigitalInOut
8+
import neopixel
9+
from adafruit_esp32spi import adafruit_esp32spi
10+
from adafruit_esp32spi import adafruit_esp32spi_wifimanager
11+
import displayio
12+
import math
13+
import adafruit_touchscreen
14+
import adafruit_imageload
15+
16+
#board.DISPLAY.rotation=0
17+
PURPLE = 0x64337E
18+
19+
ts = adafruit_touchscreen.Touchscreen(
20+
board.TOUCH_XL,
21+
board.TOUCH_XR,
22+
board.TOUCH_YD,
23+
board.TOUCH_YU,
24+
calibration=((5200, 59000), (5800, 57000)),
25+
size=(320, 240),
26+
)
27+
28+
# Get wifi details and more from a secrets.py file
29+
try:
30+
from secrets import secrets
31+
except ImportError:
32+
print("WiFi secrets are kept in secrets.py, please add them there!")
33+
raise
34+
35+
# If you are using a board with pre-defined ESP32 Pins:
36+
esp32_cs = DigitalInOut(board.ESP_CS)
37+
esp32_ready = DigitalInOut(board.ESP_BUSY)
38+
esp32_reset = DigitalInOut(board.ESP_RESET)
39+
40+
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
41+
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
42+
43+
status_light = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.2)
44+
45+
wifi = adafruit_esp32spi_wifimanager.ESPSPI_WiFiManager(esp, secrets, status_light)
46+
47+
keys = [
48+
"Home",
49+
"Rev",
50+
"Fwd",
51+
"Play",
52+
"Select",
53+
"Left",
54+
"Right",
55+
"Down",
56+
"Up",
57+
"Back",
58+
"InstantReplay",
59+
"Info",
60+
"Backspace",
61+
"Search",
62+
"Enter",
63+
"FindRemote",
64+
]
65+
66+
# Keys that only work on smart TVs with built-in Rokus
67+
rokutvkeys = [
68+
"VolumeDown",
69+
"VolumeMute",
70+
"VolumeUp",
71+
"PowerOff",
72+
"ChannelUp",
73+
"ChannelDown",
74+
]
75+
76+
77+
def getchannels():
78+
try:
79+
print("Getting channels. Usually takes around 10 seconds...", end="")
80+
response = wifi.get("http://192.168.1.3:8060/query/apps")
81+
channels = {}
82+
for i in response.text.split("<app")[2:]:
83+
a = i.split("=")
84+
chan_id = a[1].split('"')[1]
85+
name = a[-1].split(">")[1].split("<")[0]
86+
channels[name] = chan_id
87+
response.close()
88+
return channels
89+
except (ValueError, RuntimeError) as e:
90+
print("Failed to get data\n", e)
91+
wifi.reset()
92+
return
93+
response = None
94+
95+
96+
def sendkey(key):
97+
try:
98+
print("Sending key: {}...".format(key), end="")
99+
response = wifi.post("http://192.168.1.3:8060/keypress/{}".format(key))
100+
if response:
101+
response.close()
102+
print("OK")
103+
except (ValueError, RuntimeError) as e:
104+
print("Failed to get data\n", e)
105+
wifi.reset()
106+
return
107+
response = None
108+
109+
110+
def sendletter(letter):
111+
try:
112+
print("Sending letter: {}...".format(letter), end="")
113+
response = wifi.post("http://192.168.1.3:8060/keypress/lit_{}".format(letter))
114+
if response:
115+
response.close()
116+
print("OK")
117+
except (ValueError, RuntimeError) as e:
118+
print("Failed to get data\n", e)
119+
wifi.reset()
120+
return
121+
response = None
122+
123+
124+
def openchannel(channel):
125+
try:
126+
print("Opening channel: {}...".format(channel), end="")
127+
response = wifi.post("http://192.168.1.3:8060/launch/{}".format(channel))
128+
if response:
129+
response.close()
130+
print("OK")
131+
response = None
132+
except (ValueError, RuntimeError) as e:
133+
print("Probably worked")
134+
wifi.reset()
135+
response = None
136+
137+
def switchpage(tup):
138+
p_num = tup[0]
139+
tile_grid = tup[1]
140+
page = pages[p_num-1]
141+
page_vals = pages_vals[p_num-1]
142+
my_display_group[-1] = tile_grid
143+
return page, page_vals
144+
145+
channels = getchannels()
146+
147+
148+
my_display_group = displayio.Group(max_size=25)
149+
150+
image_1, palette_1 = adafruit_imageload.load(
151+
"images/page_1.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette
152+
)
153+
tile_grid_1 = displayio.TileGrid(image_1, pixel_shader=palette_1)
154+
my_display_group.append(tile_grid_1)
155+
156+
image_2, palette_2 = adafruit_imageload.load(
157+
"images/page_2.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette
158+
)
159+
tile_grid_2 = displayio.TileGrid(image_2, pixel_shader=palette_2)
160+
161+
image_3, palette_3 = adafruit_imageload.load(
162+
"images/page_3.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette
163+
)
164+
tile_grid_3 = displayio.TileGrid(image_3, pixel_shader=palette_3)
165+
166+
# Page 1
167+
page_1 = [sendkey, sendkey, sendkey,
168+
sendkey, sendkey, sendkey,
169+
sendkey, sendkey, sendkey,
170+
sendkey, sendkey, switchpage]
171+
172+
page_1_vals = ["Back", "Up", "Home",
173+
"Left", "Select", "Right",
174+
"Search", "Down", "Info",
175+
"Rev", "Play", (2, tile_grid_2)]
176+
177+
# Page 2
178+
page_2 = [openchannel, openchannel, openchannel,
179+
openchannel, openchannel, openchannel,
180+
openchannel, openchannel, openchannel,
181+
switchpage, sendkey, switchpage]
182+
183+
page_2_vals = [14362, 2285, 13,
184+
12, 8378, 837,
185+
38820, 47389, 7767,
186+
(1, tile_grid_1), "Home", (3, tile_grid_3)]
187+
188+
page_3 = [None, None, None,
189+
sendkey, None, sendkey,
190+
sendkey, sendkey, sendkey,
191+
switchpage, sendkey, sendkey]
192+
193+
page_3_vals = [None, None, None,
194+
"Search", None, "Info",
195+
"Rev", "Play", "Fwd",
196+
(2, tile_grid_2), "Back", "Home"]
197+
198+
pages = [page_1, page_2, page_3]
199+
pages_vals = [page_1_vals, page_2_vals, page_3_vals]
200+
201+
page = page_1
202+
page_vals = page_1_vals
203+
204+
board.DISPLAY.show(my_display_group)
205+
print("READY")
206+
207+
208+
last_index = 0
209+
while True:
210+
p = ts.touch_point
211+
if p:
212+
x = math.floor(p[0]/80)
213+
y = abs(math.floor(p[1]/80) - 2)
214+
index = 3*x + y
215+
if last_index == index:
216+
if page[index]:
217+
if page[index] == switchpage:
218+
page, page_vals = switchpage(page_vals[index])
219+
else:
220+
page[index](page_vals[index])
221+
time.sleep(0.1)
222+
223+
last_index = index

PyPortal_Remote/images/page_1.bmp

37.6 KB
Binary file not shown.

PyPortal_Remote/images/page_2.bmp

75.9 KB
Binary file not shown.

PyPortal_Remote/images/page_3.bmp

37.6 KB
Binary file not shown.

0 commit comments

Comments
 (0)