# Blinka LED Sign

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/131/849/medium800/led_pixels_hero-sign.jpg?1723660677)

Countdown the days until CircuitPython Day 2024! This project uses a QT Py ESP32-S2 and NeoPixel dots strand to light up each day, counting down the days until August 16th 2024 - The snakiest day of the year!

The CircuitPython code uses Adafruit IO for time keeping. A single NeoPixel LED will light up each day and all LEDs are lit on August 16, CircuitPython Day 2024.

![led_pixels_hero-calendar.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/848/medium640/led_pixels_hero-calendar.jpg?1723660102)

3D print an LED sign in the shape of Blinka, the official CircuitPython mascot. Each NeoPixel LED is fitted behind a little 3D printed bulb to create 16 lights, representing each day of August.

![led_pixels_hero-bulbs.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/850/medium640/led_pixels_hero-bulbs.jpg?1723660774)

This special [Ouroboros](https://en.wikipedia.org/wiki/Ouroboros) depicts Blinka biting her own tail to represent the cycle of CircuitPython development.

![led_pixels_hero-face.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/851/medium640/led_pixels_hero-face.jpg?1723660995)

https://youtu.be/OzIoTnnsyxQ

## Parts
Featured
### Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT

[Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT](https://www.adafruit.com/product/5325)
What has your favorite Espressif WiFi microcontroller, comes with&nbsp;[our favorite connector - the STEMMA QT](http://adafruit.com/stemma), a chainable I2C port, and has lots of Flash and RAM memory for your next IoT project? What will make your next IoT project flyyyyy? What a...

In Stock
[Buy Now](https://www.adafruit.com/product/5325)
[Related Guides to the Product](https://learn.adafruit.com/products/5325/guides)
![Angled shot of small square purple dev board.](https://cdn-shop.adafruit.com/640x480/5325-12.jpg)

Featured
### Adafruit NeoPixel Slim LED Dot Strand - 20 LEDs at 2" Pitch

[Adafruit NeoPixel Slim LED Dot Strand - 20 LEDs at 2" Pitch](https://www.adafruit.com/product/5225)
We have all&nbsp;sorts of LED strips for a wide range of needs.&nbsp;[_Chonky_](https://www.adafruit.com/product/3869)&nbsp;strips? We got those!&nbsp;[Strips with alligator...](https://www.adafruit.com/?q=neopixel%20alligator%20clips%20stripping%20wires)

In Stock
[Buy Now](https://www.adafruit.com/product/5225)
[Related Guides to the Product](https://learn.adafruit.com/products/5225/guides)
![Video of an LED dot strip glowing rainbow colors.](https://cdn-shop.adafruit.com/product-videos/640x480/5225-00.jpg)

Featured
### STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable

[STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable](https://www.adafruit.com/product/4209)
This 4-wire cable is a little over 150mm / 6" long and fitted with JST-SH female 4-pin connectors on one end and premium Dupont male headers on the other. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert...

In Stock
[Buy Now](https://www.adafruit.com/product/4209)
[Related Guides to the Product](https://learn.adafruit.com/products/4209/guides)
![Angled Shot of the STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable.](https://cdn-shop.adafruit.com/640x480/4209-05.jpg)

Featured
### Black Nylon Machine Screw and Stand-off Set – M3 Thread

[Black Nylon Machine Screw and Stand-off Set – M3 Thread](https://www.adafruit.com/product/4685)
Totaling **420 pieces** , this **M3 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M3 size screws fit a number of&nbsp;Adafruit breakout/dev board...

In Stock
[Buy Now](https://www.adafruit.com/product/4685)
[Related Guides to the Product](https://learn.adafruit.com/products/4685/guides)
![Opened box showing many nylon screws](https://cdn-shop.adafruit.com/640x480/4685-01.jpg)

## Hardware

- 4x M3 x 6mm long machine screws
- 4x M3 hex nuts

# Blinka LED Sign

## Circuit Diagram

The diagram below provides a general visual reference for wiring of the components once you get to the **Assembly** page. This diagram was created using the software package [Fritzing](http://fritzing.org/download/).

## Adafruit Library for Fritzing

Adafruit uses the Adafruit Fritzing parts library to create circuit diagrams for projects. You can download the library or just grab individual parts. Get the library and parts from [GitHub - Adafruit Fritzing Parts](https://github.com/adafruit/Fritzing-Library/tree/master/parts).

![](https://cdn-learn.adafruit.com/assets/assets/000/131/858/medium800/led_pixels_Circuit-Diagram.jpg?1723664268)

Warning: STEMMA QT cable for NeoPixels is a non-standard usage. This uses 3V power and won't be as bright as 5V.

## Wired Connections

**NeoPixel Dot Strand**

- **GND** from strip to **GND** STEMMA QT pin on **QT Py**
- **5V** from strip to **3V** STEMMA QT pin on&nbsp; **QT Py**
- **DIN** from strip to **SCL1&nbsp;** STEMMA QT pin on **QT Py**

**5V USB Power**

The QT Py is powered by 5V USB plugged into a computer.

# Blinka LED Sign

## CAD Files

## 3D Printed Parts

STL files for 3D printing are oriented to print "as-is" on FDM style machines. Parts are designed to 3D print without any support material using PLA filament. Original design source may be downloaded using the links below.

![led_pixels_blinka-bulbs.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/854/medium640/led_pixels_blinka-bulbs.jpg?1723664060)

[Download STLs.zip](https://cdn-learn.adafruit.com/assets/assets/000/131/862/original/STLs.zip?1723668868)
[Download CAD source](https://cdn-learn.adafruit.com/assets/assets/000/131/863/original/CAD.zip?1723668942)
## Build Volume

The parts require a 3D printer with a minimum build volume.

- 184mm (X) x 199mm (Y) x 12mm (Z)

![led_pixels_cura-slice.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/853/medium640/led_pixels_cura-slice.jpg?1723664002)

## Design Source Files

The project assembly was designed in Fusion 360. This can be downloaded in different formats like STEP, STL and more.

Electronic components like Adafruit's boards, displays, connectors and more can be downloaded from the&nbsp;[Adafruit CAD parts GitHub Repo](https://github.com/adafruit/Adafruit_CAD_Parts/).

![led_pixels_5325_QTPy_ESP32S2.gif](https://cdn-learn.adafruit.com/assets/assets/000/131/855/medium640thumb/led_pixels_5325_QTPy_ESP32S2.jpg?1723664125)

# Blinka LED Sign

## CircuitPython

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the **CIRCUITPY** drive to iterate.

## CircuitPython Quickstart

Follow this step-by-step to quickly get CircuitPython running on your board.

[Download the latest version of CircuitPython for this board via circuitpython.org](https://circuitpython.org/board/adafruit_qtpy_esp32s2/)
 **Click the link above to download the latest CircuitPython UF2 file.**

Save it wherever is convenient for you.

![install_circuitpython_on_most_boards_CircuitPython_downloaded.jpg](https://cdn-learn.adafruit.com/assets/assets/000/102/129/medium640/install_circuitpython_on_most_boards_CircuitPython_downloaded.jpg?1620922559)

![](https://cdn-learn.adafruit.com/assets/assets/000/107/612/medium800/adafruit_products_QTESP_reset_NeoPixel.jpg?1641246436)

Info: The board above has a chip antenna, not the u.Fl connector, but the process is the same.

Plug your board into your computer, using a known-good data-sync cable, directly, or via an adapter if needed.

Click the **reset** button once (highlighted in red above), and then click it again when you see the **RGB status LED(s)** (highlighted in green above) turn purple (approximately half a second later). Sometimes it helps to think of it as a "slow double-click" of the reset button.

If you do not see the LED turning purple, you will need to reinstall the UF2 bootloader. See the&nbsp; **Factory Reset** &nbsp;page in this guide for details.

On some very old versions of the UF2 bootloader, the status LED turns red instead of purple.

For this board, tap reset and wait for the LED to turn purple, and as soon as it turns purple, tap reset again. The second tap needs to happen while the LED is still purple.

Once successful, you will see the **RGB status LED(s)** turn green (highlighted in green above), and a disk drive ending in " **...BOOT**" should appear on your host computer. If you see red, try another port, or if you're using an adapter or hub, try without the hub, or different adapter or hub.

If double-clicking doesn't work the first time, try again. Sometimes it can take a few tries to get the rhythm right!

A lot of people end up using charge-only USB cables and it is very frustrating! **Make sure you have a USB cable you know is good for data sync.**

Info: 

You will see a new disk drive appear called **QTPYS2BOOT**.

&nbsp;

&nbsp;

Drag the **adafruit\_circuitpython\_etc.uf2** file to **QTPYS2BOOT**.

![adafruit_products_uf2install.png](https://cdn-learn.adafruit.com/assets/assets/000/107/577/medium640/adafruit_products_uf2install.png?1640641747)

Copy or drag the UF2 file you downloaded to the **BOOT** drive.

The **BOOT** drive will disappear and a new disk drive called **CIRCUITPY** will appear.

That's it!

![install_circuitpython_on_most_boards_CIRCUITPY.jpg](https://cdn-learn.adafruit.com/assets/assets/000/102/130/medium640/install_circuitpython_on_most_boards_CIRCUITPY.jpg?1620923145)

# Blinka LED Sign

## Create Your settings.toml File

CircuitPython works with WiFi-capable boards to enable you to make projects that have network connectivity. This means working with various passwords and API keys. As of [CircuitPython 8](https://circuitpython.org/downloads), there is support for a **settings.toml** file. This is a file that is stored on your **CIRCUITPY** drive, that contains all of your secret network information, such as your SSID, SSID password and any API keys for IoT services. It is designed to separate your sensitive information from your **code.py** file so you are able to share your code without sharing your credentials.

CircuitPython previously used a **secrets.py** file for this purpose. The **settings.toml** file is quite similar.

Warning: Your **settings.toml** file should be stored in the main directory of your **CIRCUITPY** drive. It should not be in a folder.

## CircuitPython **settings.toml** File

This section will provide a couple of examples of what your **settings.toml** file should look like, specifically for CircuitPython WiFi projects in general.

The most minimal **settings.toml** file must contain your WiFi SSID and password, as that is the minimum required to connect to WiFi. Copy this example, paste it into your **settings.toml** , and update:

- `your_wifi_ssid`
- `your_wifi_password`

```auto
CIRCUITPY_WIFI_SSID = "your_wifi_ssid"
CIRCUITPY_WIFI_PASSWORD = "your_wifi_password"
```

Many CircuitPython network-connected projects on the Adafruit Learn System involve using Adafruit IO. For these projects, you must _also_ include your Adafruit IO username and key. Copy the following example, paste it into your settings.toml file, and update:

- `your_wifi_ssid`
- `your_wifi_password`
- `your_aio_username`
- `your_aio_key`

```auto
CIRCUITPY_WIFI_SSID = "your_wifi_ssid"
CIRCUITPY_WIFI_PASSWORD = "your_wifi_password"
ADAFRUIT_AIO_USERNAME = "your_aio_username"
ADAFRUIT_AIO_KEY = "your_aio_key"
```

Some projects use different variable names for the entries in the **settings.toml** file. For example, a project might use `ADAFRUIT_AIO_ID` in the place of `ADAFRUIT_AIO_USERNAME`. **If you run into connectivity issues, one of the first things to check is that the names in the settings.toml file match the names in the code.**

Warning: Not every project uses the same variable name for each entry in the **settings.toml** file! Always verify it matches the code.

## **settings.toml** File Tips
Here is an example **settings.toml** file.

```auto
# Comments are supported
CIRCUITPY_WIFI_SSID = "guest wifi"
CIRCUITPY_WIFI_PASSWORD = "guessable"
CIRCUITPY_WEB_API_PORT = 80
CIRCUITPY_WEB_API_PASSWORD = "passw0rd"
test_variable = "this is a test"
thumbs_up = "\U0001f44d"
```

In a **settings.toml** file, it's important to keep these factors in mind:

- Strings are wrapped in double quotes; ex: `"your-string-here"`
- Integers are _ **not** _ quoted and may be written in decimal with optional sign (`+1`, `-1`, `1000`) or hexadecimal (`0xabcd`).
  - Floats (decimal numbers), octal (`0o567`) and binary (`0b11011`) are not supported.

- Use `\u` escapes for weird characters, `\x` and `\ooo` escapes are not available in **.toml** files
  - Example: `\U0001f44d` for 👍 (thumbs up emoji) and `\u20ac` for € (EUR sign)

- Unicode emoji, and non-ASCII characters, stand for themselves as long as you're careful to save in "UTF-8 without BOM" format

&nbsp;

&nbsp;

When your&nbsp; **settings.toml&nbsp;** file is ready, you can save it in your text editor with the **.toml** &nbsp;extension.

![adafruit_products_dotToml.jpg](https://cdn-learn.adafruit.com/assets/assets/000/117/071/medium640/adafruit_products_dotToml.jpg?1671034293)

## Accessing Your **settings.toml** Information in **code.py**
In your **code.py** file, you'll need to `import` the `os` library to access the **settings.toml** file. Your settings are accessed with the `os.getenv()` function. You'll pass your settings entry to the function to import it into the **code.py** file.

```python
import os

print(os.getenv("test_variable"))
```

![](https://cdn-learn.adafruit.com/assets/assets/000/117/072/medium800/adafruit_products_tomlOutput.jpg?1671034496)

In the upcoming CircuitPython WiFi examples, you'll see how the **settings.toml&nbsp;** file is used for connecting to your SSID and accessing your API keys.

# Blinka LED Sign

## Code the Sign

Once you've finished setting up your QT Py ESP32-S2 with CircuitPython, you can access the code and necessary libraries by downloading the Project Bundle.

To do this, click on the **Download Project Bundle** button in the window below. It will download to your computer as a zipped folder.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/CircuitPython_Day_2024_Projects/Blinka_NeoPixel_Countdown/code.py

## Upload the Code and Libraries to the QT Py ESP32-S2

After downloading the Project Bundle, plug your QT Py ESP32-S2 into the computer's USB port with a known good USB data+power cable. You should see a new flash drive appear in the computer's File Explorer or Finder (depending on your operating system) called **CIRCUITPY**. Unzip the folder and copy the following items to the QT Py ESP32-S2's **CIRCUITPY** drive.

- **lib** folder
- **code.py**

Your QT Py ESP32-S2 **CIRCUITPY** drive should look like this after copying the **lib** folder&nbsp;and the **code.py** file.

![CIRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/CircuitPython_Day_2024_Projects_Blinka_NeoPixel_Countdown.png )

## Add Your **settings.toml** File

As of CircuitPython 8.0.0, there is support for [Environment Variables](https://docs.circuitpython.org/en/latest/docs/environment.html). Environment variables are stored in a **settings.toml** file. Similar to **secrets.py** , the **settings.toml** file separates your sensitive information from your main **code.py** file. Add your **settings.toml** file as described in the [Create Your settings.toml File page](https://learn.adafruit.com/blinka-led-sign/create-your-settings-toml-file) earlier in this guide. You'll need to include your `AIO_USERNAME`, `AIO_KEY`, `CIRCUITPY_WIFI_SSID` and `CIRCUITPY_WIFI_PASSWORD`.

```python
CIRCUITPY_WIFI_SSID = "your-ssid-here"
CIRCUITPY_WIFI_PASSWORD = "your-ssid-password-here"
AIO_USERNAME = "your-username-here"
AIO_KEY = "your-key-here"
```

## How the CircuitPython Code Works

At the top of the code, you'll edit `timezone` to reflect your timezone location. You can edit `color` to change the color of the NeoPixels. The event time is also set. In this case, it's August 16, 2024 at midnight.

```python
timezone = "America/New_York"
color = 0xFF00FF
# The time of the thing!
EVENT_YEAR = 2024
EVENT_MONTH = 8
EVENT_DAY = 16
EVENT_HOUR = 0
EVENT_MINUTE = 0
# we'll make a python-friendly structure
event_time = time.struct_time((EVENT_YEAR, EVENT_MONTH, EVENT_DAY,
                               EVENT_HOUR, EVENT_MINUTE, 0,  # we don't track seconds
                               -1, -1, False))  # we dont know day of week/year or DST
```

### WiFi

The board connects to WiFi and then establishes a connection with Adafruit IO. Adafruit IO is used as a time server for this project.

```python
print("Connecting to WiFi...")
wifi.radio.connect(
    os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD")
)
pool = adafruit_connection_manager.get_radio_socketpool(wifi.radio)
ssl_context = adafruit_connection_manager.get_radio_ssl_context(wifi.radio)
requests = adafruit_requests.Session(pool, ssl_context)
io = IO_HTTP(
    os.getenv("AIO_USERNAME"), os.getenv("AIO_KEY"), requests
)
```

### NeoPixels

The NeoPixels are setup on pin&nbsp; **SCL1** for the data connection. This is not the standard use for this STEMMA I2C pin, but using it makes it a solderless project. `pixel_length` and `last_length` are used in the loop to keep track of which NeoPixels are lit for the countdown.

```python
pixel_pin = board.SCL1
pixel_num = 16
pixels = neopixel.NeoPixel(pixel_pin, n = pixel_num, brightness=1, auto_write=True)
pixel_length = 0
last_length = -1
```

### Time and States

`adafruit_ticks` is used for timekeeping in the loop. `first_run` and `finished` are used as states for tracking the state of the timekeeping.

```python
refresh_clock = ticks_ms()
refresh_timer = 3600 * 1000  # 1 hour
first_run = True
finished = False
```

### The Loop

In the loop, the time is checked every hour via Adafruit IO. Since the NeoPixels are representing days until an event, the time does not need to be checked as often as with other countdown projects. The date is used as the count for the NeoPixels. For example, if it's the 6th of the event month, then 6 NeoPixels will be lit. If the countdown is over, then all of the NeoPixels are lit.

```python
while True:
    if not finished:
        if ticks_diff(ticks_ms(), refresh_clock) >= refresh_timer or first_run:
            try:
                print("Getting time from internet!")
                now = time.struct_time(io.receive_time(timezone))
                print(now)
                total_seconds = time.mktime(now)
                remaining = time.mktime(event_time) - total_seconds
                if remaining < 0:
                    pixel_length = pixel_num + 1
                    finished = True
                else:
                    if now.tm_mon == EVENT_MONTH:
                        pixel_length = now.tm_mday % (pixel_num + 1)
                refresh_clock = ticks_add(refresh_clock, refresh_timer)
            except Exception as e:  # pylint: disable=broad-except
                print("Some error occured, retrying via reset in 15 seconds! - ", e)
                time.sleep(15)
                microcontroller.reset()
    if last_length != pixel_length:
        if not pixel_length:
            pixels.fill(0x000000)
        else:
            for i in range(pixel_length):
                pixels[i] = color
        last_length = pixel_length
    first_run = False
```

# Blinka LED Sign

## Assembly

## Parts

Get the parts ready for assembly.

- QTPY ESP32-S2
- STEMMA QT Cable
- 20x NeoPixel Dot Strand

![led_pixels_parts.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/822/medium640/led_pixels_parts.jpg?1723652477)

## Prep STEMMA QT Cable

Use wire cutters to remove the blue wire from the STEMMA QT cable.

![led_pixels_stemma-qt-trim.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/823/medium640/led_pixels_stemma-qt-trim.jpg?1723652488)

## NeoPixel Dot Strand

Take a moment to review the input and output connectors on the NeoPixel dot strand.

Locate the **Data IN** connector and use this to connect the STEMMA QT cable.

![led_pixels_neopixel-connectors.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/824/medium640/led_pixels_neopixel-connectors.jpg?1723652527)

## Connect STEMMA QT

Reference the image for connecting the STEMMA QT cable to the Data In connector on the NeoPixel strand.

![led_pixels_neopixel-stemma.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/825/medium640/led_pixels_neopixel-stemma.jpg?1723652542)

## Test NeoPixel Strand

Connect the STEMMA QT cable to the QT Py and use a 5V 1A power supply or computer USB port to power the QT Py.

![led_pixels_qtpy-neopixel-test.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/826/medium640/led_pixels_qtpy-neopixel-test.jpg?1723652555)

## Bulb Diffusers

Get the 3D printed bulb diffusers ready to install onto the 3D printed Blinka sign.

![led_pixels_blinka-bulbs.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/827/medium640/led_pixels_blinka-bulbs.jpg?1723652569)

## Install Bulbs

Press fit the 3D printed bulb into the holes on the 3D printed Blinka sign.

![led_pixels_bulbs-install.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/828/medium640/led_pixels_bulbs-install.jpg?1723652595)

## NeoPixel Strip Placement

Locate the first NeoPixel on the strip and place it near the hole closest to Blinka's head and eye.

Position the STEMMA QT cable so it's fitted through the slit near&nbsp; the bottom of the sign.

![led_pixels_neopixel-sign-placement.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/829/medium640/led_pixels_neopixel-sign-placement.jpg?1723652615)

## Hot Glue NeoPixels

Use hot glue to adhere the first NeoPixel to the hole in the 3D printed sign.

![led_pixels_neopixel-1st-glued.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/830/medium640/led_pixels_neopixel-1st-glued.jpg?1723652685)

## Install NeoPixels

Hot glue all 16 NeoPixel LEDs to the holes in the 3D printed sign.

Allow each LED to cool down before proceeding to the next LED.

Test the NeoPixel strip once all of the LEDs have been dried.

![led_pixels_neopixel-all-glued.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/831/medium640/led_pixels_neopixel-all-glued.jpg?1723652698)

![led_pixels_neopixels-glued-test.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/832/medium640/led_pixels_neopixels-glued-test.jpg?1723652715)

## QT Py Holder

Get the 3D printed QT Py holder ready to install.

![led_pixels_qtpy-holder.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/833/medium640/led_pixels_qtpy-holder.jpg?1723652733)

## Install QT Py to Holder

Insert the QT Py into the 3D printed holder at an angle so the edge of the PCB is fitted under the corner clips.

Slightly flex the holder to allow the corner clips on the opposite side to clamp the QT Py into place.

![led_pixels_qtpy-holder-intalling.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/834/medium640/led_pixels_qtpy-holder-intalling.jpg?1723652749)

![led_pixels_qtpy-holder-installed.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/835/medium640/led_pixels_qtpy-holder-installed.jpg?1723652763)

## Install QT Py to Bottom Cover

Use two M3x6mm long screws and hex nuts to secure the 3D printed QT Py holder to the 3D printed bottom cover.

Place the QT Py holder over the 3D printed bottom cover with the mounting holes lined up.

![led_pixels_qtpy-cover-screws.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/836/medium640/led_pixels_qtpy-cover-screws.jpg?1723652770)

![led_pixels_qtpy-cover-place.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/837/medium640/led_pixels_qtpy-cover-place.jpg?1723652779)

## Secure QT Py Holder

Insert and fasten the M3 x 6mm long machine screws. Use the M3 hex nuts to secure the QT Py holder to the bottom cover.

![led_pixels_qtpy-cover-installing.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/838/medium640/led_pixels_qtpy-cover-installing.jpg?1723652792)

![led_pixels_qtpy-holder-cover-secured.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/839/medium640/led_pixels_qtpy-holder-cover-secured.jpg?1723652800)

## Base Stand

Use two M3 x 6mm long machine screws and hex nuts to secure the base stand to the 3D printed Blinka sign.

![led_pixels_base-sign-screws.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/840/medium640/led_pixels_base-sign-screws.jpg?1723652814)

## Secure Base to Sign

Insert and fasten the M3 machine screws through the two mounting holes on the inside of the base stand.

Use the M3 hex nuts to secure the base to the sign.

![led_pixels_base-sign-installing.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/841/medium640/led_pixels_base-sign-installing.jpg?1723652827)

![led_pixels_base-sign-secured.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/842/medium640/led_pixels_base-sign-secured.jpg?1723652837)

## Fit STEMMA QT Cable

Insert the STEMMA QT cable through the hole cutout in the 3D printed base and pull it all the way through.

![led_pixels_base-stemma-install.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/843/medium640/led_pixels_base-stemma-install.jpg?1723652850)

## Connect STEMMA QT Cable

Plug in the STEMMA QT cable into the STEMMA QT port on the QT Py.

Ensure the cable is fully seated into the port on the QT Py.

![led_pixels_base-stemma-connect.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/844/medium640/led_pixels_base-stemma-connect.jpg?1723652860)

## Install Bottom Cover

Line up the bottom cover with the base so the USB port on QT Py is lined up with the cutout.

Firmly press the bottom cover into the base to close them shut.

![led_pixels_base-cover-closing.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/845/medium640/led_pixels_base-cover-closing.jpg?1723652873)

## USB Port

The USB-C connector on the QT Py is accessible on the side of the base.

![led_pixels_base-usb.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/846/medium640/led_pixels_base-usb.jpg?1723652883)

## Final Build

Use a 5V 1A power supply or computers USB port to power on the Blinka NeoPixel LED sign.

Congrats on your build!

![led_pixels_final-build.jpg](https://cdn-learn.adafruit.com/assets/assets/000/131/847/medium640/led_pixels_final-build.jpg?1723652891)

![](https://cdn-learn.adafruit.com/assets/assets/000/131/859/medium800thumb/led_pixels_LED-demo.jpg?1723664856)

## Usage

An additional NeoPixel LED will light up each day. On August 16th, all of the LED will be lit.&nbsp;


## Guide Products

### Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT

[Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT](https://www.adafruit.com/product/5325)
What has your favorite Espressif WiFi microcontroller, comes with&nbsp;[our favorite connector - the STEMMA QT](http://adafruit.com/stemma), a chainable I2C port, and has lots of Flash and RAM memory for your next IoT project? What will make your next IoT project flyyyyy? What a...

In Stock
[Buy Now](https://www.adafruit.com/product/5325)
[Related Guides to the Product](https://learn.adafruit.com/products/5325/guides)
### Adafruit NeoPixel Slim LED Dot Strand - 20 LEDs at 2" Pitch

[Adafruit NeoPixel Slim LED Dot Strand - 20 LEDs at 2" Pitch](https://www.adafruit.com/product/5225)
We have all&nbsp;sorts of LED strips for a wide range of needs.&nbsp;[_Chonky_](https://www.adafruit.com/product/3869)&nbsp;strips? We got those!&nbsp;[Strips with alligator...](https://www.adafruit.com/?q=neopixel%20alligator%20clips%20stripping%20wires)

In Stock
[Buy Now](https://www.adafruit.com/product/5225)
[Related Guides to the Product](https://learn.adafruit.com/products/5225/guides)
### STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable

[STEMMA QT / Qwiic JST SH 4-pin to Premium Male Headers Cable](https://www.adafruit.com/product/4209)
This 4-wire cable is a little over 150mm / 6" long and fitted with JST-SH female 4-pin connectors on one end and premium Dupont male headers on the other. Compared with the chunkier JST-PH these are 1mm pitch instead of 2mm, but still have a nice latching feel, while being easy to insert...

In Stock
[Buy Now](https://www.adafruit.com/product/4209)
[Related Guides to the Product](https://learn.adafruit.com/products/4209/guides)
### Black Nylon Machine Screw and Stand-off Set – M3 Thread

[Black Nylon Machine Screw and Stand-off Set – M3 Thread](https://www.adafruit.com/product/4685)
Totaling **420 pieces** , this **M3 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M3 size screws fit a number of&nbsp;Adafruit breakout/dev board...

In Stock
[Buy Now](https://www.adafruit.com/product/4685)
[Related Guides to the Product](https://learn.adafruit.com/products/4685/guides)

## Related Guides

- [Adafruit QT Py ESP32-S2 and QT Py ESP32-S2 with uFL Antenna](https://learn.adafruit.com/adafruit-qt-py-esp32-s2.md)
- [Espresso Water Tank Meter](https://learn.adafruit.com/espresso-water-tank-meter.md)
- [Raspberry Pi Halloween Costume Detector](https://learn.adafruit.com/raspberry-pi-halloween-costume-detector.md)
- [Automatic Mechanical Watch Winder](https://learn.adafruit.com/automatic-mechanical-watch-winder.md)
- [ESP32-S3 BLE RS-232 Controller](https://learn.adafruit.com/esp32-s3-ble-rs232-controller.md)
- [Retroreflective Greenscreen Light Ring QT Py Controller ](https://learn.adafruit.com/retroreflective-green-screen-light-ring-controller.md)
- [Adafruit STEMMA & STEMMA QT](https://learn.adafruit.com/introducing-adafruit-stemma-qt.md)
- [FunHouse 3D Printed Stand](https://learn.adafruit.com/funhouse-3d-printed-stand.md)
- [CYBERDECK Bonnet and HAT for Raspberry Pi 400](https://learn.adafruit.com/cyberdeck-bonnet-and-hat.md)
- [Remote Control Candy Dispenser Ghost](https://learn.adafruit.com/ble-claw.md)
- [Audio Synthesis with CircuitPython synthio](https://learn.adafruit.com/audio-synthesis-with-circuitpython-synthio.md)
- [USB Host to BLE Keyboard Adapter](https://learn.adafruit.com/esp32-s3-usb-to-ble-keyboard-adapter.md)
- [Super Simple Sunrise Lamp](https://learn.adafruit.com/super-simple-sunrise-lamp.md)
- [IoT Food Scale with Azure and CircuitPython](https://learn.adafruit.com/iot-food-scale-with-azure-and-circuitpython.md)
- [LED Matrix Sports Scoreboard](https://learn.adafruit.com/led-matrix-sports-scoreboard.md)
- [CircuitPython Libraries and Jupyter Notebook on any Computer with MCP2221](https://learn.adafruit.com/jupyter-on-any-computer-with-circuitpython-libraries-and-mcp2221.md)
