IMG_0134.JPG

PyWeather 3

PyWeather 3 is the successor to PyWeather 2, an experiment to make an e-ink weather display.

Using a larger display and more sensors for indoor environmental monitoring, PyWeather 3 brings a much more informative UI about current weather conditions and indoor environmental data. PyWeather 3 also has a more modular codebase (instead of the spaghetti that is PyWeather 2).

Hardware:

  • Raspberry Pi 4

  • Pimoroni Inky Impression (5.7” 600x448 e-ink display)

  • SHTC3 temp/humidity sensor

  • DPS310 precision pressure sensor

  • PMSA300I air quality sensor

  • BH1750 light sensor

Language: Python

Frameworks: Dark Sky API, ClimaCell API, Pillow

Lines of code: ~800

Timeframe: January 2021

PyWeather 3 is the backbone for the How Hot Is It In My Dorm Room? 2 Project, which you can view here.

You can view the source code for this project here.

 This is the main screen for PyWeather 3 on the Inky Impression. The general UI of PyWeather 3 is designed in a similar way to PyWeather 2 with lots of lines and boxes to denote various areas of information.  The font being used is Roboto, which comb

This is the main screen for PyWeather 3 on the Inky Impression. The general UI of PyWeather 3 is designed in a similar way to PyWeather 2 with lots of lines and boxes to denote various areas of information.

The font being used is Roboto, which combined good readability and size without being too flashy.

Although the Inky Impression is a color e-ink screen, it’s better at showing full pictures or larger areas of color. Colored icons at the size I was aiming for would make things a lot less readable.

(In a few days, I’ll upload some photos showing the hardware setup of PyWeather 3. For now, the rest of the images focus on the display aspect of PyWeather 3).

 Here’s a cropped photo of the main screen. Since there’s a lot of different sections with different information, I’ll explain them one-by-one.

Here’s a cropped photo of the main screen. Since there’s a lot of different sections with different information, I’ll explain them one-by-one.

 The top left of the screen is where the current conditions live. The current weather, along with the feels like temperature (next to the thermometer icon) is very similar to how this looked in PyWeather 2.  Since there’s more vertical real estate, I

The top left of the screen is where the current conditions live. The current weather, along with the feels like temperature (next to the thermometer icon) is very similar to how this looked in PyWeather 2.

Since there’s more vertical real estate, I added persistent sunrise/sunset times below that, along with when the display was last updated.

The right of the current section is where things change from PyWeather 2. Instead of using text to denote values, iconography is used. Wind is up top (with wind gust shown always), then outdoor humidity, cloud cover, and precipitation chance.

 The top right of the screen is where the indoor data lives. This is also where weather alerts live, if one is active. The temperature headlines the section, and remains visible if an alert is active (unlike in PyWeather 2).  Detailed data about the

The top right of the screen is where the indoor data lives. This is also where weather alerts live, if one is active. The temperature headlines the section, and remains visible if an alert is active (unlike in PyWeather 2).

Detailed data about the indoor environment is below that. This includes humidity, pressure, air quality (using the US AQI scale from PM2.5 measurements), and the indoor light level.

 The second row is where the next hour forecast is shown. The text summary is provided by Dark Sky, and is always visible (unlike PW2, where it was only visible if there was precipitation in the hour).  The next 60 minutes of weather is shown in 15 m

The second row is where the next hour forecast is shown. The text summary is provided by Dark Sky, and is always visible (unlike PW2, where it was only visible if there was precipitation in the hour).

The next 60 minutes of weather is shown in 15 minute blocks. Temperature/icons are provided by ClimaCell, with the temperatures adjusted to what Dark Sky outputs for consistency. The precipitation chance is always visible in this section, and is provided by Dark Sky.

 The hourly section (and daily section) are almost copy & pasted from PyWeather 2, because if it ain’t broke, don’t fix! The only adjustment is showing the wind speed & direction (or precip chance if it’s over 25%) thanks to the added vertica

The hourly section (and daily section) are almost copy & pasted from PyWeather 2, because if it ain’t broke, don’t fix! The only adjustment is showing the wind speed & direction (or precip chance if it’s over 25%) thanks to the added vertical space. There’s also 6 blocks of hourly data (compared to 5 with PW2).

Another note: The hourly forecast here starts at 2 PM, that’s because the next hour forecast “covers” the 1 PM hourly block, so it’s shifted over by an extra hour for more information.

 Lastly, the daily section lives at the bottom of the screen, using the same style as PyWeather 2 but upscaled.  6 days of weather is shown (instead of 4 on PW2), along with the wind for the day (or precip chance if it’s over 25%). This is the best e

Lastly, the daily section lives at the bottom of the screen, using the same style as PyWeather 2 but upscaled.

6 days of weather is shown (instead of 4 on PW2), along with the wind for the day (or precip chance if it’s over 25%). This is the best example that the wind arrows across PyWeather 3 actually adjust to the wind direction.

 Lastly - this is what the weather display looks like when there’s an active alert. In a previous iteration, the display showed the alert starting/ending in x hours, but this was confusing at times. Now, it shows the date & time when an alert sta

Lastly - this is what the weather display looks like when there’s an active alert. In a previous iteration, the display showed the alert starting/ending in x hours, but this was confusing at times. Now, it shows the date & time when an alert starts/ends.

 Here’s an updated image of PyWeather 3 out in the wild. Here it’s in the apartment, and the lux meter has been replaced by a dew point statistic.

Here’s an updated image of PyWeather 3 out in the wild. Here it’s in the apartment, and the lux meter has been replaced by a dew point statistic.

 Here’s the side profile view where you can see how it’s mounted.  Previously, the sensors were attached to the Raspberry Pi via breakouts on the e-ink display itself. However, these sensors are now on a different Raspberry Pi. When the display updat

Here’s the side profile view where you can see how it’s mounted.

Previously, the sensors were attached to the Raspberry Pi via breakouts on the e-ink display itself. However, these sensors are now on a different Raspberry Pi. When the display updates, the display queries that Pi for the latest sensor readings.

At some point in PyWeather 3 development, I wanted to make it so clicking one of the four buttons expanded details for each section (because coincidentally there’s four sections on the display that literally line up with the buttons), but that hasn’t happened just yet.

 And here’s a side view of the Pi, lovingly mounted with command strips.

And here’s a side view of the Pi, lovingly mounted with command strips.