Build an LED ornament inspired by Spiderman's Green goblin! 

Use the built-in LEDs on the Circuit Playground Bluefruit and an additional NeoPixel ring on the back to illuminate on both sides of the ornament! 

The 3D printed shell fits over our 6cm DIY ornament with a printed mount to hold the Circuit Playground Bluefruit and 16 NeoPixel ring.

Use CircuitPython to easy edit the color, animations or even motion or add sounds with the build-in speaker on the Circuit Playground Bluefruit! 


Easily power up the Ornament with an Adafruit Micro-Lipo Charger! 

Simply plug it via USB cable into a USB port and our lipo rechargeable battery into the JST plug on the other end. There are two LEDs - one red and one green. While charging, the red LED is lit. When the battery is fully charged and ready for use, the green LED turns on. Seriously, it could not get more easy!


The Circuit Playground Bluefruit is powered by a 500mah battery.

Components snap fit on to a 3D printed mount. The mount press fits into a 6cm plastic ornament. Printed outer shells attach to each half of the ornament.

shot of a Black woman's neon-green manicured hand holding up a Circuit Playground Bluefruit glowing rainbow LEDs.
Circuit Playground Bluefruit is our third board in the Circuit Playground series, another step towards a perfect introduction to electronics and programming. We've...
Out of Stock
Hand holding NeoPixel Ring with 16 x 5050 RGB LED, lit up rainbow
Round and round and round they go! 16 ultra bright smart LED NeoPixels are arranged in a circle with 1.75" (44.5mm) outer diameter. The rings are 'chainable' - connect the...
In Stock
6cm Diameter DIY Ornament Kit with Circuit board inside
Have you put up with mainstream, uninspiring, low-tech tree ornaments for too long? This season why not deck the halls with codes of holly?This DIY Ornament...
In Stock
Angled shot of a Lithium Ion Polymer Battery 3.7V 500mAh with JST-PH connector.
Lithium-ion polymer (also known as 'lipo' or 'lipoly') batteries are thin, light, and powerful. The output ranges from 4.2V when completely charged to 3.7V. This...
In Stock
Adafruit Micro-Lipo Charger for LiPo/LiIon Batt w/MicroUSB Jack connected to battery.
Oh so handy, this little lipo charger is so small and easy to use you can keep it on your desk or mount it easily into any project! Simply plug it via any MicroUSB cable into a USB...
Out of Stock

The diagram below provides a visual reference for wiring of the components. This diagram was created using the software package Fritzing.

Use Adafruit's Fritzing parts library to create circuit diagrams for your projects. Download the library or just grab individual parts. Get the library and parts from GitHub - Adafruit Fritzing Parts.

Wired Connections

The Circuit Playground Bluefruit is powered by a 500mAh battery.  

NeoPixel Ring

The back side of the ornament is illuminated by a 16 NeoPixel Ring.

  • V+ from NeoPixel Ring to Vout on Circuit Playground 
  • G from NeoPixel Ring to GND on Circuit Playground
  • IN from NeoPixel Ring to A1 on Circuit Playground

Install or Update CircuitPython

Follow this quick step-by-step to install or update CircuitPython on your Circuit Playground Bluefruit.

Click the link above and download the latest UF2 file

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

Plug your Circuit Playground Bluefruit into your computer using a known-good data-capable 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 Reset button in the middle of the CPB (indicated by the red arrow in the image). The ten NeoPixel LEDs will all turn red, and then will all turn green. If they turn all red and stay red, check the USB cable, try another USB port, etc. The little red LED next to the USB connector will pulse red - this is ok!

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

