Overview
Adorn yourself with a gorgeous crown that looks like it's made of ice. This crown glows and pulses and twinkles in a magical flurry of lights, completing your Snow Queen costume in a most glorious way. This lightweight, comfortable icicle crown is made of hot glue and cellophane and glows with Adafruit's Pebble Pixel lights embedded inside. The crown is controlled by an Adafruit QT Py Pico and LiPoly BFF, so you can power the lights for hours with a tiny, lightweight lipoly battery.
The BFF also adds onboard battery charging, and there is a clicky on/off switch, so it's easy to turn on and off. Use the free, open source WLED software to control the crown, so you can make animation modes, control brightness, and change colors with your smartphone over a WiFi network. You may easily sync the crown to other costume pieces built with the same setup.
This project uses a lipoly battery because it's very tiny and packs a punch in terms of power. My crown is set to a fairly low brightness and it runs for hours on this tiny battery. If you plan to wear the crown for more than a couple hours, you may want to pick up 2 batteries so you always have a charged one.
The BFF gives us onboard battery charging for LiPoly batteries, so if you wrap the battery up in lots of tape it'll stay pretty safe. Don't puncture these batteries or get them wet as they can catch fire.
If you're planning to make this for a child, you may want to consider using AAA batteries instead. It's much bulkier and less glamorous to do it this way, but it's definitely safer. Clip the battery pack to their clothing or drop it into a hood.
And here are a few more good things to have on hand for electronics projects:
Additional Materials & Tools
- Low-temp Hot glue gun and LOTS of glue sticks
- Soldering iron & accessories
- Alligator clips
- Flush cutter snips
- Wire strippers
- Iridescent Cellophane gift wrap
- White electrical tape to hide the electronics
- Wig head or hat block
- Gems and sparklies for decoration
- Bridal hair combs
Page last edited January 08, 2025
Text editor powered by tinymce.
Wiring Diagram
The QT Py ESP32 Pico tacks back-to-back with the power breakout BFF using headers. The NeoPixel pebble pixels plug into the Stemma port on the QT Py: Black to G, and blue to DI. The +5v wire is broken out and soldered to +5v on the QT Py. The red and yellow wires on the Stemma QT cable are not used and may be cut short when the project is working.
The blue stemma wire connects to pin 22 on the QT Py, so that's the number we'll enter under LED Settings in WLED.
This project uses 50 pixels in the crown, which is why we can't power them through the red wire on the stemma port -- they just pull a bit too much power. If you have fewer than around 30 pixels in your project, check out this Star Crown tutorial for a slightly simpler wiring strategy.
NeoPixel strips have an IN and OUT end. Be sure you're connecting to the IN end or the pixels won't light up. This is sometimes inconsistent with different lots of pixels so it's a good idea to test before committing with a solder joint. On the build page I'll give some tips about how to figure out which end is which.
The USB port on the QT Py is now available to use as a charging port. This BFF breakout adds USB battery charging to your project. Neat!
Page last edited January 08, 2025
Text editor powered by tinymce.
WLED Software
Board Choices
WLED runs on several different boards in Adafruit's collection. There are different benefits to each, but the installation process is largely the same. This page contains instructions for multiple boards -- be sure to use the pinouts and installation instructions for the one you're using,
Sparkle Motion
This is our flagship ESP32 board, designed with WLED and Xlights in mind. It has 4 outputs and is set up to drive either 5v, 12v or 24v pixels. It's a workhorse of a board and for larger projects it's the clear winner. It has an onboard microphone for instant sound-reactive support, and an IR sensor built in, to make it easy to control your project with an infrared remote. It also has a couple stemma ports so you can add your own sensors or peripherals.
Sparkle Motion Mini
The Sparkle Motion Mini is a smaller version of the Sparkle Motion board. It has two LED outputs, a microphone, and two stemma ports that make it easy to add an IR sensor or other peripherals. It's got an onboard NeoPixel and a small footprint, making it perfect for wearables or smaller projects. It will power a whole lot of pixels through the onboard USB port: it's safe to draw up to 4A through this port, giving you plenty of power for most wearable projects.
QT Py Pico ESP32
The QT Py Pico is small and affordable, so usually my go-to for smaller costumes or wearables. It also has a range of BFF add-on boards that add functionality. Here's a guide with more QT Py info. The QT Py will drive up to around 30 pixels through the onboard USB port, so if you have more LEDs than that you may want to consider the Sparkle Motion Mini instead, or you can power the board through the +5v pin.
Note: WLED works on the QT Py Pico but NOT on the S2 or S3 versions, at the time of writing.
Feather Huzzah ESP32
The Feather Huzzah ESP32 the top of the line. It's a great choice for projects where you want to add sensors, interaction, or drive a whole lot of LEDs. It's the most reliable as well -- I've run these for two months straight with no power cycling and they just keep on truckin. Adafruit has a very wide selection of Feather Wing boards that connect to the Feather microcontroller line. The sky is the limit with these boards.
It also comes in a version with a high-powered WiFi range extender! If you're trying to sync multiple instances across distance, check this one out. Feather Huzzah ESP32 V2 w.FL Antenna
Feather Huzzah ESP8266
The Feather Huzzah ESP8266 will run WLED as well, but won't drive as many pixels: the ESP32 limit on WLED is around 1000 pixels per input, but the ESP8266 tops out at around 500. It's about $5 cheaper though, so for smaller projects it's a great way to save a little money and still have access to all the Featherwing options in the Adafruit store.
Driver Update
Some versions of our controllers have a new serial chip which needs a driver installed before we can install WLED. Head over to our How to Install Drivers for WCH USB to Serial Chips tutorial, and download and install the new driver.
If you have an older QT Py with CP2102 USB-to-Serial bridge, use SiLabs’ driver instead.
Install WLED
These next steps require a Web Serial-compatible browser. As of this writing, that means Google Chrome, Microsoft Edge or Opera ,or Firefox “desktop” browsers. Other browsers (Safari, Explorer and anything mobile) won’t work.
Visit https://install.wled.me/
Plug your microcontroller into your computer with a known good USB cable. Click "Install" and select the port for your board.
Depending on the USB-to-serial bridge chip on the board, you might see one or two serial ports. On Mac, for instance, there might be both “/dev/cu.usbmodem[number]” and “/dev/cu.wchusbserial[number]”. Use the “wchusbserial” one.
After successful installation, enter your WiFi network name and password when prompted. This must be a 2.4 GHz WiFi network; ESP32 does not support 5 GHz networks. If it can’t connect, then as a fallback WLED will create its own 2.4 GHz WiFi access point.
If you don't see the "Connect to Wi-Fi" prompt, you'll need to set up your WiFi network using AP (access point) mode. Open up your WiFi settings and look for a WiFi network called WLED-AP. (Note, this access point can take up to 30 seconds to appear sometimes.) Connect to this network using the default password wled1234. The WLED interface will pop up in its own captive browser window.
From here, go into Config/Wifi Settings and enter your WiFi credentials for the access point you normally use near the top.
Give your project a name in the mDNS field a little further down the page. Now you can type in "projectname.local" (where "projectname" is your mDNS name) into any web browser on the same wifi network to access your microcontroller.
You can also scan the QR code below to open access point mode.
For more help and troubleshooting tips visit the Getting Started page on the WLED knowledge base.
WiFi Setup
Head to the WiFi Setup screen under Config and create a good URL so you can control your project from any web-enabled device. Call it something you'll remember, that's easy to type into any web browser on your WiFi network in order to connect to your project.
In Safari or Chrome on your phone or computer, type in this web address to access the WLED interface: http://projectname.local (where "projectname" is whatever you put into this field).
Check out the Additional Settings page for more info on accessing your project. WLED has an "access point mode" that doesn't require a WiFi network for when you're out on the go. It's also helpful to download one of the WLED apps to help manage and organize your projects.
LED Preferences
Next, head to the LED Preferences tab under the Config menu.
Scroll down to Hardware Setup. Put your total number of LEDs into the "Length" field, and change GPIO to the pin number associated with the pin you soldered to. Check the pinout diagram for the board you're using (it's the number in yellow).
Now you can use any computer or handheld device to control your LEDs.
Make sure your device is on the same WiFi network as your board. Navigate to your custom URL (projectname.local/ ) in a web browser. You'll see a color picker above a whole bunch of color palette choices.
Choose a color, choose an effect, and watch your lights animate and glow!
Save your favorite combinations as presets, create playlists, control the speed and intensity of the animations, and lots more. This web app is incredibly intuitive and easy to use.
Head over to the WLED wiki at https://kno.wled.ge/ to delve into all the particulars.
Page last edited January 08, 2025
Text editor powered by tinymce.
Electronics Assembly
If you're new to soldering headers, check out this handy How to Solder Headers guide for some tips.
Place the headers included with the QT Py short side-up into a solderless breadboard. Solder the QT Py face-up on top of the headers.
Pull the QT Py out and sandwich the BFF on the back of the board, with the USB port and battery port facing the same way and the boards back-to-back.
Solder the headers in place on the BFF. I find it easiest to tape the QT Py to the table to hold it still for this process.
DO NOT TRIM THE HEADER LEGS YET.
First, find the +5v pin on the QT Py. This is the pin we need to connect to in order to power our pixels safely. We've just made this harder by soldering headers into the through-holes, but we can still connect to the pin if we solder a wire to the remaining header leg.
I trimmed all the other legs so they're short and out of the way, but left this one long to give myself something to solder to in the next step.
Which Wire is Which?
Take a look at your NeoPixel strand. It ships with a male connector on one end an a female on the other, but it's a long strand so we're going to cut it into pieces. You can cut between any of the LEDs and the strand will continue working. The tricky bits are 1. figuring out which wire is which, and 2. soldering to those short pesky wires.
Look closely at the wires and you'll also see that one of the wires is marked -- it has tiny dots / stripes all along the length. This is the power (+5v) wire. It's soldered to the red wire on your connector. The black wire is on the far side and is connected to G, leaving the middle wire (green) as the data wire.
NeoPixel strips and strands are directional. There is a data IN end and a data OUT end. The red and black wires could connect at either end, or somewhere in the middle, and the strip will work fine, but that data wire must be connected at IN end or the pixels won't light up.
There's no industry standard for which connector comes on the IN end. Some strands of pixels have male on the IN, some have female. This is kind of annoying, since it means we've got a 50/50 chance of guessing right.
Cut your LED strand right behind one of the pixels to give yourself as much wire to work with as possible. Separate the 3 wires. This is harder than it seems: these wires are solidly stuck together. I found it easiest to use a pair of flush cutters to carefully snip in between the 3 wires. These are easily one of my favorite tools!
Then, use a good pair of wire strippers to strip about 1/4 of shielding off all three wires.
Prep your Stemma QT connector also. Trim the yellow and red wires to get them out of the way. We're just using the blue and black for this project -- but if you wanted to add sensors or a microphone, these wires are available for such things.
Next, you'll want to confirm which wire is which before soldering. Grab your alligator clips. Connect the wire with the copper coil to the +5v header pin, the blue Stemma QT wire to the middle wire, and the black Stemma QT wire to the remaining wire.
Make sure nothing's shorting (the clips aren't touching each other) and connect the QT Py to power. You can use either the USB port or the JST battery port. If you've got it right, the lights will come on.
If you've got lights, go ahead and solder up the connections. Splice the two wires to the Stemma QT connector together. For the red 5v wire, strip about 1/2" of shielding and slide on a small piece of heat shrink. Wind the bare wire around the header pin a few times as best you can, and solder it in place. Tug gently on it -- the physical connection should be such that it doesn't pop right off. Cover with your heat shrink.
Splice the black and blue wires from the Stemma QT connector to the corresponding wires on the LED strip and plug the stemma connector into the QT Py.
Troubleshooting
If your lights didn't come on, here are a few things to try:
- Flip the on/off switch on the BFF. Was it just turned off?
- Head back to WLED and check your pinout configuration under LED Preferences. Be sure you've told WLED that we are using pin 22 (blue wire.. check the pinout)
- Check your wiring! Be sure you soldered to the IN end of the LED strip. These strips can be inconsistent so this is a pretty common problem. Use an alligator clip to try the data wire on the other end.
- Try re-uploading the WLED software.
- If the lights come on but you can't control them, make sure you're on the correct WiFi network - if you're on a different network you won't see the WLED connection.
Color Order
Normally when WLED first boots up, the default is a warm yellow light color. But our lights didn't boot up in yellow.. they booted up in blue. What gives?
Open the WLED interface (open snowcrown.local or whatever you named your project in a browser window). Choose "solid" as your effect and red as your color from the color picker.
If your lights come on in any color other than red, your color order is set incorrectly. This is an easy fix. Head to the LED settings tab and find the Hardware Setup section (this is where you set up your pin number earlier). Choose BRG from the dropdown, click save, and see if your pixel colors match your color picker now. If not, try another combo until the lights look correct.
FYI: This can be a problem when mixing different types of strips or strands. Normally you can solder together any kind of NeoPixels as long as you match the pins and get the data order right. But if the color order is different on one of the strands, there's no way to tell WLED to treat the different parts of the strand differently.
You can solder different strands to up to 3 pins, and you can control the color order independently on each pin with WLED. It's only a problem if you try to connect a different type of pixels to the end of this strand.
Page last edited January 08, 2025
Text editor powered by tinymce.
Build the Crown
Cut a smallish piece of cellophane wrap. This will become the core of the icicles. Use an awl or other pointy object to spool this into a spike shape and secure it with a bit of hot glue.
Make a whole bunch of these in different lengths and thicknesses.
Heat up a low-temp glue gun and have lots of glue sticks ready. I put some oil on a glass plate to give myself a nonstick surface. Decorate the spines with squiggles of glue until you've got a big pile of lovely icicles.
A high-temp glue gun will make the cellophane melt and crinkle, so low-temp really is the way to go here.
Measure your head and make a circle of glue that's a little larger than the measurement. Do a couple layers, then peel it up and try it on. If it doesn't fit, you can cut it and adjust. I want my crown to sit just above my temples.
I cut the front and made it come to a "v" shape since I really like that aesthetic.
Plug your on/off switch into the JST port on your QT Py BFF and then wrap the controller and wires in white electrical tape. We want to make it disappear and blend in to the glue.
I'm using a larger size wig head - the "male" wig head that's available just about anywhere wig heads are sold. His measurement is close to my tiny head size. If your head is bigger, wrap a few layers of duct tape around so your circlet fits the wig head, and also fits your head.
Stretch some plastic over the wig head to give your circlet something to adhere to. I found a gallon ziploc bag was just the perfect size. Pin your circlet onto the wig head through the plastic.
Place the controller up high on the forehead. Start gluing the lights to the circlet, making sure they're facing up and out for best effect. These lights are directional so you'll get more brightness if the resin bump is facing outwards.
Glue all the lights around and around, concentrating more of them in the front.
Once all the lights are on, trim the plastic along the bottom. Try it on again at this stage and make sure it's fitting the way you want. You can use a heat gun to re-melt the glue and stretch or squish it if needed. Just be careful about pointing that heat gun at your wig head, because he will melt!
Time to add the icicles. Trim the bottoms as needed to give yourself a nice array of heights. I think they look best with the tallest in the middle, but .. your crown, your way. Fill in any voids or gaps between the icicles with more hot glue.
Once they're all on, trim off any more extra ziploc plastic.
I made a battery pocket out of white felt fabric and glued it along one side behind the spines. I glued the switch cable along the other side and placed the switch just inside the spines at the back so I can reach it easily.
The QT Py is glued just behind the spines in the front.
To hold the crown on my head, I used plastic combs glued onto the inside of the circlet. This works ok, but the crown isn't all that secure on my head. I may add some hair clips or a headband to make it stay a little better.
Page last edited January 08, 2025
Text editor powered by tinymce.
WLED Additional Settings
WLED automatically limits the brightness of your project so your power supply doesn't get over-taxed. The default amperage is 850mA, which is a little low for most power supplies.
For some projects, especially battery-powered projects, having the limiter turned on is a good idea. But if you're not getting the brightness you expect, try adjusting this number to match the amperage of your power supply or battery pack.
Access Point (AP) Mode
While you're home, it's easy to control your project over your local WiFi network. But when you're out at a festival you probably don't have WiFi access. It's still possible to connect to your project and control it using WLED's Access Point Mode.
Turn your project on and give it a minute or two to start broadcasting. Look in your WiFi networks and find WLED-AP - this is a mini WiFi network being broadcast by the microcontroller. Connect to it - the default password is "wled123". An instance of WLED will automatically pop up and you can control your project from anywhere.
If you're putting your lights up in public, it's a good idea to change the AP Mode default password so strangers can't log in and control your lights. This could be a security risk.
AP Mode only broadcasts for a few minutes after you boot up the board so if you don't see the WLED-AP network try rebooting.
There are a couple different apps available to manage your WLED projects. Name and organize your projects, and find them quickly without having to type in a URL. Check the Apple or Android store for downloads.
My favorite is "WLED Native". It allows you to organize multiple instances and easily switch between devices without having to remember any URLs.
Under Config / Security & Updates you will find a place to back up your data. It's a good idea to back up your config file as soon as you're happy with the settings. Save it as a .json file on your computer. Now you can prototype and experiment to your heart's content, and if everything breaks, just re-upload this file. Or, if you're doing another build you can use this feature to copy all your settings from one board to another.
Page last edited January 08, 2025
Text editor powered by tinymce.
Programming in WLED
Now it's time for the fun part: make the lights animate and glow and twinkle! This is easy in WLED: you've got a design interface with buttons and sliders and color palettes that all update and animate in real time. What a departure from the Arduino code wrangling one had to do just a few years back! WLED makes programming lights accessible to anyone, coder or not.
Head to snowcrown.local (or whatever you named your crown during setup) on your phone or in your web browser. The crown needs to be powered up, but not plugged into your computer -- it will connect over the WiFi. Be sure you're on the same WiFi network you set up in settings or you won't be able to connect.
Backing Up Presets
Once you're happy with your animations, go to Config / Security & Updates (from your computer) and choose "Backup Presets". This will save your presets as a .json file you can share with your other projects.
Page last edited January 08, 2025
Text editor powered by tinymce.