During the holidays, I embarked on a fun project to create a visual countdown for important dates. Inspired by howmanysleeps and hometime from veebch, I wanted to build a countdown that didn't rely on Google Calendar. Instead, I used a Raspberry Pi Pico and some custom code to achieve this.
💾 You can find the full code on GitHub
What It Is
This project consists of two main parts:
- Python code for the Raspberry Pi Pico
- A .NET website to update the configuration, allowing you to set:
- The important date
- Two custom colors or random ones
- The RGB values for the custom colors
What You Need
- Raspberry Pi Pico
- Azure subscription
- BTF-LIGHTING XGB1338(WS2812B) LED Strip DC5V with Individual Addressable LED
- Azure Developer CLI (azd)
How to Deploy the Configuration Website
After cloning the repo, navigate to the src/NextEvent/
folder and use the Azure Developer CLI to initialize the project:
azd init
Enter a meaningful name for your resource group in Azure. To deploy, use the deployment command:
azd up
Specify the Azure subscription and location when prompted. After a few minutes, everything should be deployed. You can access the URL from the output in the terminal or retrieve it from the Azure Portal.
How to Set Up the Raspberry Pi Pico
Edit the config.py
file to add your Wi-Fi information and update the number of lights on your light strip.
You can use Thonny to copy the Python code to the device. Copy both main.py
and config.py
to the Raspberry Pi Pico.
How It Works
- The website creates a JSON file and saves it in a publicly accessible Azure storage.
- When the Pi is powered on, it will:
- Turn green one by one all the lights of the strip
- Change the color of the entire light strip a few times, then turn it off
- Try to connect to the Wi-Fi
- Retrieve the timezone, current date, and settings from the JSON file
- If the important date is within 24 days, the countdown will be displayed using random colors or the specified colors.
- If the date has passed, the light strip will display a breathing effect with a random color of the day.
The Code on the Raspberry Pi Pico
The main code for the Raspberry Pi Pico is written in Python. Here's a brief overview of what it does:
- Connect to Wi-Fi: The
connect_to_wifi
function connects the Raspberry Pi Pico to the specified Wi-Fi network. - Get Timezone and Local Time: The
get_timezone
andget_local_time
functions fetch the current timezone and local time using online APIs. - Fetch Light Settings: The
get_light_settings
function retrieves the important date and RGB colors from the JSON file stored in Azure. - Calculate Sleeps Until Special Day: The
sleeps_until_special_day
function calculates the number of days until the important date. - Control the LED Strip: The
progress
function controls the LED strip, displaying the countdown or a breathing effect based on the current date and settings.
The Configuration Website
The configuration website is built in C#. It's a Blazor server webapp, and I used .NET Aspire to make it easy to run it locally. The UI uses FluentUI-Blazor so it looks pretty, without effort.
The website allows you to update the settings for the Raspberry Pi Pico. You can set the important date, choose custom colors, and save these settings to a JSON file in Azure storage.
Little Extra
The website is deployed in Azure Container App with a minimum scaling to zero to save on costs. This may cause a slight delay when loading the site for the first time, but it will work just fine and return to "dormant" mode after a while.
I hope you enjoyed reading about my holiday project! It was a fun and educational experience, and I look forward to working on more projects like this in the future.
What's Next?
Currently the project does a 24 days countdown (inspired from the advent calendar). I would like to add a feature to allow the user to set the number of days for the countdown. I would also like to add the possibility to set the color for the breathing effect (or keep it random) when the important date has passed. And lastly, I would like to add the time of the day when the light strip should turn on and off, because we all have different schedule 😉 .
Last thoughts
I really enjoyed doing this project. It was a fun way to learn more about the Raspberry Pi Pico, micro-Python (I didn't even know it was a thing), and FluentUI Blazor. I hope you enjoyed reading about it and that it inspired you to create your own fun projects. If you have any questions or suggestions, feel free to reach out, I'm fboucheros on most socials.
~Frank