(If double-clicking doesn't do it, try a single-click!)

You will see a new disk drive appear called CPLAYBTBOOT.




Drag the adafruit_circuitpython_etc.uf2 file to CPLAYBTBOOT.

The LEDs will turn red. Then, the CPLAYBTBOOT drive will disappear and a new disk drive called CIRCUITPY will appear.

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


Once you've finished setting up your Circuit Playground Bluefruit 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 as a zipped folder.

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
# SPDX-License-Identifier: MIT

This example shows different ways to use AnimationGroup: syncing four animations across two separate
pixel objects such as the built-in NeoPixels on a Circuit Playground Bluefruit and a NeoPixel Ring.

This example is written for Circuit Playground Bluefruit and a 16-pixel NeoPixel ring connected to
pad A1. It does not work on Circuit Playground Express.
import board
import neopixel
from adafruit_circuitplayground import cp

from adafruit_led_animation.animation.blink import Blink
from adafruit_led_animation.animation.comet import Comet
from adafruit_led_animation.animation.pulse import Pulse
from adafruit_led_animation.animation.sparkle import Sparkle

from import AnimationGroup
from adafruit_led_animation.sequence import AnimationSequence

import adafruit_led_animation.color as color

strip_pixels = neopixel.NeoPixel(board.A1, 16, brightness=0.5, auto_write=False)
cp.pixels.brightness = 0.5

animations = AnimationSequence(
    # Synchronized to 0.5 seconds. Ignores the second animation setting of 3 seconds.
        Sparkle(cp.pixels, 0.1, color.GREEN, num_sparkles=1),
        Sparkle(strip_pixels, 0.1, color.GREEN, num_sparkles=1),
        Blink(cp.pixels, 0.25, color.RED),
        Blink(strip_pixels, 0.25, color.RED),
    # Different speeds
        Comet(cp.pixels, 0.05, color.GREEN, tail_length=5),
        Comet(strip_pixels, 0.05, color.GREEN, tail_length=5),
        Pulse(cp.pixels, 0.05, color.RED, period=3),
        Pulse(strip_pixels, 0.05, color.RED, period=3),

while True:

Upload the Code and Libraries to the Circuit Playground Bluefruit

After downloading the Project Bundle, plug your Circuit Playground Bluefruit into the computer USB port. 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 Circuit Playground Bluefruit's CIRCUITPY drive. 

  • lib folder

Your Circuit Playground Bluefruit CIRCUITPY drive should look like this after copying the lib folder and file.

Parts List

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. Original design source may be downloaded using the links below.


Slicing Parts


Supports are required. Slice with setting for PLA material. 

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

  • PLA filament 220c extruder
  • 0.2 layer height
  • 10% gyroid infill
  • 60mm/s print speed
  • 60c heated bed



  • Support Extrusion Width: .2
  • Support Density: 4%
  • Support Overhang Angle: 80
  • Support Z Height: .21
  • Interface: On
  • Support Roof: On
  • Support Pattern: Zig Zag
  • Support Roof Pattern: Zig Zag

Build Plate Adhesion 


  • Type: Brim
  • Line Count: 6
  • Brim on inside + outside

Solder NeoPixel ring


Measure and cut wires to connect the Circuit Playground to the 16 Neopixel ring. Use third helping hands to hold the boards steady while soldering.


CPB mount


Align the slit on the printed Circuit Playground mount to allow the wires to pass through. Align the JST port to the slit on the printed mount.

Press fit NeoPixel ring


Center the ring to the mount and press one side of the ring until it press fits into the wall around the printed mount.

Insert battery


Align the battery between the Circuit playground standoffs. Carefully bend the battery cable towards the slit on the printed mount.


Press fit Circuit Playground


Use the snaps on each side of the mount to hold the Circuit Playground in place. Place one side of the board under one of the snaps. Gently press the opposite side of the board to attach it to the mount.

Press fit mount into Ornament


Plug the battery into the JST port on the Circuit Playground. Allow the battery cable to press against the wall of the ornament. Gently press fit the printed mount into the Ornament. 



Use a sheet of parchment paper to help diffuse the ornament.

Align the tabs on the each half of the ornament and press fit both sides together.

Attach Printed shells


Align the bottom printed shell to the tabs on the ornament. Press fit the tab into the printed shell. 

The optional screw mounts on the sides of the shells are used to help align both halves together. Apply a small amount of force to snap fit both shells together. 

Add a hook to adorne to a tree or use as a stand alone prop for a Green Goblin cosplay!

This guide was first published on Nov 03, 2021. It was last updated on Jun 12, 2024.