Working on @pimoroni HyperPixel4 Display and a Raspberry Pi 3 B+
Working on @HWHardsoft AZ-Touch-Pi0-Weather with ili9341 Display and a Raspberry Pi Zero W
a weather display for a raspberry pi and a adafruit (featherwing) TFT ili9341 display
UPDATE
WeatherPiTFT now runs on every display size... from the smallest 128x128, 128x160, 240x320, 320x480, 480x640, 480x720, 480x800 (pimoroni hyperpixel4 or official Raspberry Pi 7" Touchscreen Display), 720x720 (pimoroni hyperpixel4 square) and above. WeatherPiTFT will always be shown in portrait mode but it also works on a landscape configured display (but still in 3x4 centred on your display). The images have a size of 1000x1000px so it should work even on HD monitors without lost of weather image quality.
written with love in python3.7
comes with 2 themes (default and darcula styled)
OLD Pics before AA
thx @erikflowers for his awesome weather-icons
I colored them and put a little glitter on it :)
moon phase rendering: credits to @miyaichi for his awesome fork
i wrote this app on a mac with PyCharm and tested it quite a while. since it uses only standard python3 modules and libraries it should work on nearly everything that can run python3 and pygame.
this tutorial is basically for running it on a raspberry pi (zero, 1, 2, 3) and a TFT display which matches up with chips like the ones from adafruit. as long as it uses standard spi it should work with the new
dtoverlay
module in the latest jessie versions of raspbian... i think there is no need for a custom kernel. it's just a little bit configuration.i tested it with following TFT's:
- TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers
- Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket - ILI9341
- adafruit TFT's with ili9341 driver
- pimoroni hyperpixel4
no configuration needed for:
- official raspberry pi 7" display
- any HDMI display
- skip all the TFT setup parts
SDO (MISO) TFT Data Out SPI_MISO = GPIO09
SDI (MOSI) TFT Data In SPI_MOSI = GPIO10
SCK TFT Clock SPI_CLK = GPIO11
CS TFT Chip Select SPI_CE0_N = GPIO08
D/C TFT Data / Command = GPIO24
RESET Reset = GPIO23
GND Ground = GND
VCC 3V3 supply = +3V3 or 5V
BUTTON 1 used for restart app = GPIO19
BUTTON 2 used for shutdown pi = GPIO26
PiButtons.py
You can also buy a complete set and build it yourself from my friend Hartmut over at his shop
https://www.raspberrypi.org/downloads/noobs/
i used NOOBS v2.1.0 which was the latest version for now
follow the instructions from raspberrypi.org to setup your sd card and operating system
finish your setup by following this guide
enable SPI in raspi-config - Interfacing Options
to connect to a wifi network follow this guide
sudo apt-get update -y && sudo apt-get upgrade -y
for other displays like this you may have to build your own kernel module or find it from your seller.
in /boot/config.txt, add in the following at the bottom
# TFT display and touch panel
dtoverlay=rpi-display
dtparam=rotate=0
change /boot/cmdline.txt to add the following to the end of the existing line
fbcon=map:10 fbcon=font:VGA8x8 logo.nologo
just change "FRAMEBUFFER": "/dev/fb1"
to "FRAMEBUFFER": "/dev/fb0"
later in your config file
you can also change "FPS"
to 60
and "AA"
to true
for mx quality and frames per second. but 30 is more than enough.
it's just needed for the particle simulation for precipitation types like rain and snow.
Everything from 15-30 fps should give you decent animations.
git clone https://github.com/LoveBootCaptain/WeatherPi_TFT.git
cd WeatherPi_TFT
since the script has to be run by a root user you have to install the dependencies with sudo
sudo pip3 install -r requirements.txt
NEW PLEASE UPDATE
WeatherPiTFT will write a json file to your Pi after updating the weather data from the api provider.
this process will reduce writing to your sd card, cause we're writing it only to RAM.
ramdisk will only be used in production mode. means you have set your "ENV"
to "Pi"
which is default when you followed this guide.
you may also consider using great tooling for writing all logs to ram from @azlux: log2ram
sudo mkdir /mnt/ramdisk
sudo nano /etc/fstab
add the following line right at the end of the opened file
size=5M
specifies the size of the reserved ram (5M is more than enough)
tmpfs /mnt/ramdisk tmpfs nodev,nosuid,size=5M 0 0
CTRL-O
to save and CTRL-X
to quit nano
finally mount the ram disk and reboot your Pi
sudo mount -a
sudo reboot
while your Pi reboots grep your API key ...
when your Pi has rebooted
cd
cd WeatherPi_TFT
cp example.config.json config.json
nano config.json
"DISPLAY": {
"WIDTH": 240,
"HEIGHT": 320,
"FPS": 30,
"AA": false,
"ANIMATION": false,
"FRAMEBUFFER": "/dev/fb1",
"PWM": false,
"SHOW_FPS": true,
"SHOW_API_STATS": true,
"MOUSE": true
},
FPS
is used for pygame internal ticks - 30 fps is more than enough to render clock transitions and precipitation
animations smoothlyAA
turns antialiasing on and off (leave it on a Pi Zero off, it is performance heavy on higher FPS)ANIMATION
enables the little particle simulation for precipitation, disable will show an image insteadFRAMEBUFFER
according to your display, some use fb0 (e.g. @pimoroni HyperPixel4) some fb1 (most ili9341 from @adafruit),
for local development or HDMI displays set it to false
PWM
to your GPIO pin if your display support pwm brightness (HyperPixel supports GPIO 19 for pwm brightness) -
may need some code adjustments on your side depending on your display (some are bright enough with pwm 25, some ore not)
otherwise set it to false
SHOW_FPS
show the current fps on the displaySHOW_API_STATS
show how many API calls are left over (resets every midnight UTC)MOUSE
enable/disable mouse pointer - needed for local development, better leave it disabledxxxxxxxxxxxxxxxxxxxxxxxxx
in "WEATHERBIT_IO_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxx"
with your own API keyen
in "WEATHERBIT_LANGUAGE": "en"
with your preferred languagede
in "WEATHERBIT_COUNTRY": "de"
with your country10178
in "WEATHERBIT_POSTALCODE": 10178
with your zip code / postal code (this example-location zip code
is from berlin city, germany) "LOCALE": {
"ISO": "en_GB",
"RAIN_STR": "Rain",
"SNOW_STR": "Snow",
"PRECIP_STR": "Precipitation",
"METRIC": true
},
"ISO"
and "METRIC"
according to your needs"METRIC": true
will get all weather data units as metric system, change to false
if you prefer imperial styled units
°C
will be °F
and km/h
will be `mph untis
for the api request
(see weatherbit API Docs for more details) "TIMER": {
"UPDATE": 420,
"RELOAD": 30
},
UPDATE
timer defines how often the API will be called in seconds - 7min will give you enough API calls over the dayRELOAD
defines who often the information on the display will be updated set your theme file [darcula.theme, light.theme or example.theme] in config.json
"THEME": "darcula.theme",
example.theme.json
darcula.theme.json
which is an homage to jetBrains great darcula theme for their IDE's -> see screenshots below
"RED" is used for errors in status bar icons and wind direction
"BLUE" is used for sync and update in status bar icons and rain precip icon
"GREEN" is used for everything fine in status bar icons
(r, g, b)
to the optional fillcolor
parameter in the DrawImage
class"%I:%M:%S %p"
instead of "%H:%M:%S"
for a 24h clock in yourTheme.DATE_FORMAT.TIME
"%A - %d. %b %Y"
to "%A - %b %d %Y"
in yourTheme.DATE_FORMAT.DATE
sadly pygame doesn't like to work well with systemd... so it has to run as init.d service. maybe someone can help to solve this one time.
cd
cd WeatherPi_TFT
sudo cp WeatherPiTFT.sh /etc/init.d/WeatherPiTFT
sudo cp PiButtons.sh /etc/init.d/PiButtons
sudo chown -v root:root /usr/bin/python3
sudo chmod -v u+s /usr/bin/python3
python
in the terminalupdate-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.4 2
you can always swap back to python2 with:
update-alternatives --config python
and choose your preferred version of python
check if python3.x is now default with:
python --version
it should say something like:
Python 3.7.x
if everything is set up and updated correctly:
sudo reboot
for the WeatherPiTFT Service
sudo service WeatherPiTFT start
sudo service WeatherPiTFT stop
sudo service WeatherPiTFT restart
sudo service WeatherPiTFT status
for the PiButtons Service
sudo service PiButtons start
sudo service PiButtons stop
sudo service PiButtons restart
sudo service PiButtons status
if this is doing what it should you can run the service every time you boot your pi
sudo update-rc.d WeatherPiTFT defaults
sudo update-rc.d PiButtons defaults
locale
please read the issue #1