/ examples / wiznet5k_cheerlights.py
wiznet5k_cheerlights.py
 1  import time
 2  import board
 3  import busio
 4  from digitalio import DigitalInOut
 5  
 6  from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K
 7  import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket
 8  import adafruit_requests as requests
 9  
10  import neopixel
11  import adafruit_fancyled.adafruit_fancyled as fancy
12  
13  cs = DigitalInOut(board.D10)
14  spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
15  
16  # Initialize ethernet interface with DHCP
17  eth = WIZNET5K(spi_bus, cs)
18  
19  # Initialize a requests object with a socket and ethernet interface
20  requests.set_socket(socket, eth)
21  
22  DATA_SOURCE = "http://api.thingspeak.com/channels/1417/feeds.json?results=1"
23  DATA_LOCATION = ["feeds", 0, "field2"]
24  
25  # neopixels
26  pixels = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.3)
27  pixels.fill(0)
28  
29  attempts = 3  # Number of attempts to retry each request
30  failure_count = 0
31  response = None
32  
33  # we'll save the value in question
34  last_value = value = None
35  
36  while True:
37      try:
38          print("Fetching json from", DATA_SOURCE)
39          response = requests.get(DATA_SOURCE)
40          print(response.json())
41          value = response.json()
42          for key in DATA_LOCATION:
43              value = value[key]
44              print(value)
45          response.close()
46          failure_count = 0
47      except AssertionError as error:
48          print("Request failed, retrying...\n", error)
49          failure_count += 1
50          if failure_count >= attempts:
51              raise AssertionError(
52                  "Failed to resolve hostname, \
53                                    please check your router's DNS configuration."
54              )
55          continue
56      if not value:
57          continue
58      if last_value != value:
59          color = int(value[1:], 16)
60          red = color >> 16 & 0xFF
61          green = color >> 8 & 0xFF
62          blue = color & 0xFF
63          gamma_corrected = fancy.gamma_adjust(fancy.CRGB(red, green, blue)).pack()
64  
65          pixels.fill(gamma_corrected)
66          last_value = value
67      response = None
68      time.sleep(60)