Overview
Winter weather can be unpredictable, especially when you're trying to decide if it's time to break out the shovel or if you can wait another hour. This project creates a simple, glanceable desktop display that monitors real-time snowfall and daily forecasts using a no-code approach.
By combining a QT Py ESP32 with a 7-segment display, you can keep an eye on the accumulation without having to check your phone or a weather app every ten minutes. The built-in NeoPixel LED on the QT Py acts as a visual alert, glowing blue when it’s actively snowing, while the LED matrix shows exactly how many inches of snow are expected for the day.
Using WipperSnapper firmware and Adafruit IO Actions, this guide will show you how to link cloud-based weather data to your hardware in minutes. All without writing a single line of code.
How it works
This project relies on the power of Adafruit IO Actions to do the heavy lifting. A scheduled trigger checks the weather data for a specific location (like New York City) every hour.
If the current weather conditions report "snow," a command is sent to the QT Py to turn the onboard NeoPixel a bright blue. Simultaneously, the action pulls the daily snowfall forecast, converts the metric to inches (optional), and sends that value directly to the 7-segment display. Because the device is running WipperSnapper firmware, it stays connected to your WiFi and listens for these updates automatically, making the setup process entirely visual.
What is WipperSnapper?
WipperSnapper is a firmware designed to turn any WiFi-capable board into an Internet-of-Things (IoT) device without programming a single line of code. WipperSnapper connects to Adafruit IO, a web platform designed (by Adafruit!) to display, respond, and interact with your project's data.
Simply load the WipperSnapper firmware onto your board, add credentials, and plug it into power. Your board will automatically register itself with your Adafruit IO account.
From there, you can add components to your board such as buttons, switches, potentiometers, sensors, and more! Components are dynamically added to hardware, so you can immediately start interacting, logging, and streaming the data your projects produce without writing code.
Page last edited March 12, 2026
Text editor powered by tinymce.
WipperSnapper Setup
What is WipperSnapper
WipperSnapper is a firmware designed to turn any WiFi-capable board into an Internet-of-Things device without programming a single line of code. WipperSnapper connects to Adafruit IO, a web platform designed (by Adafruit!) to display, respond, and interact with your project's data.
Simply load the WipperSnapper firmware onto your board, add credentials, and plug it into power. Your board will automatically register itself with your Adafruit IO account.
From there, you can add components to your board such as buttons, switches, potentiometers, sensors, and more! Components are dynamically added to hardware, so you can immediately start interacting, logging, and streaming the data your projects produce without writing code.
Sign up for Adafruit.io
You will need an Adafruit IO account to use WipperSnapper on your board. If you do not already have one, head over to io.adafruit.com to create a free account.
Add a New Device to Adafruit IO
Log into your Adafruit IO account. Click the New Device button at the top of the page.
After clicking New Device, you should be on the board selector page. This page displays every board that is compatible with the WipperSnapper firmware.
In the board selector page's search bar, search for the Feather ESP32 V2. Once you've located the board you'd like to install WipperSnapper on, click the Choose Board button to bring you to the self-guided installation wizard.
Follow the step-by-step instructions on the page to install Wippersnapper on your device and connect it to Adafruit IO.
If the installation was successful, a popover should appear displaying that your board has successfully been detected by Adafruit IO.
Give your board a name and click "Continue to Device Page".
You should be brought to your board's device page.
Feedback
Adafruit.io WipperSnapper is in beta and you can help improve it!
If you have suggestions or general feedback about the installation process - visit https://io.adafruit.com/support, click "Contact Adafruit IO Support" and select "I have feedback or suggestions for the WipperSnapper Beta".
Troubleshooting
If you encountered an issue during installation, please try the steps below first.
If you're still unable to resolve the issue, or if your issue is not listed below, get in touch with us directly at https://io.adafruit.com/support. Make sure to click "Contact Adafruit IO Support" and select "There is an issue with WipperSnapper. Something is broken!"
First, make sure that you selected the correct board on the board selector.
Next, please make sure that you entered your WiFi credentials properly, there are no spaces/special characters in either your network name (SSID) or password, and that you are connected to a 2.4GHz wireless network.
If you're still unable to connect your board to WiFi, please make a new post on the WipperSnapper technical support forum with the error you're experiencing, the LED colors which are blinking, and the board you're using.
Try hard-resetting your board by unplugging it from USB power and plugging it back in.
If the error is still occurring, please make a new post on the WipperSnapper technical support forum with information about what you're experiencing, the LED colors which are blinking (if applicable), and the board you're using.
"Uninstalling" WipperSnapper
WipperSnapper firmware is an application that is loaded onto your board. There is nothing to "uninstall". However, you may want to "move" your board from running WipperSnapper to running Arduino or CircuitPython. You also may need to restore your board to the state it was shipped to you from the Adafruit factory.
Moving from WipperSnapper to CircuitPython
Follow the steps on the Installing CircuitPython page to install CircuitPython on your board running WipperSnapper.
- If you are unable to double-tap the RST button to enter the UF2 bootloader, follow the "Factory Resetting a WipperSnapper Board" instructions below.
Uploading this sketch will overwrite WipperSnapper. If you want to re-install WipperSnapper, follow the instructions at the top of this page.
Moving from WipperSnapper to Arduino
If you want to use your board with Arduino, you will use the Arduino IDE to load any sketch onto your board.
First, follow the page below to set up your Arduino IDE environment for use with your board.
Then, follow the page below to upload the "Arduino Blink" sketch to your board.
Uploading this sketch will overwrite WipperSnapper. If you want to re-install WipperSnapper, follow the instructions at the top of this page.
Factory Resetting a WipperSnapper Board
Sometimes, hardware gets into a state that requires it to be "restored" to the original state it shipped in. If you'd like to get your board back to its original factory state, follow the guide below.
Page last edited March 12, 2026
Text editor powered by tinymce.
Configure Adafruit IO Device
Assuming you have already gone through the WipperSnapper Setup page and connected your board(s) to WipperSnapper, navigate to the WipperSnapper board list. You should see your newly connected QT Py board listed here.
If you do not see your QT Py listed - go back to the WipperSnapper Setup page and make sure its registered with Adafruit.io
On the device page, quickly check that your device is online and is running the latest version of the WipperSnapper firmware.
The device tile on the left indicates the version number of the firmware running on the connected board.
- If the firmware version is green with a checkmark - continue with this guide.
- If the firmware version is red with an "X" - update to the latest WipperSnapper firmware on your board before continuing.
Assembly
All you need to do is take a short STEMMA QT cable and connect the 7-Segment display to your QT Py like this:
Search for our first component, the '7-Segment LED Matrix'.
Then click the Create Component button (you don't need to change any of the default settings).
Next, add the built-in Neopixel LED by using the Auto-Config tool. Next to the New Component button, click the Auto-Config button.
Then make sure the NeoPixel is checked. You can also leave the Button checked, but it won't be used for this project.
Now you should be able to confirm everything is working correctly. Go ahead and manually set the 7-segment display to something like 1234, and change the NeoPixel color. You can make these changes directly on the devices page by clicking the pencil icon on the 7-segment component, and clicking the different colors on the NeoPixel component.
Your hardware should respond almost instantly to your changes.
Page last edited March 12, 2026
Text editor powered by tinymce.
Set Up Adafruit IO Actions
Setting Up the Weather Power-Up
First we need to set up your location in the Adafruit IO Weather Power-Up (if you haven't done this already). Click on Power-Ups in the top navigation bar, then click on the Get Started button on the Weather Power-Up.
You can click and drag the map around, then click on the map to add the latitude and longitude to the Location field. Or you can use a tool like this to just type in a zip code to get the lat/lon coordinates (for those in the U.S.).
Give this location a name, then click Create.
Now let's create the action. In the top navigation bar, click Actions, then click New Action.
Then give this action a title, like Snow Tracker, and give it a good description (Check if it is snowing and how much it is going to snow today). Then click the Create button.
Create the Action
Creating an Adafruit IO Action is what makes this project smart without you having to touch a line of code. By using the Weather Power-Up, we can pull real-time data for your specific location and push it directly to your QT Py.
Here is how to build the Action logic for your snow tracker:
1. Set the Schedule
Every automation needs a trigger to tell it when to run.
-
Trigger Type: Choose Schedule.
-
Frequency: Set it to run Every Month, Every Day, and Every Hour.
-
Minute: Set it to At minute: 15. This ensures your display updates shortly after the top of every hour.
2. Check for Active Snowfall
Next, to create a conditional statement to see if it is currently snowing.
-
If block: Add an "if/do/else" block.
-
Weather Metric: Select the Weather block. Set the location (e.g., Minneapolis), the time to This hour, and the metric to Precipitation Type.
-
Condition: Set the comparison to
=and the text value to"snow". -
Do: If it is snowing, use the Set block to change your QT Py NeoPixel to a nice "winter blue" like
#0047ff. -
Else: If it’s not snowing, set the NeoPixel to
#000000(off) so the light only shines when there's action outside.
3. Calculate Daily Snowfall
Finally, to grab the forecast and show it on the 7-segment display.
-
Set variable: Create a variable named
Snow. -
Weather Forecast: Use another Weather block. Set it to Today and change the metric to Snowfall Amount.
-
Unit Conversion: The weather service provides data in millimeters. If you want inches, use a math block to multiply $(\times)$ that value by
0.0393700787. -
Update Display: Use a final Set block to send the value of your
Snowvariable directly to the 7-Segment LED Matrix.
Live Data
After you click Save & Run, your display should now update. In the example below, for Minneapolis, I'm not expected to get any snow today, and it isn't currently snowing.
So the display reads 0.0, and the NeoPixel on the QT Py is turned off.
Page last edited March 12, 2026
Text editor powered by tinymce.
Optional: 3D Printed Enclosure
I created this super simple 'enclosure' that kind of holds everything together. It actually sits nice on your desk using the wire as a kind of kickstand. It is also just press fit, so you can easily remove the QT Py and the 7-Segment for a different project. You could easily create a little dock for this if you wanted, or use the dimensions to help you create a more complex enclosure.
Page last edited March 12, 2026
Text editor powered by tinymce.