2022-07-12 18:33:46 +01:00
|
|
|
import WIFI_CONFIG
|
|
|
|
from network_manager import NetworkManager
|
|
|
|
import uasyncio
|
|
|
|
from urllib import urequest
|
|
|
|
from picographics import PicoGraphics, DISPLAY_PICO_EXPLORER
|
|
|
|
import time
|
|
|
|
import ujson
|
|
|
|
from pimoroni import RGBLED
|
|
|
|
|
|
|
|
"""
|
|
|
|
This Pico W example sets your Pico Explorer's screen to the current #cheerlights colour.
|
|
|
|
Find out more about Cheerlights at https://cheerlights.com/
|
|
|
|
If you wire up a four legged RGB LED to GP0, GP1 and GP2 (and the long leg to ground)
|
|
|
|
it will change the colour of that too!
|
|
|
|
"""
|
|
|
|
|
|
|
|
URL = "http://api.thingspeak.com/channels/1417/field/2/last.json"
|
|
|
|
UPDATE_INTERVAL = 120 # refresh interval in secs. Be nice to free APIs!
|
|
|
|
|
|
|
|
|
|
|
|
def status_handler(mode, status, ip):
|
|
|
|
# connect to the internets
|
|
|
|
display.set_pen(BLACK)
|
|
|
|
display.clear()
|
|
|
|
display.set_pen(WHITE)
|
|
|
|
display.text("Network: {}".format(WIFI_CONFIG.SSID), 10, 10, scale=2)
|
|
|
|
status_text = "Connecting..."
|
|
|
|
if status is not None:
|
|
|
|
if status:
|
|
|
|
status_text = "Connection successful!"
|
|
|
|
else:
|
|
|
|
status_text = "Connection failed!"
|
|
|
|
|
|
|
|
display.text(status_text, 10, 30, scale=2)
|
|
|
|
display.text("IP: {}".format(ip), 10, 60, scale=2)
|
|
|
|
display.update()
|
|
|
|
|
|
|
|
|
|
|
|
def hex_to_rgb(hex):
|
|
|
|
# converts a hex colour code into RGB
|
|
|
|
h = hex.lstrip('#')
|
2022-07-12 19:43:51 +01:00
|
|
|
r, g, b = (int(h[i:i + 2], 16) for i in (0, 2, 4))
|
2022-07-12 18:33:46 +01:00
|
|
|
return r, g, b
|
|
|
|
|
|
|
|
|
|
|
|
# set up wifi
|
2022-07-14 16:53:32 +01:00
|
|
|
network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler)
|
2022-07-12 18:33:46 +01:00
|
|
|
|
|
|
|
# set up the display
|
|
|
|
display = PicoGraphics(display=DISPLAY_PICO_EXPLORER)
|
|
|
|
display.set_backlight(1.0)
|
|
|
|
|
|
|
|
# some constants we'll use for drawing
|
|
|
|
WHITE = display.create_pen(255, 255, 255)
|
|
|
|
BLACK = display.create_pen(0, 0, 0)
|
|
|
|
|
|
|
|
WIDTH, HEIGHT = display.get_bounds()
|
|
|
|
display.set_font("bitmap8")
|
|
|
|
|
|
|
|
# set up an old school 4 pin RGB LED connected to GP0, GP1 and GP2
|
|
|
|
led = RGBLED(0, 1, 2, invert=False)
|
|
|
|
|
|
|
|
while True:
|
|
|
|
# connect to wifi
|
|
|
|
uasyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK))
|
2022-07-12 19:43:51 +01:00
|
|
|
|
2022-07-12 18:33:46 +01:00
|
|
|
# open the json file
|
|
|
|
print(f"Requesting URL: {URL}")
|
|
|
|
socket = urequest.urlopen(URL)
|
|
|
|
data = ujson.load(socket)
|
|
|
|
socket.close()
|
2022-07-12 19:43:51 +01:00
|
|
|
print("Data obtained!")
|
2022-07-12 18:33:46 +01:00
|
|
|
|
|
|
|
# extract hex colour from the data
|
|
|
|
hex = data['field2']
|
2022-07-12 19:43:51 +01:00
|
|
|
|
2022-07-12 18:33:46 +01:00
|
|
|
# and convert it to RGB
|
|
|
|
r, g, b = hex_to_rgb(hex)
|
|
|
|
|
|
|
|
# draw stuff on the screen
|
|
|
|
colour = display.create_pen(r, g, b)
|
|
|
|
display.set_pen(colour)
|
|
|
|
display.clear()
|
|
|
|
display.set_pen(BLACK)
|
|
|
|
display.text(hex, 10, 10, WIDTH - 10, scale=6)
|
|
|
|
display.text("Tweet a colour at #cheerlights to change!", 10, 130, WIDTH - 10, scale=3)
|
|
|
|
display.update()
|
|
|
|
print(f"Screen set to {hex}")
|
|
|
|
|
|
|
|
# light up RGB LED
|
|
|
|
led.set_rgb(r, g, b)
|
|
|
|
print(f"RGB LED set to {hex}")
|
2022-07-12 19:43:51 +01:00
|
|
|
|
2022-07-12 18:33:46 +01:00
|
|
|
# sleep
|
|
|
|
print(f"""Sleeping for {UPDATE_INTERVAL} seconds.
|
|
|
|
""")
|
|
|
|
time.sleep(UPDATE_INTERVAL)
|