/ IoT_NeoPixel_Sign / code.py
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()