Create a heart-felt NeoPixel LED badge using Adafruit's QT Py development board. This is cute project was created for makers getting started with SMD soldering.

This singled-sided PCB features SMD pads for six 5050 NeoPixel LEDs and the Adafruit QT Py. The center cutout allows a SPI flash chip to fit through the board. It's simple, easy to assemble and customizable.

Use a desktop CNC to mill your custom PCBs using FR-1 blanks. You can fit up to four QT Py heart PCBs on a 4x5in PCB blank in less than 10 minutes! 

Use a PCB service like OSHPark to create custom PCBs with beautiful solder mask and silkscreen. Download the CAD file and upload it to have them shipped to you.


Animation of Adafruit QT Py with onboard NeoPixel in a rainbow swirl.
What a cutie pie! Or is it... a QT Py? This diminutive dev board comes with our favorite lil chip, the SAMD21 (as made famous in our GEMMA M0 and Trinket M0 boards).This time it...
Out of Stock
Angled shot of a 2MB SPI Flash in 8-Pin SOIC package.
These little chips are like miniature SSD drives for your electronics. When you don't need something with as much storage as a micro SD card, but an EEPROM is too small, SPI (or...
In Stock
10 Pack NeoPixel 5050 RGB LED with Integrated Driver Chip
Make your own smart LED arrangement with the same integrated LED that is used in our NeoPixel strip and pixels. This tiny 5050 (5mm x 5mm) RGB LED is fairly easy to solder and is the...
In Stock
1 x Stickvise PCB Vise
Stickvise PCB Vise
1 x Solder Wire
Solder Wire - 60/40 Rosin Core
1 x Soldering Iron
Hakko FX-888D
1 x USB-C Cable
USB Type A to Type C Cable - 6" long

CNC Milling Parts & Supplies

If you'd like to use a desktop CNC to create the PCB, you can get the build materials and tools below.

1 x 1/32in Flatend Mill
2-Flute flat end mill


This was created using Autodesk EAGLE. The PCB features custom footprints for the NeoPixels and QT Py. Feel free to use them in your projects.

QT Py Footprint

The QT Py board features 2x7 (14 total) pins that are spaced apart 0.1in. The two rows of pins are spaced apart 0.675in. The SMD pads are 0.1 x 0.05in. This features an outline of the board on the silkscreen layer to help with placement. The rectangular outline represents the USB-C port on the QTPY.

NeoPixel Footprint

The NeoPixel 5050 LEDs feature four SMD pads that are 0.05 x 0.03in. The pads are spaced apart 5 x 3.4mm. Check the SK6812 datasheet for referencing the technical drawing. The outline of the NeoPixel LED features a corner marker to note the ground pad. 

Board Shape

The heart was creating using the line tool. The grid was set to be millimeters which helps to visually draw the shape and make it symmetrical. The size was tweaked several times to accommodate space for the QT Py, NeoPixels and traces. 

Traces and Spaces

Traces were set to 0.6in width with 0.6in of minimum spacing. This optimizes the traces for a 1/32in flat end mill. Using a single tool can help speed up the milling process. 

Reference the design considerations guide on Bantamtools site for more info.

Design File

Use link below to download the .brd and .sch files for Autodesk Eagle.

Upload to OSHPark

Unzip the file and upload the .brd file to

Board Upload

The failure warning appears due to a missing drill file. It's not required. Check the box to approve and click continue.

Verify Board

Take a moment to review each of the layers. Read through the descriptions and take a look at the render images. If everything looks good, click continue.

Submit Order

Review the quantity, minimum of 3 boards. Check out the additional options if you'd like. Click Checkout to submit your order.

These PCBs were made with the desktop CNC from Bantam Tools. The otherplan software because you can easily drag and drop your cad files. We designed the PCB in Autodesk Eagle and created a custom footprint for the QT Py. This was routed for a single-layered board and features pretty chunky traces.

FR-1 Single-sided PCBs

These singled-sided FR-1 blanks from bantam tools are pre-cut so they fit on the spoilboard.

Double-sided Tape

To secure the PCB blank to the spoilboard, you can use double-sided scotch tape. I like to use wide tape because it gives you more coverage – just be careful the tape doesn’t overlap.

Secure to Spoilboard

The PCB is lined up with the lower left corner of the spoilboard. Material can be warped so I make sure to press down firmly and wipe the surface clean.

Endmill with the Fan Bit

The 1/32 inch flat end mill is my go-to tool whenever I’m milling PCBs. Using a fan bit keeps the dust away and it’s handy if you’re doing any sort of filming.

End mills are secured to the collet and the machine has a probing process that checks the tool z-height.


Four QT Py Heart PCBs fit on one sheet of FR-1 (127mm x 101mm). You can get the most out of your material by placing your boards closer together.

Start Milling

After going through your internal checklist, "Get Ready to Start Milling!"

Remove PCBs

Use alcohol to soften up the adhesive from the tape. A squirt bottle is great for applying to the spoilboard.

Use a thin spatula or palette knife to pry the FR-1 sheet off the spoilboard. Ideally remove the whole PCB from the spoilboard in one piece.

Clean PCBs

