This guide was motivated by a really cool project we saw go by online. The idea is to create an alarm clock for kids that uses colors instead of an actual clock face. A night time color means "keep sleeping" and a sunrise color means "wake up! time to play!". Great for youngsters who are not quite ready to read a clock (or struggle to in the morning)
Here's a link to the original project which is based on a Raspberry Pi:
The origami used to make the lamp structure is amazing!
The lamp is really nothing more than: (1) grab current time from internet, (2) wait for wake up time, (3) and then do something with NeoPixels. Can an Internet connected Raspberry Pi running a full linux operating system do this? Yes. Easily. Without even breaking a sweat. Might even be overkill to use a Pi. But when a wifi capable full linux compy can be had for $10, why not?
Throwing a $10 linux compy at a trivial task is fine, assuming said hardware is actually available. However, Raspberry Pi's are currently very difficult to come by.
There's an unfortunate combination of limited supply with ongoing high demand. Bot driven resellers are buying up stock and reselling them for crazy marked-up prices. Resellers (like Adafruit) are trying to thwart these efforts with various purchasing limits and requirements. For people that just want to make fun Pi based projects, all this just leads to anguish and heart ache trying to get hands on a Pi. The original tweet that caught our eye bemoans this as well:
Remember when Pi's were given away free on the cover of magazines? Ah...good memories from the before times.
But wait! There is hope!
A Raspberry Pi is not the only option for "connecting to the Internet" and doing stuff. There are simpler microcontrollers, like the various ESP chips, that can do this. Sure, they won't be pulling down terabytes of data and running numpy. But they can do relatively simple things - like grab time from the Internet. And they can also readily drive NeoPixels.
In this guide we show how to recreate the Sunrise Lamp project using an ESP32-S2 based board. There are numerous ESP32-S2 options, but to keep things extra smol, we use a QT Py.
There's one with a built in antenna:
Or with a uFL connector for attaching an external antenna:
Just like the original project, we use a 12 NeoPixel ring:
But any NeoPixels could be used.