import WIFI_CONFIG from network_manager import NetworkManager import uasyncio import urequests import time import plasma from plasma import plasma_stick from machine import Pin """ This Plasma Stick example sets your LED strip to the current #cheerlights colour. Find out more about the Cheerlights API at https://cheerlights.com/ """ URL = "http://api.thingspeak.com/channels/1417/field/2/last.json" UPDATE_INTERVAL = 120 # refresh interval in secs. Be nice to free APIs! # Set how many LEDs you have NUM_LEDS = 50 # Set the brightness BRIGHTNESS = 0.5 def status_handler(mode, status, ip): # reports wifi connection status print(mode, status, ip) print("Connecting to wifi...") # flash while connecting for i in range(NUM_LEDS): led_strip.set_hsv(i, 0, 0, BRIGHTNESS) time.sleep(0.02) for i in range(NUM_LEDS): led_strip.set_hsv(i, 0, 0, 0) if status is not None: if status: print("Wifi connection successful!") else: print("Wifi connection failed!") # if no wifi connection, you get spooky rainbows. Bwahahaha! spooky_rainbows() def spooky_rainbows(): print("SPOOKY RAINBOWS!") HUE_START = 30 # orange HUE_END = 140 # green SPEED = 0.3 # bigger = faster (harder, stronger) distance = 0.0 direction = SPEED while True: for i in range(NUM_LEDS): # generate a triangle wave that moves up and down the LEDs j = max(0, 1 - abs(distance - i) / (NUM_LEDS / 3)) hue = HUE_START + j * (HUE_END - HUE_START) led_strip.set_hsv(i, hue / 360, 1.0, BRIGHTNESS) # reverse direction at the end of colour segment to avoid an abrupt change distance += direction if distance > NUM_LEDS: direction = - SPEED if distance < 0: direction = SPEED time.sleep(0.01) def hex_to_rgb(hex): # converts a hex colour code into RGB h = hex.lstrip("#") r, g, b = (int(h[i:i + 2], 16) for i in (0, 2, 4)) return r, g, b # set up the Pico W's onboard LED pico_led = Pin("LED", Pin.OUT) # set up the WS2812 / NeoPixelâ„¢ LEDs led_strip = plasma.WS2812(NUM_LEDS, 0, 0, plasma_stick.DAT, color_order=plasma.COLOR_ORDER_RGB) # start updating the LED strip led_strip.start() # set up wifi try: network_manager = NetworkManager(WIFI_CONFIG.COUNTRY, status_handler=status_handler) uasyncio.get_event_loop().run_until_complete(network_manager.client(WIFI_CONFIG.SSID, WIFI_CONFIG.PSK)) except Exception as e: # noqa: BLE001 print(f"Wifi connection failed! {e}") # if no wifi, then you get... spooky_rainbows() while True: # open the json file print(f"Requesting URL: {URL}") r = urequests.get(URL) # open the json data j = r.json() print("Data obtained!") r.close() # flash the onboard LED after getting data pico_led.value(True) time.sleep(0.2) pico_led.value(False) # extract hex colour from the data hex = j["field2"] # and convert it to RGB r, g, b = hex_to_rgb(hex) # adjust the brightness r, g, b = (int(i * BRIGHTNESS) for i in (r, g, b)) # light up the LEDs for i in range(NUM_LEDS): led_strip.set_rgb(i, r, g, b) print(f"LEDs set to {hex}") # sleep print(f"Sleeping for {UPDATE_INTERVAL} seconds.") time.sleep(UPDATE_INTERVAL)