Wipe the PCBs clean with alcohol using paper towels. Use Scotch Brite scuff pads to lightly sand the edges and surface.

Finished PCBs

After some clean up, the PCB’s came out really nice. All four of these came out pretty clean, so we can get them ready for soldering. They only took about 10 minutes to machine, which is pretty impressive.

2MB SPI Flash

First, let’s get the 2MB SPI flash chip soldered to the back of the QT Py PCB.

Orient the Flash Chip

Use the marker on the solder mask to get the first pins oriented correctly.

Solder the Flash Chip

Tin one of the pads with solder. Using tweezers, position the  chip over the tinned pad. Heat up the solder with the tip of the iron. While the solder is molten, reposition the chip into place with tweezers.

Soldered Flash

Continue to solder each pad by adding a bit of solder to the tip of the iron and adding it to the leg of the chip. Inspected pads after soldering.

Voltage and Ground Pads

The power and ground pads on the back of the QT Py PCB should be insulated with Kapton tape to avoid shorting anything out.

CircuitPython is a derivative of MicroPython 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.

Set up CircuitPython Quick Start!

Follow this quick step-by-step for super-fast Python power :)

If you want to get started with your QT Py, and you have NOT soldered a chip to the back of it, download CircuitPython from the following link:

If you have soldered a GD25Q16 SPI flash chip to the bottom of your board, you must use the Haxpress version of CircuitPython for the Adafruit QT Py for the flash to work! If you have NOT soldered a SPI flash chip to your QT Py, do NOT use this download! It will not give you 2MB of flash space without a chip!

Click the link above and download the latest UF2 file.

Download and save it to your desktop (or wherever is handy).

Plug your QT Py into your computer using a known-good USB cable.

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

Double-click the small RST (reset) button, and you will see the NeoPixel RGB LED turn green. If it turns red, check the USB cable, try another USB port, etc.

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

You will see a new disk drive appear called QTPY_BOOT.




Drag the adafruit_circuitpython_etc.uf2 file to QTPY_BOOT

The red LED will flash. Then, the QTPY_BOOT drive will disappear and a new disk drive called CIRCUITPY will appear.

That's it, you're done! :)

Take your QT Py and plug it into your computer via a known good data + power USB cable. Your operating system will show a drive named CIRCUITPY when a board is plugged in. If you get a drive named QTPY_BOOT you'll likely need to install CircuitPython.

The QT Py with the SPI flash memory chip is called the "QT Py Haxpress" and uses different CircuitPython firmware from if you need to reflash it.

Adafruit CircuitPython 6.1.0 on 2021-01-21; Adafruit QT Py M0 Haxpress with samd21e18

Install Libraries

You'll need a few CircuitPython libraries in the lib folder on the Feather CIRCUITPY drive for the code to work. Head to to download the latest library bundle matching the major version of CircuitPython now on your board (6 for CircuitPython 6.x, etc.).

Once you've downloaded the libraries bundle, add these libraries to the lib folder on the Feather:

  • adafruit_led_animation
  • neopixel.mpy

Your QT Py CIRCUITPY drive should look like this after you load the code below.:

Upload Code

Once your QT Py is all setup with CircuitPython and the necessary libraries, you can click on the Download: Project Zip link below the code to get the files.

# SPDX-FileCopyrightText: 2021 Noe Ruiz for Adafruit Industries
# SPDX-License-Identifier: MIT

import board
import neopixel
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.color import RED

# Update to match the pin connected to your NeoPixels
pixel_pin = board.D1
# Update to match the number of NeoPixels you have connected
pixel_num = 6

pixels = neopixel.NeoPixel(pixel_pin, pixel_num, brightness=0.5, auto_write=False)

pulse = Pulse(pixels, speed=0.01, color=RED, period=1)

while True:


Get the QT Py ready to solder onto the Heart PCB. Castellated pads on the QT Py make it easy to surface mount.


Secure the Heart PCB to a stickvise and placed the QT Py PCB on top in the center.


Check the pads on both sides so they fit evenly spaced apart.

Solder QT Py Pads

Place the tip of the iron on the side and add solder. Start by tinning the tip of the iron and add it to one pad using tweezers to keep it in place. After the first pad is soldered, the rest gets easier.

Inspect Pads

To get the most mechanical strength, flood the through-hole pins with solder. Thoroughly check the solder joints are fully touching the pads.

NeoPixel Placement

Reference the board design in Eagle by either screenshot or print out. Place the first NeoPixel using the corner marker to note the ground pin. 

Solder NeoPixel

Tin the tip of the iron with a bit of solder. While holding the NeoPixel in place with tweezers, add solder to one of the pads. Once one pad is anchored, the rest gets easier to solder.

Continue Soldering

Reflow pads if needed and make sure to clean the tip of the iron with a brass sponge frequently.

Inspect Pads

Throughly inspect the four pads on each pixel.

USB-C Power

Get the PCB ready to test once all of the pixels have been soldered.

You can use a 5V USB battery to power the QT Py with a USB-C cable.

Finished Build

If everything lights up, congrats! SMD soldering skill leveled up, woohoo!

This guide was first published on Feb 09, 2021. It was last updated on Feb 09, 2021.