# IoT Moon Phase Guide

## Overview

https://youtu.be/NLtVKXIhyEQ

Build an internet-connected Moon Phase clock displaying the current moon cycle on a 3D printed topographical relief of the lunar surface!

Powered by CircuitPython, this clock runs on a QT Py ESP32-S2 with a diffused, high density NeoPixel LED strip.&nbsp;

The NeoPixel strip cycles to show the new moon, waxing crescent, first quarter, waxing gibbous, full moon, waning gibbous, third quarter, and waning crescent.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/798/medium640thumb/3d_printing_phase-loop.jpg?1742229324)

This project uses the US Navy Moon Phase API to get the phase of the moon and Adafruit IO to get the ISO timestamp. A request is made every 6 hours (tracked with ticks) to Adafruit IO and the API.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/799/medium640/3d_printing_hero-qtpy.jpg?1742229880)

![](https://cdn-learn.adafruit.com/assets/assets/000/135/800/medium800/3d_printing_hero-moon-close.jpg?1742229960)

This project is inspired by&nbsp;the [Moon Lamp](https://makerworld.com/en/models/955117-moon-lamp) project, originally posted by [Martin Kozak](https://makerworld.com/en/@MartinKozak)

## Parts
### 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)

### Adafruit NeoPixel Silicone Bead LED Strip - 180 LEDs per Meter

[Adafruit NeoPixel Silicone Bead LED Strip - 180 LEDs per Meter](https://www.adafruit.com/product/6016)
Plug in and glow with this incredible, ultra-high-density NeoPixel strip with an astonishing 180 LEDs/meter. That's no typo; this meter-long strip has 180 miniature NeoPixels crammed together and coated with a milky silicone bead to give it a smooth and continuous color gradient compared...

In Stock
[Buy Now](https://www.adafruit.com/product/6016)
[Related Guides to the Product](https://learn.adafruit.com/products/6016/guides)
![Angled shot of LED strip in a spiral, emitting pink and blue colors.](https://cdn-shop.adafruit.com/640x480/6016-00.jpg)

### 3-pin JST SM Plug + Receptacle Cable Set

[3-pin JST SM Plug + Receptacle Cable Set](https://www.adafruit.com/product/1663)
These 3-wire cables are 163mm (6.4") long and come as a set. One cable has a JST SM type connector plug on the end. The other cable has a matching JST SM type receptacle connector. They are good for whenever you have 3 wires you want to be able to plug and unplug. We like the solid and...

In Stock
[Buy Now](https://www.adafruit.com/product/1663)
[Related Guides to the Product](https://learn.adafruit.com/products/1663/guides)
![Angled shot of 2 3-pin JST SM Plug + Receptacle Cable.](https://cdn-shop.adafruit.com/640x480/1663-00.jpg)

### Pink and Purple Woven USB A to USB C Cable - 2 meters long

[Pink and Purple Woven USB A to USB C Cable - 2 meters long](https://www.adafruit.com/product/5044)
This cable is not only super-fashionable, with a woven pink and purple Blinka-like pattern, it's also made for USB C for our modernized breakout boards, Feathers and more.&nbsp; [If you want something just like it but for Micro B, we have a B...](https://www.adafruit.com/product/4111)

Out of Stock
[Buy Now](https://www.adafruit.com/product/5044)
[Related Guides to the Product](https://learn.adafruit.com/products/5044/guides)
![Angled shot of a pink/purple woven USB cable plugged into a laptop port and a small dev board.](https://cdn-shop.adafruit.com/640x480/5044-04.jpg)

### 5V 1A (1000mA) USB port power supply - UL Listed

[5V 1A (1000mA) USB port power supply - UL Listed](https://www.adafruit.com/product/501)
Need a USB jack for charging or powering a project, but don't want to lug around a computer? This switching supply gives a clean regulated output at up to 1000mA! 110 or 240 input, so it works in any country. The plugs are "US 2-prong" style so you may need a plug adapter, but...

In Stock
[Buy Now](https://www.adafruit.com/product/501)
[Related Guides to the Product](https://learn.adafruit.com/products/501/guides)
![Wall wart power supply with 2 US prong power](https://cdn-shop.adafruit.com/640x480/501-05.jpg)

To have the moon semi-transparent, the following white PLA filament was used. The black PLA is generic.

### Part: White PLA Filament
quantity: 1
White PLA Filament
[White PLA Filament](https://amzn.to/4bC2FcP)

# IoT Moon Phase Guide

## 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's 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/135/794/medium800/3d_printing_Moon_Phase_Circuit_Diagram.jpg?1742222717)

## Wired Connections

The LED strip connects to the QTPy via a JST SM cable

Cut the LED strip to be 98 pixels (55.3cm) long. Solder the JST cables such that:

- A3 on QT Py connects to LED strip DIN
- 5V on QT Py connects to LED strip +5V
- GND on QT Py connects to LED strip GND&nbsp;

The strip is mounted clockwise and starts at the 6 o'clock position

![Moon LED Strip mounting Direction](https://cdn-learn.adafruit.com/assets/assets/000/135/795/medium640/3d_printing_strip-direction.jpg?1742222802)

# IoT Moon Phase Guide

## Install 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)

# IoT Moon Phase Guide

## 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.

# IoT Moon Phase Guide

## Code

Warning: This project has been updated to use the [US Navy Moon Phase API](https://aa.usno.navy.mil/data/api#phase). Previously, it used the FarmSense API, which is now defunct.

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://cdn-learn.adafruit.com/assets/assets/000/135/801/medium640/3d_printing_cp-hero.jpg?1742230239)

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/QT_Py/NeoPixel_Moon_Phase_Clock/code.py

## Upload the Code and Libraries to the QT Py

After downloading the Project Bundle, plug your QT Py 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's **CIRCUITPY** drive.

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

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

![CRCUITPY](https://adafruit.github.io/Adafruit_Learning_System_Guides/QT_Py_NeoPixel_Moon_Phase_Clock.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/moon-phase-guide/create-your-settings-toml-file) earlier in this guide. You'll need to include your&nbsp;`CIRCUITPY_WIFI_SSID` and `CIRCUITPY_WIFI_PASSWORD`. Adafruit IO credentials and other data are not needed for this project.

```python
CIRCUITPY_WIFI_SSID = "your-ssid-here"
CIRCUITPY_WIFI_PASSWORD = "your-ssid-password-here"
```

## How the Code Works

The moon phase information is fetched from the [US Navy Moon Phase API](https://aa.usno.navy.mil/data/api#phase). It is a free API that gives the phase of the moon based on the date passed to it. You'll use the Adafruit IO time API to fetch the ISO timestamp. You do not need to include your Adafruit IO key to use this API.

The API also takes your latitude, longitude and timezone as a part of the API request because it provides more detailed moon phase information, such as sunset, moonrise, etc. If you're using this project as-is and only need to know the current phase of the moon, then you don't need to update any of this information.

```python
# US Navy Astronomical Applications API for moon phase
# https://aa.usno.navy.mil/api
# Your location coordinates (adjust these to your location)
LATITUDE = 40.71
LONGITUDE = -74.0060
TIMEZONE = -5  # EST/EDT, adjust for your timezone
DST = True  # Set to False if not in daylight saving time

# Adafruit IO time server for current date, no API key needed
date_url = "https://io.adafruit.com/api/v2/time/ISO-8601"
# connect to wifi
try:
    wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
except TypeError:
    print("Could not find WiFi info. Check your settings.toml file!")
    raise
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
```

### NeoPixels

The NeoPixels are setup on pin A3. Two colors are defined: `OFF` (all pixels off) and `ON` (white). To start, the NeoPixels are turned off to reset any pixels.

```python
# neopixels, 49 total
OFF = (0, 0, 0)
ON = (255, 255, 255)
pixel_pin = board.A3
num_pixels = 49
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.1, auto_write=False)
pixels.fill(0)
```

### Phases of the Moon

The phases of the moon are returned as strings from the API. The list `phase_names` is created to store these strings. Variables for the phases are also created.

```python
# phases of the moon
NEW_MOON = 0
WAXING_CRESCENT = 1
FIRST_QUARTER = 2
WAXING_GIBBOUS = 3
FULL_MOON = 4
WANING_GIBBOUS = 5
LAST_QUARTER = 6
WANING_CRESCENT = 7
DARK_MOON = 8
RED_MOON = 9
# strings that match return from API
phase_names = ["New Moon", "Waxing Crescent", "First Quarter", "Waxing Gibbous",
          "Full Moon", "Waning Gibbous", "Last Quarter", "Waning Crescent","Dark Moon","Red Moon"]
```

Each phase has a function that turns the necessary NeoPixels on or off to display the phase. For example, `set_new_moon()` turns all of the pixels off. `set_third_quarter()` sets half of the pixels on.

```python
def set_new_moon():
    pixels.fill(OFF)
    pixels.show()

...

def set_last_quarter():
    pixels.fill(OFF)
    for i in range(0, 24):
        pixels[i] = ON
    pixels.show()
```

These functions are matched to the phase and phase index with the `phase_functions` dictionary.

```python
# match functions with phases
phase_functions = {
    NEW_MOON: set_new_moon,
    WAXING_CRESCENT: set_waxing_crescent,
    FIRST_QUARTER: set_first_quarter,
    WAXING_GIBBOUS: set_waxing_gibbous,
    FULL_MOON: set_full_moon,
    WANING_GIBBOUS: set_waning_gibbous,
    LAST_QUARTER: set_last_quarter,
    WANING_CRESCENT: set_waning_crescent,
    DARK_MOON: set_dark_moon,
    RED_MOON: set_red_moon
}
```

The `set_moon_phase()` function takes the current phase returned from the API and runs the matching NeoPixel function to set the NeoPixels.

```python
# takes response from API, matches to function, runs function
def set_moon_phase(phase):
    phase_lower = phase.lower()
    for i, name in enumerate(phase_names):
        if phase_lower == name.lower():
            phase_functions[i]()
            print(f"Moon phase set to: {name}")
```

### The Loop

In the loop, `ticks` is used to keep time. Every 6 hours, the ISO timestamp is fetched from the Adafruit IO time API. The current date is retrieved from this response. This information is packed into the API request as an f-string. The API returns a JSON file, with the moon phase information located at `json_response["properties"]["data"]["curphase"]`. The current moon phase is&nbsp;passed to the `set_moon_phase()` function to update the NeoPixels.

```python
while True:
    try:
        if first_run or ticks_diff(ticks_ms(), timer_clock) &gt;= timer:
			# get current date
            date_response = requests.get(date_url)
            iso_date = date_response.text.strip('"')
            current_date = iso_date.split('T')[0]
            date_response.close()
			# build Navy API URL with parameters
            url = f"https://aa.usno.navy.mil/api/rstt/oneday?date={current_date}&amp;coords={LATITUDE},{LONGITUDE}&amp;tz={TIMEZONE}"
            if DST:
                url += "&amp;dst=true"
			# get the JSON response
            response = requests.get(url)
            json_response = response.json()
			# isolate phase info
            current_phase = json_response["properties"]["data"]["curphase"]
            print("-" * 40)
            print(current_phase)
            print("-" * 40)
			# run function to update neopixels with current phase
            set_moon_phase(current_phase)
            response.close()
            time.sleep(1)
            first_run = False
			# reset clock
            timer_clock = ticks_add(timer_clock, timer)
```

# IoT Moon Phase Guide

## 3D Printing

## 3D Printed Parts

STL files for 3D printing will need to be oriented for print using either FDM or SLS machines.

Parts were printed with PLA filament. The black is generic. The white used is specified in Parts on the Overview page.

Original design source files may be downloaded using the links below.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/792/medium640/3d_printing_parts-3d.jpg?1742222154)

[Moon Phase Clock STLs.zip](https://cdn-learn.adafruit.com/assets/assets/000/135/796/original/Moon_Phase_Clock_STLs.zip?1742223644)
[Edit Design](https://a360.co/4kMUi2j)
### Slice with settings for PLA material.&nbsp;

The parts were sliced using BambuStudio using the slice settings below.

- PLA filament 220c extruder
- 0.28 layer height
- 10% gyroid infill
- 200mm/s print speed
- 60c heated bed
- Supports: Slim Tree / Z top distance .28

![3D Printing Slice Setting](https://cdn-learn.adafruit.com/assets/assets/000/135/793/medium640/3d_printing_slice.jpg?1742222276)

# IoT Moon Phase Guide

## Assembly

Warning: The FarmSense API that is used in this project is not currently active. The project is going to be updated to use a different API.

## Solder QTPy&nbsp;

Position the JST SM wires away from the edges of the QTPy board when soldering to help avoid the corners of the press-fit holder.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/781/medium640/3d_printing_solder-qtpy.jpg?1742220380)

## QTPy holder screws

Prepare the printed holder by attach two M2.5x6mm screws.&nbsp;

## Mount QTPy

Insert the QTPy with the STEMMA QT port first, then gently press on the USB connector to attach to the holder.&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/135/782/medium640/3d_printing_qtpy-mount-prescrew.jpg?1742220650)

![](https://cdn-learn.adafruit.com/assets/assets/000/135/783/medium640/3d_printing_qtpy-mount.jpg?1742220685)

## Attach the case

Fasten the holder to the screw holes inside the case. Position the USB port to the cutout on the side on the case.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/784/medium640/3d_printing_qtpy-mounted.jpg?1742220799)

## Measure LED strip

Use a tape measure to cut 55.3cm or 98 pixels. Start measuring after the socket connector and wires. &nbsp;

Cut the strip along the center of the pad between the LEDs.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/785/medium640/3d_printing_strip-measure.jpg?1742220891)

![](https://cdn-learn.adafruit.com/assets/assets/000/135/786/medium640/3d_printing_strip-cut.jpg?1742220971)

## Connect strip

Align the socket and plug wires to connect the LED strip.

![Connect LED strip](https://cdn-learn.adafruit.com/assets/assets/000/135/787/medium640/3d_printing_qtpy-strip-connect.jpg?1742221233)

## Press-fit LED strip

Align the start of the strip to the cut out along the channel inside the case. Press-fit a small portion of the strip into the channel.&nbsp;

Insert the moon print at an angle to fit inside the case. Press each side until it sits below the LED channel.

![](https://cdn-learn.adafruit.com/assets/assets/000/135/788/medium640/3d_printing_strip-pressfit-moon.jpg?1742221335)

![](https://cdn-learn.adafruit.com/assets/assets/000/135/789/medium640/3d_printing_strip-pressfiting-moon.jpg?1742221541)

## Fit strip end

Gently press fit the rest of the strip in the channel, working your way from the start of the strip to the end.

![Fit LED strip](https://cdn-learn.adafruit.com/assets/assets/000/135/790/medium640/3d_printing_strip-pressfiting-end.jpg?1742221642)

## Place cover

The LED cover helps to hide the LED strip and is fitted over the case.&nbsp;

![Place LED strip cover](https://cdn-learn.adafruit.com/assets/assets/000/135/791/medium640/3d_printing_cover-attach.jpg?1742221813)


## Featured 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 Silicone Bead LED Strip - 180 LEDs per Meter

[Adafruit NeoPixel Silicone Bead LED Strip - 180 LEDs per Meter](https://www.adafruit.com/product/6016)
Plug in and glow with this incredible, ultra-high-density NeoPixel strip with an astonishing 180 LEDs/meter. That's no typo; this meter-long strip has 180 miniature NeoPixels crammed together and coated with a milky silicone bead to give it a smooth and continuous color gradient compared...

In Stock
[Buy Now](https://www.adafruit.com/product/6016)
[Related Guides to the Product](https://learn.adafruit.com/products/6016/guides)
### 3-pin JST SM Plug + Receptacle Cable Set

[3-pin JST SM Plug + Receptacle Cable Set](https://www.adafruit.com/product/1663)
These 3-wire cables are 163mm (6.4") long and come as a set. One cable has a JST SM type connector plug on the end. The other cable has a matching JST SM type receptacle connector. They are good for whenever you have 3 wires you want to be able to plug and unplug. We like the solid and...

In Stock
[Buy Now](https://www.adafruit.com/product/1663)
[Related Guides to the Product](https://learn.adafruit.com/products/1663/guides)
### Pink and Purple Woven USB A to USB C Cable - 2 meters long

[Pink and Purple Woven USB A to USB C Cable - 2 meters long](https://www.adafruit.com/product/5044)
This cable is not only super-fashionable, with a woven pink and purple Blinka-like pattern, it's also made for USB C for our modernized breakout boards, Feathers and more.&nbsp; [If you want something just like it but for Micro B, we have a B...](https://www.adafruit.com/product/4111)

Out of Stock
[Buy Now](https://www.adafruit.com/product/5044)
[Related Guides to the Product](https://learn.adafruit.com/products/5044/guides)
### 5V 1A (1000mA) USB port power supply - UL Listed

[5V 1A (1000mA) USB port power supply - UL Listed](https://www.adafruit.com/product/501)
Need a USB jack for charging or powering a project, but don't want to lug around a computer? This switching supply gives a clean regulated output at up to 1000mA! 110 or 240 input, so it works in any country. The plugs are "US 2-prong" style so you may need a plug adapter, but...

In Stock
[Buy Now](https://www.adafruit.com/product/501)
[Related Guides to the Product](https://learn.adafruit.com/products/501/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)
- [DeviceScript, TypeScript for Microcontrollers](https://learn.adafruit.com/devicescript.md)
- [NeoPixel Sprite Weather Display](https://learn.adafruit.com/neopixel-sprite-weather-display.md)
- [IoT Food Scale with Azure and CircuitPython](https://learn.adafruit.com/iot-food-scale-with-azure-and-circuitpython.md)
- [Monitor Your Greenhouse with a No-Code Environmental Sensor](https://learn.adafruit.com/monitor-your-greenhouse-with-a-no-code-environmental-sensor.md)
- [Two Way Telegraph with Analog Feedback Servos](https://learn.adafruit.com/two-way-display-with-analog-feedback-servos.md)
- [IoT Filament Sensor](https://learn.adafruit.com/iot-filament-sensor.md)
- [Cheekmate - a Wireless Haptic Communication System](https://learn.adafruit.com/cheekmate-wireless-haptic-communication.md)
- [Scrolling Countdown Timer](https://learn.adafruit.com/scrolling-countdown-timer.md)
- [Super Simple Sunrise Lamp](https://learn.adafruit.com/super-simple-sunrise-lamp.md)
- [Wireless ESP32-S2 Touch Screen Controller for Pure Data](https://learn.adafruit.com/wireless-esp32-s2-controller-for-pure-data.md)
- [ESP-NOW in CircuitPython](https://learn.adafruit.com/esp-now-in-circuitpython.md)
- [Raspberry Pi Azure IoT Hub Dashboard with CircuitPython](https://learn.adafruit.com/raspberry-pi-iot-dashboard-with-azure-and-circuitpython.md)
- [Cartoon Character Clock](https://learn.adafruit.com/cartoon-character-clock.md)
- [Traffic Light Conference Badge](https://learn.adafruit.com/traffic-light-conference-badge.md)
