NeoPixels: Five Years In @adafruit #neopixels
It was several years ago at Maker Faire that I first got my hands on some addressable LEDs — an RGB LED, driver IC and small PCB encased in a fingertip-sized plastic capsule. Working with these, I distinctly recall pondering if we’d ever see all of this integrated into a single component. “Maybe in five years,” I figured. “And maybe if they recover the technology from a crashed UFO.”
Well don’t count on me for picking racehorses or stocks either, because my guess was off by an order of magnitude, and just a few months later was staring down my first “World Semi WS2812 Intelligent Control LED Integrated Light Source” (or what would soon be known as a NeoPixel, hold that thought).
These addressable LEDs were small, inexpensive, and featured a single-wire protocol for microcontroller interfacing. This simplified things like PCB layouts, making rings and other shapes possible. In flexible strip form, their “one pixel, one cut” convenience (other LED strip types ranged from two to six pixels between cut points) scratched the creative itch, freeing ideas from odd physical constraints. Though not perfect, they filled a vital creative niche and have persisted ever since, evolving new capabilities and form-factors (RGB + white, mini 3.5mm pixels, hardier “WS2812-compatible” devices, strips in increasing pixel densities and who knows what’s next).
Adafruit was already making a WS2811-IC-and-RGB-LED product (then called “Flora RGB Smart Pixel”). With the fully integrated WS2812 component, a slimmer and more affordable Flora pixel would be possible. But the new device’s faster single-wire protocol would require new Arduino code, possibly with some inline assembly language. Ladyada, being busy at the time, asked if I could take a look…
Starting from her existing library code, I got a prototype working in a couple of days, though I had some lingering doubts…AVR assembly is not my native tongue. So, to avoid messing up the known-working “V1 pixel” code, I renamed everything in the new library so the two could exist side-by-side for testing. If the prior code was for the “old” pixels, then this new code must be for “new” pixels, and with little thought I just called it “NeoPixel” and threw it up on Github for testing…five years ago today. 12/12/12.
The code tested fine. Not only that, but getting down to work the next day, I was surprised to find all these LED products in the shop now labeled “NeoPixels.”
Unbeknownst to me, Adafruit had been searching for a better name than “WS2812 Intelligent Control LED Integrated Light Source,” something that, in one simple word, would tell people, “addressable LED backed by open-source code, lots of examples and projects, a positive community and Adafruit technical support.”
And that’s the origin story of the word “NeoPixel.” No focus groups, no branding specialists. Just kicking back and programming in sweatpants. Sorry to destroy any illusion you might have had. Sweatpants!
Five years in, the breadth and scope of NeoPixel projects has exceeded even my wildest expectations. Practical signage, creative expression, movie sets, Burning Man installations with tens of thousands of LEDs, and some of my favorite stuff is in wearables and cosplay! And in another five years? Well, my record for prognostication is clearly pretty bad, but it’s a safe bet to say we’ll be surprised all over again (nearly said “delighted,” but no, we’ll be extremely lighted).
Thought exercise: One of the most popular NeoPixel form-factors is the 60 LED/meter flex strip. NeoPixel data is clocked at 800 KHz…that’s 1.25 microseconds/bit, or 30 microseconds per 24-bit pixel. One meter of this strip (60 NeoPixels) therefore takes 1,800 microseconds to refresh (not counting the 50 to 300 microsecond latch time at the end of the data, which is the same regardless of strip length), so we could estimate that NeoPixel data (at this particular strip density) travels at about 555.555 meters/second. There’s about 31,557,600 seconds in a year on average (allowing for leap years but ignoring the occasional odd leap second)…so, in those intervening five years (157,788,000 seconds), we could have refreshed one enormously long 87,659,912,340 meter strip — that’s beyond the orbit of Mars, or more than halfway to the Sun, depending on which direction you unrolled the strip. With all 5.25 trillion NeoPixels set white at 100% brightness, you’ll need a bit over 300 billion Amps at 5 Volts (a mere 15% of the world’s electric output), so please choose wire of an appropriate gauge and make power connections periodically to prevent dim pixels along the length of the strip, thanks.