I bought a Raspberry Pi back when they were first released in February 2012. It was purchased with the intention of setting it up as data logger for my WMR88 weather station. I got it up and running for that purpose using wview. However, I soon found a better solution for my data logging requirements in the Meteo Sheeva.
The Pi then found its way into a box and remained there unpowered for over two years. I wanted to put it to good use but no ideas were forthcoming to utilise it. Then inspiration struck.
I had just completed an Android application widget that could poll the WD Live files hosted on a website and display the current weather conditions therein. I use it on my smart phone to see the current conditions at home. Could I use the same principle to create a custom weather display console? It seemed like a cool little project and would put the Pi to good use at last.
The first thing I needed was some kind of simple, dedicated display for the Pi. Trawling the web I found a few products on offer that did just that. Unfortunately they all required soldering which I’m just not brave enough to try. Then I discovered the PiFace Control and Display (PiFaceCAD).
The PiFaceCAD is a neat bit of kit. It attaches to a Pi via its GPIO ports and provides a small backlight 16×2 character screen, five buttons, a three position navigation switch and an IR receiver. All of these features are programmable via Python. I ordered it and the compatible Camden Boss case from MCM and they arrived a few days later.
The assembly was a little fiddly as the Camden Boss case is a very tight fit around the Pi and PiFaceCAD. I’ve illustrated the process in the pictures below.
The unboxed PiFaceCAD:
The unboxed case with the included rubber feet. I prefer clear cases if I can get them as they are more interesting to look at than opaque cases:
My Pi ( a Model B Rev 1) maneuvered into the bottom half of the case. It’s a tight fit to get it in place, especially the composite video port:
The PiFaceCAD attached to the Pi via its GPIO pins. Getting the PiFaceCAD into the bottom half of the case is difficult as the five buttons have to fit into small cut outs. I was sure I was going to break something but fortunately I didn’t:
The top of the case snapped into place. Again it’s tricky to fit it around the Pi’s USB and Ethernet ports:
Finally the assembled unit powered up, with the PiFaceCAD software installed and running the supplied SysInfo demo program:
Coding in Python
With the hardware up and running the next step was to code the weather display application itself. The PiFaceCAD provides a functional, easy to use Python API. The API exposes the ability to write to the display, control its backlight and add event handlers to the various buttons and the IR receiver.
I had never coded in Python before (Java has been my mainstay for last few years with the occasional foray into PHP and C#) but found it to be a straightforward language to pick up with a gentle learning curve and excellent documentation. The language’s dynamic typing took a little getting used to given my background but I started the exercise prepared to learn new ways of doing things (I did not want to “code Java in Python”). Coming from Java I really appreciated the lack of boilerplate code required by Python and just how little code it took to get things done without sacrificing readability. I expect to be doing a lot more coding in Python in the future.
Python’s library support is also excellent. I was pleased to find a JUnit like capability in the “unittest” Module and made use of decimal, urllib, threading and time modules in my solution (as well as creating a few modules of my own to handle, transform and format weather data).
What I did not do was code on the Pi itself. I instead coded the project on my Macbook using the excellent PyCharm Community Edition IDE from JetBrains. I periodically uploaded my unit tested solution to my Pi via FTP for integration testing. The code targets Python 3.2.3 which was the version available on my current version of Raspbian (released Jan 9th 2014).
pifacecad-wdlive on GitHub
The result of my endeavours was the pifacecad-wdlive application which I have hosted on GitHub. If you are interested in installing pifacecad-wdlive then head to the README for setup instructions. If you want to fork pifacecad-wdlive to add extra capabilities then all of the source code and unit tests are available in the GitHub project.
The current version of pifacecad-wdlive supports 16 different weather displays which are selectable using the PiFaceCAD’s navigation switch (this switch also controls the backlight) and 16 different measurement units toggled using the PiFaceCAD’s buttons. Better yet all of these functions can be controlled via a normal IR remote control (I have mine working via my XBox 360 remote). The application can be configured on the command-line to point at any WD Live enabled website and polls for updated weather conditions every 60 seconds.
If my Pi ever lost power I did not want to have to start pifacecad-wdlive manually every time the Pi restarted. To execute pifacecad-wdlive on startup I added the following line to the Pi’s /etc/rc.local file:
su - pi -c "python3 /home/pi/pifacecad-wdlive/pifacecad-wdlive.py http://www.waynedgrant.com/weather/clientraw.txt" &
Those wanting to do the same will want to adapt these lines to match their particular pifacecad-wdlive installation and clientraw.txt URL.
A normal weather display unit such as the WMR88 or WMR200 can display weather anywhere it can receive mains power and wireless sensor data. My PiFaceCAD, on the other hand, was shackled to an Ethernet cable. I decided to make my setup a little more portable by adding a wireless adapter to the Pi. I picked up an Edimax Wifi USB from Amazon to accomplish this.
A wasted hour of following various (conflicting) manual instructions on the web ensued as I tried and failed to set the wireless adapter up on the Pi. I then stumbled on and installed wicd-curses and promptly got the Wifi working.
My one concern in using a Wifi USB adapter was that of power. I feared that having the Wifi USB adapter and the PiFaceCAD connected to the Pi at the same time may require me to use a powered USB hub. Fortunately my 0.7A Samsung phone charger was up to the job so a powered hub was not required.
Here is the finished build out complete with Wifi adapter and displaying pifacecad-wdlive’s summary weather display screen for my own weather station:
I’m quite pleased with how the build out has turned out. While it would probably have cost around the same money to buy a new weather display console from Oregon creating this was a lot more fun and satisfying.