code.py
 1  # SPDX-FileCopyrightText: 2020 Noe Ruiz for Adafruit Industries
 2  #
 3  # SPDX-License-Identifier: MIT
 4  
 5  import ssl
 6  import board
 7  import neopixel
 8  import adafruit_requests
 9  import socketpool
10  import wifi
11  from adafruit_io.adafruit_io import IO_HTTP
12  from adafruit_pixel_framebuf import PixelFramebuffer
13  # adafruit_circuitpython_adafruitio usage with native wifi networking
14  
15  # Neopixel matrix configuration
16  PIXEL_PIN = board.IO6
17  PIXEL_WIDTH = 12
18  PIXEL_HEIGHT = 12
19  
20  # secrets.py has SSID/password and adafruit.io
21  try:
22      from secrets import secrets
23  except ImportError:
24      print("WiFi secrets are kept in secrets.py, please add them there!")
25      raise
26  AIO_USERNAME = secrets["aio_username"]
27  AIO_KEY = secrets["aio_key"]
28  
29  # LED matrix creation
30  PIXELS = neopixel.NeoPixel(
31      PIXEL_PIN, PIXEL_WIDTH * PIXEL_HEIGHT, brightness=0.5, auto_write=False,
32  )
33  
34  PIXEL_FRAMEBUF = PixelFramebuffer(
35      PIXELS,
36      PIXEL_WIDTH,
37      PIXEL_HEIGHT,
38      alternating=True,
39      rotation=1,
40      reverse_x=True
41      )
42  
43  # Adafruit.io feeds setup
44  QUOTE_FEED = "sign-quotes.signtext"
45  COLOR_FEED = "sign-quotes.signcolor"
46  CURRENT_TEXT = "Merry Christmas!"
47  CURRENT_COLOR = 0xFFFFFF
48  
49  # Helper function to get updated data from Adafruit.io
50  def update_data():
51      global CURRENT_TEXT, CURRENT_COLOR
52      print("Updating data from Adafruit IO")
53      try:
54          quote_feed = IO.get_feed(QUOTE_FEED)
55          quotes_data = IO.receive_data(quote_feed["key"])
56          CURRENT_TEXT = quotes_data["value"]
57          color_feed = IO.get_feed(COLOR_FEED)
58          color_data = IO.receive_data(color_feed["key"])
59          CURRENT_COLOR = int(color_data["value"][1:], 16)
60      # pylint: disable=broad-except
61      except Exception as error:
62          print(error)
63  
64  
65  # Connect to WiFi
66  print("Connecting to %s" % secrets["ssid"])
67  wifi.radio.connect(secrets["ssid"], secrets["password"])
68  print("Connected to %s!" % secrets["ssid"])
69  
70  # Setup Adafruit IO connection
71  POOL = socketpool.SocketPool(wifi.radio)
72  REQUESTS = adafruit_requests.Session(POOL, ssl.create_default_context())
73  # Initialize an Adafruit IO HTTP API object
74  IO = IO_HTTP(AIO_USERNAME, AIO_KEY, REQUESTS)
75  
76  
77  while True:
78      update_data()
79      print("Displaying", CURRENT_TEXT, "in", hex(CURRENT_COLOR))
80  
81      for i in range(12 * len(CURRENT_TEXT) + PIXEL_WIDTH):
82          PIXEL_FRAMEBUF.fill(0x000000)
83          PIXEL_FRAMEBUF.pixel(0, 0, 0x000000)
84          PIXEL_FRAMEBUF.text(CURRENT_TEXT, PIXEL_WIDTH - i, 3, CURRENT_COLOR)
85          PIXEL_FRAMEBUF.display()