I have shared bit and pieces of the CheerLights origin story, but I haven’t put it all together in one place. Now that CheerLights has had its 10th Anniversary, I wanted to share the origins of the idea, some of the formable moments, acknowledge those who have helped build up our community of lights, and tell some stories about CheerLights.
In November 2011, I went to Lowes in Uniontown, PA in the United States to look for some deals. Lowes is a home improvement store and they just had moved out all of the summer/fall items like grills and patio furniture to make way for holiday things: big inflatable lawn decorations, Christmas trees, and Christmas lights. The wide array of Christmas lights caught my eye and I noticed a new type of lights from GE. These lights were the GE G-35 ColorEffects lights featuring an RF remote control to set the color of the 29 feet of string lights at a distance. The box said, “Create a spectacular color effects light show.”
Lowes had the G-35 lights out as a demo and I clicked the remote buttons and loved the effects. They were $89 US. Yikes. I walked away and continued to looked at the discount grills. My mind wondered and kept coming back to the lights. My neighbors had already put up their holiday lights and had a music show. I kept imagining my Christmas lights synchronized with their lights. Then, I kept the thought going. What if our block was synchronized? What if the entire city had their lights blinking at the same time with the same color? What if The World!? The internet could keep lights in sync!
This was my lightbulb moment, pun intended.
I took out my phone and Googled, “g-35 coloreffects arduino.” I got a few hits. I found a few folks who hacked the RF remote control, determined the signal used by GE, and shared examples of how the lights were controlled by the Arduino microcontroller.
At this point, I was 100% certain that I could get these lights controlled over the internet. I bought two sets of the GE G-35 ColorEffects lights and the rest was history. Wait, wait, wait. Not so fast. This is just the beginning of the story.
I had two choices to control the GE lights: bypass the inline controller with an Arduino or create an RF transmitter that could send the control signals. The library that I found during my online research bypassed the controlled and used an Arduino to send the control signals. I had all of those parts handy so that is the direction that I went in. I even made a long explainer video about how I did it. I bypassed the signal wire from the GE controller and connected the signal and ground to the Arduino. The Arduino would send the control signal to the lights instead of the remote control. Then, I used the ioBridge Web Gateway to take color commands from a web API. All of the parts were in place to control the lights from the internet. I had a lot of fun controlling the lights from a webpage and I sent around the link. My friends were controlling my lights strung around my room.
To make the challenge of synchronizing lights a bit simpler, I decided to see if I could get my lights and my friends lights to stay the same color. So, when I changed my color, their lights changed to the same color. I used ThingSpeak to pull this off. ThingSpeak is an IoT platform that I created the year before. In my life ThingSpeak was a hammer and everything was a nail. I was always looking for ways to use ThingSpeak and I made it work. I created ThingSpeak Channel #1417 and used the channel to save a color name. My lights and my friend’s lights would check the ThingSpeak channel for the color and set themselves to that color. Now, I could synchronize the colors of individual lights.
I really wanted millions of lights staying in sync with each other. That’s what I kept imagining, so I thought of using Twitter. What if someone could tweet a color and that color would control all of the connected lights? Yes! That was the last piece of the puzzle. I went to Twitter and created a new username: CheerLights.
The idea behind the name CheerLights is the idea that cheer spreads like I was thinking that a color would do as lights changed all around the world.
I wrote a little service in Ruby that listened to the Twitter Firehouse and filtered out all of the tweets looking for ones that mentioned “cheerlights” somewhere in the text. This service became TweetControl, an app that used to be on the ThingSpeak platform. Then, I looked for a color name and if one matched, I saved the color in the CheerLights ThingSpeak channel.
I sent the first CheerLights tweet on November 30, 2011. This tweet changed exactly one set of lights to blue. This is where it started.
Building a Community
The only problem at this point was that I was the only person with a CheerLights display. I had three followers on Twitter and some friends who expressed interest. To get the project going, I did a few things to build a community:
- Sent 30 direct messages to people who might want to join in the project
- Created a handful of explainer videos and posted them on YouTube
- Created a website
- Published tutorials
- Open sourced all of the code on GitHub
These activities helped a community to start. I wanted to make it easy to join, so I had to teach, create awareness, and answer every question that I could on the Arduino, Adafruit, ioBridge, and ThingSpeak forums.
I introduced the CheerLights project to HackPGH, a makerspace in Pittsburgh, PA in early December 2011. I gave a presentation about the CheerLights project and helped the members build a set of lights. I was lucky to recruit a couple of people to build their own light displays and they linked their lights to mine using the same public ThingSpeak channel.
The big moment came on December 3, 2011 when Matt Richardson wrote an article on the MAKE Magazine website. Matt wrote about the project, linked to the website, and shared my teaser video. This really helped get the word out and I soon was gain more followers on Twitter and I was getting messages about new CheerLights displays that were joining the project.
I also went to a Ruby meetup and talked about the Twitter Ruby Firehouse Listener. project at the heart of CheerLights Someone from that group built a webpage that listened to the CheerLights color and set the background color of the page to it. They didn’t know about hardware and Arduino, but they did know a lot about web applications. This was also a big moment in the project. It got me to think about other ways to be informed of the CheerLights color. Other people created an iPhone app that displayed the color, an Android app, Chrome Extension, and even a Commodore 64 program. People really surprised me and that is one of the many gifts of a community.
Keeping My Energy Up
One thing that I reflect on is the idea of sustaining your interest in a project. It is easy to give up or just lose interest especially in the early parts of a project. I sent out a tweet from the ThingSpeak account on December 2, 2011 to introduce the CheerLights project. I got one like on that tweet by Andy Piper (who now works at Twitter). And, if you know me, you know how much I love Twitter projects. That single like really helped me keep going. In a project lasting over 10 years, there are lots of little moments that help keep you going. Thank you for the first one, Andy.
How Can You Help?
We are always looking for new people to join CheerLights. You don’t have to be a hardware expert to take part. Your ideas and your energy to get the word out are also very helpful.
- Join the CheerLights Discord Server and share your projects and ideas and learn from others
- Contribute examples to GitHub
- Subscribe to the CheerLights blog for news, projects, and inspiration
- Follow CheerLights on Twitter
- Tweet @CheerLights with a color name to keep the lights changing
- Make something new with CheerLights and surprise all of us!
I have been working on a few new things that I will be discussing with folks on the CheerLights Discord Server . But, the main thing that I have been working on is some training materials for learning IoT with CheerLights. I have some introductory course material for helping people learn IoT concepts by learning about CheerLights. I also teach how to take the basic idea of CheerLights and make something new.
Thanks to the Community
I would like to offer a special thanks to Andy Leer from that HackPGH night, Paul from Digital Misery for publishing the G-35 Arduino library at a timely moment, Andy Piper for your encouragement along the way, Matt Richardson for jumpstarting this project with a blog post, and to Andy Stanford-Clark for your continued support and promotion of CheerLights around the world!
And, a big thanks to the community. I love seeing people learn IoT, hardware, Arduino, and programming with the CheerLights project. I also love to see the creative ways people join CheerLights.
We are all connected.