loading

This Instructable will show you how to build a really cool Raspberry Pi Internet-based weather station. Actually, to call this build a "weather station" is a bit of an under statement. This build could easily be extended to provide much more than simply the weather. However, it's a good start and it looks really cool on my desk.

Our family (OK, mostly me) has enjoyed having the family iPad on the kitchen counter, when not in use, quietly showing the current outside weather conditions. However, it's a pain to load and unload the iPad in and out of the arcade cradle case. Plus, just when I go to look at the weather, I discover someone has taken the iPad / weather display. What's needed is a permanent counter-top display that the kids are not going to swipe like the iPad.

Step 1: Gen 1 - the Lunchbox Pi Weather Station

My first thought was to use a little composite video display. I picked up the one in the picture on Ebay for $22 bucks - simply search on "4.3 Inch TFT LCD Car Rear View Monitor Car Monitor". The display has a reported resolution of 656 by 416 pixels which defiantly makes displaying a lot of useful information a challenge! The display requires 12Vdc as the supply voltage. The Raspberry Pi, of course, needs 5Vdc as the supply voltage. To resolve this, I bought a cheap USB car charger from Amazon. For around $6 bucks I found a 5Vdc by 2 Amp car changer. Therefore, the lunchbox has an external 12Vdc wall wart power supply. The 12Vdc powers the display directly. The 12Vdc also goes to the USB car charger which steps the voltage down to a regulated 5Vdc. As a final hack, I soldered a pair of wires directly between the car charger and the Raspberry Pi - not my best idea.

While it all kinda worked I was not really satisfied with the quality of the video on the composite display. The small font on the display was more fuzzy than I would like. Plus, while the lunchbox at first seemed cute later it seemed kinda cheesy.

Step 2: Gen 2 - HDMI Monitor + Laser Cut Plexiglass Arcade Case

Back on eBay I found a nice looking $54 dollar HDMI open frame monitor with a resolution of 800x600. By definition, an open frame anything needs a frame to mount in. Since the cuteness of the lunchbox was long over it was time for some laser cut acrylic. My local hacker space i3Detroit has a really nice 150 watt cutter that can make mince meat of 4.5mm acrylic.

I loosely based my arcade enclosure on the iPad arcade box. If I ever make a Gen 3 design it would defiantly include a removable / slide out tray for the Pi. Turns out, it's a major pain in the neck trying to plug things in and out of the Pi since there is not much room between the Pi and the side walls.

The HDMI monitor also requires a 12Vdc feed. So, I used the same trick of using a USB car charger again. This time, however, I chopped up an old USB cable so soldered wires on the Pi was not required.

If anyone is interested in the arcade case post a comment below and I'll upload the DXF files. Or, the files are on my web site at ph-elec.com.

Step 3: Pi Setup

To setup a new Raspberry Pi with the needed software is not that hard. All the software is written in Python with just one added Python module. The extra Python module is called "pywapi". Here is a link where you can download the module. This module makes it easy to get real-time weather from either Yahoo, Weather.com, or NOAA.

First things first, here is a checklist to setting up a raw Raspberry Pi:

  1. Download the latest Raspbian (Debian Wheezy). Unzip to obtain a .img file.
  2. Write the to a SD card with "dd bs=4M if=2014-09-09-wheezy-raspbian.img of=/dev/sdb"
  3. The dd command takes about five minutes. When complete, run "sync" to flush the pipes.
  4. Install SD card in the Pi and reboot. Make sure there is an Ethernet connection to the Pi.
  5. Using the "Attached Devices" page on the router, find the IP address of the new Pi.
  6. Login to the Pi using "ssh pi@192.168.1.???" where ??? is the IP number from above. Password will be "raspberry".
  7. On the Pi, use the command "raspi-config" to setup defaults.
    1. Turn on automatic boot into the GUI.
    2. Set the host name to something like "MyPi".
  8. Install VNC on the Pi with "sudo apt-get install tightvncserver".
    1. Run "tightvncserver" which sets the password.
  9. Back on the big Linux box, use "Remote Desktop" to view the Pi GUI desktop.
    1. Set Protocol to "VNC" and IP number to "192.168.1.???:1". Note the ":1" on the end of the IP number.
    2. Hit the connect button and supply the VNC password.
    3. Bingo, remote GUI Pi desktop!
      1. This saves dragging out a monitor, keyboard, and mouse to connect up to the new Pi.
    4. On the desktop, run the WiFi setup icon. Setup the new Pi / USB WiFi to connect to the network.
    5. Close the VNC connection - we're now done with remote desktops.
  10. Back in the ssh window, reboot the Pi with "sudo reboot". Disconnect the Ethernet cable since the WiFi is now setup.
  11. Back on the home router, find the new IP number the Pi is using with WiFi.
  12. Using ssh, log back in using the new IP number. This time the connect will be over WiFi.
  13. Using the Files Manger on Linux, connect to the Pi using the "connect to server" command.
    1. The server address is "sftp://192.168.1.???/home/pi".
  14. Basic setup complete.

Next, the pywapi needs to be downloaded and installed. Again, this is not too hard with the following steps:

  1. Download the latest from here. Extract the archive into a new directory.
  2. Using File Manger, copy the directory to the Pi home directory.
  3. Using ssh, do the following on the Pi:
    1. cd pywapi-0.3.8
    2. sudo python setup.py build
    3. sudo python setup.py install
  4. Done.

Update, I forgot two mention two other things:

  1. On the Pi run the following command:
    1. sudo apt-get install avahi-daemon
      1. This allows connecting to the Pi by name. So, on your main computer you can connect as "ssh pi@MyPi.local" instead of using IP numbers. With multiple Pi's on the network it's easy to get them confused unless called out by name.
    2. sudo raspi-config
      1. Look for and run the 4th option called "Internationalisation Options" and set your timezone.
      2. With the timezone set and ntpd (network time protocol daemon) running the Pi will always display the correct time to within a couple milliseconds! Gotta love it.
  2. OK, now we're done again.

Step 4: Source Code

All the source code for this little weather display is based on Python, PyGame, and Pywapi. All open source / free software.

PyGame is used to do all the GUI stuff. Really amazing stuff. Using PyGame, the entire display is rebuilt once per second. Near the top of my source code you'll find a section that allows tweaking for different display sizes. There is one section for the small composite video display and a second section for the larger HDMI display. I simply comment out one of the two sections based on the display size I need.

To get my source code running just unzip the attachment and copy the whole directory onto the Pi using File Manage. Once copied, start the code use the following ssh commands:

  1. cd Weather
  2. sudo python weather.py

The sudo command is needed so that Python can control / read the GPIO pins. There is probably some way around this restriction but it eludes me.

Once everything gets working using ssh it's time to get weather to start automatically on a reboot. This is also really easy to do.

  1. Using ssh, run "sudo vi /etc/rc.local"
  2. Just before the last line, which says "exit 0", add the following to lines.

    1. cd /home/pi/Weather
    2. sudo python weather.py &> err.log

This will automatically start the weather application on the Pi after a reboot. If later you want to turn this off, just use ssh to edit the file and add the comment character "#" in front of both lines and reboot.

Note, my source code is a big hack and I'm not very proud of it. However, if I waited until it was presentable it never would be presented. So, take it or leave it just don't cry about as I have a very thin skin.

A couple of other things to note about my code. Buried down in there you'll notice some code to talk to an X10 device. This was my attempt to control my outside pole lights that are on address A3. I simply wanted the lamps on at dusk and off at dawn. Seems easy enough and I thought I had it working. Using a USB-to-RS232 dongle on the Pi I had connected a CM11A X10 module. The CM11A is an old X10 macro module. The CM11A also has a RS232 port that allows control over the X10 bus. Seems there are still some bugs because the lamp pole lights aren't getting the message!

Also of note, on the larger display there is a nice open gap along the right hand side of the display. My plan is add some status lamps in that area. I'm playing with some IEEE802.15.4 radios and their outputs will one day show up in that open spot.

For the latest and greatest updates please visit my web site at ph-elec.com.

Well, let me know in the comments section below any questions you may have.

Thanks, Jim.

Oh, and don't forget to vote for me! Thanks again.

BTW: There is always more info on my web site: www.ph-elec.com

Step 5: Metric Update

Attached is a new version that allows the display of either metric or imperial.

Hope this helps,

Jim

<p>I like your projects, it is a cool on and I have it working. I will soon upload photos as soon as I finish it.</p><p>Now, how can I change from Fahrenheit to Centigrade?, how do I add my zip code the weather?, right now I am pulling the information from the east cost. And I have like 10 degrees difference from where i live.</p><p>Thank you for your time and Awesome work !!!</p>
<p>Wow! Very cool to see someone getting it working too. Sorry for the long delay getting back to you.</p><p>I'm afraid the code is rather a hack. Really needs a rewrite. However, it does work for me. </p><p>I've recently patched up the code enough to run on the Adafruit SPI LCD. The SPI LCD, without an analog signals, looks really sharp and clear even for a small display. </p><p>To answer your question, look for the following line (around line #100):</p><p>w = pywapi.get_weather_from_weather_com( '48085', units='imperial' )</p><p>Change the units to 'metric' and the zip code to where you live. Of course, this should be in a config file that is loaded on startup. </p><p>Hope that works for you,</p><p>Jim</p><p>By the way, I'll attach the new code in an updated step in this instructable. There are some bug fixes for other stuff too.</p>
<p>Wow! Very cool to see someone getting it working too. Sorry for the long delay getting back to you.</p><p>I'm afraid the code is rather a hack. Really needs a rewrite. However, it does work for me. </p><p>I've recently patched up the code enough to run on the Adafruit SPI LCD. The SPI LCD, without an analog signals, looks really sharp and clear even for a small display. </p><p>To answer your question, look for the following line (around line #100):</p><p>w = pywapi.get_weather_from_weather_com( '48085', units='imperial' )</p><p>Change the units to 'metric' and the zip code to where you live. Of course, this should be in a config file that is loaded on startup. </p><p>Hope that works for you,</p><p>Jim</p><p>By the way, I'll attach the new code in an updated step in this instructable. There are some bug fixes for other stuff too.</p>
<p>This is just what I have been looking for!! I looked at another one called PiClock. but this seems a lot easier to setup. My question for you how hard is it to ssh from a MacBook into the raspberry pi? I am still a noob with the raspberry pi. I have it connected to the offical 7&quot; screen. but I think to set it all up it would be easier to use the screen on my MacBook.</p>
<p>Excellent tutorial, thank you for the time! </p><p>Only problem is I can't see where to change the &quot;F&quot; to &quot;C&quot; now that I've changed the units to metric. It's displaying centigrade units followed by an &quot;F&quot;. Where do I find this in the code? I'm relatively new to this python stuff! </p><p>Once again, thanks for tutorial. Was good fun to replicate! </p>
Strange, I just looked at the code and the default units were already metric. On 62 you should have: disp_units = &quot;metric&quot; This should take care of displaying the degree C symbol for you.<br><br>To display degree C or degree F I'm using a single unichar character. So, for example, the degree F one character that is both the little open dot plus the F character. It was a cute programming trick, using unichar, that I now regret. Makes it hard to understand the code.<br><br>Anyway, if you set the &quot;disp_unit&quot; variable to the string &quot;metric&quot; then near lines 60 to 78 should take care of setting up the correct unichar symbol for metric. <br><br>Hope that helps,<br>Jim
Thanks for your reply! I may not be using the most up to date code, where would I find this? Line 62 is a get.icon command and I can't find a disp_units command anywhere in the code. <br><br>While I have you, which section of the code would I adjust to make use of the whole screen (i.e. remove the black space to the right). <br><br>Best wishes,<br><br>Alex<br>
​Hi Jim!<br>I would really like to thank you for all the wonderful things you are doing and for sharing your vast knowledge with us, I tried to send you a private. Message over here but it doesn't seem to be going through, is it possible for you to send me an email address where I can contact you?<br><br><br>My email address is hinschar2@gmail.com. <br><br><br>With much appreciation,<br><br><br>Hinschar<br>
<p>Really cool project! I got it working through regular HDMI out but when I add my 3.5'' lcd I get a graphic that says to toggle the shutdown switch. Any idea whats up with that? </p>
At one point I added a push button to cause the Pi to go into shutdown mode. The idea was to shutdown before yanking the power so the SDCard doesn't get corrupted. Well, I stop using the switch long ago and the power gets yanked all the time with any trouble.<br><br>So, I'm guessing your GPIO is causing the Pi to think you want to shutdown. Simple answer is to just hack the Python code to disable that feature.
<p>Thanks that got me to where I needed to go. I removed all references to GPIO in the weather.py except for one instance where it was part of a giant (looked like the main) IF statement and replaced it with a false statement so whatever it wanted to do with the GPIO wouldn't run.</p>
<p>Thanks a lot! This project was my main inspiration for a version I put together. I plan to add sensor data to mine as well..Keep an eye on my repo. Excellent Instructable.</p><p><a href="https://github.com/rbischoff/pyweather">https://github.com/rbischoff/pyweather</a></p>
<p>jimk3038, great post. I have followed your instructions and have got the &quot;.py&quot; script running on a P2 with an Adafruit 2.8&quot; pitft. However the screen resolution is wrong and I can't figure out how to correct it. Any thoughts?</p>
<p>Maybe check the .py program....check which self.xmax and self.ymax you are using and compare that to what your display is capable of in pixels. My display was capable of 800 pixels wide and 480 pixels high so my self.xmax = 800 - 35 and my self.ymax = 480 - 5. Hopefully that helps you. If not maybe put your code up so we can see it. Have a great day</p>
<p>Another complete wipe and reinstall today.</p><p>@hometownnerd, I tried your suggestions but they didn't correct my problem. </p>
<p>Another thing, I am new to python and have no idea how much you know, but I got caught by the two different display areas, one is used and the other was commented out by the &quot;&quot;&quot; surrounding it. Make sure that the one you have changed is the one that will be used. I am not saying you do not know, just thought I would throw it out there. After that I am not going to be able to help much with why it would do that, my 5&quot; screen looks like the image in the instructable, after I changed to the small display and changed the xmax and ymax. Hopefully you can figure it out.</p>
<p>!! Figured it out !!</p><p>You were right. I had to comment out ALL of the Larger Display &quot;&quot;&quot; section and adjust the self.xmax = 360 - 35 &amp; self.ymax = 240 - 5 numbers for the Small Display section. Thank you very much for your help.</p>
<p>Awesome!!! Glad I could help</p>
Hometownnerd, thanks for your comments. <br><br>Yeah, sounds like pygame is getting confused as to the screen resolution. Setting xmax and ymax to different values should have an effect. Try different values until thing look right.<br><br>Good Luck,<br>Jim<br><br>
<p>I really liked everything about this and made my own and added some code to it as well. I have a weather station and I generate a clientraw.txt file every 15 seconds or so and wanted to actually display info from that. I will never claim it is perfect code but it does do the job fairly well. I display both the wind chill and the heat index as well as rain info, I had some issues with placement since this is my first python code but it is pretty close. I use this as a remote display for my Acurite weather station. Hope it helps some others</p>
<p>Here the result, traducido al espa&ntilde;ol ^^</p>
<p>Hello. I made the necessary modifications to the &quot;weather.py&quot; file to translate it into spanish language, search fthis lines...</p><p>self.day[0] = w[f][0]['day_of_week']</p><p>self.day[1] = w[f][1]['day_of_week']</p><p>self.day[2] = w[f][2]['day_of_week']</p><p>self.day[3] = w[f][3]['day_of_week']</p><p>put this following, it will translate day of the week into spanish...</p><p>if ( self.day[0] == 'Monday' ):</p><p> self.day[0] = 'Lunes'</p><p> self.day[1] = 'Martes'</p><p> self.day[2] = 'Miercoles'</p><p> self.day[3] = 'Jueves'</p><p> else:</p><p> if ( self.day[0] == 'Tuesday' ):</p><p> self.day[0] = 'Martes'</p><p> self.day[1] = 'Miercoles'</p><p> self.day[2] = 'Jueves'</p><p> self.day[3] = 'Viernes'</p><p> else:</p><p> if ( self.day[0] == 'Wednesday' ):</p><p> self.day[0] = 'Miercoles'</p><p> self.day[1] = 'Jueves'</p><p> self.day[2] = 'Viernes'</p><p> self.day[3] = 'Sabado'</p><p> else:</p><p> if ( self.day[0] == 'Thursday' ):</p><p> self.day[0] = 'Jueves'</p><p> self.day[1] = 'Viernes'</p><p> self.day[2] = 'Sabado'</p><p> self.day[3] = 'Domingo'</p><p> else:</p><p> if ( self.day[0] == 'Friday' ):</p><p> self.day[0] = 'Viernes'</p><p> self.day[1] = 'Sabado'</p><p> self.day[2] = 'Domingo'</p><p> self.day[3] = 'Lunes'</p><p> else:</p><p> if ( self.day[0] == 'Saturday' ):</p><p> self.day[0] = 'Sabado'</p><p> self.day[1] = 'Domingo'</p><p> self.day[2] = 'Lunes'</p><p> self.day[3] = 'Martes'</p><p> else:</p><p> if ( self.day[0] == 'Sunday' ):</p><p> self.day[0] = 'Domingo'</p><p> self.day[1] = 'Lunes'</p><p> self.day[2] = 'Martes'</p><p> self.day[3] = 'Miercoles'</p><p>self.sunrise = w[f][0]['sunrise']</p><p>now with the month, search this line...</p><p>sfont = pygame.font.SysFont( fn, int(ymax*sh), bold=1 )# Small Font for Seconds</p><p>put this following....</p><p>tm1 = time.strftime( &quot; %I:%M&quot;, time.localtime() )# 1st part</p><p>tm2 = time.strftime( &quot;%S&quot;, time.localtime() )# 2nd</p><p>tm3 = time.strftime( &quot; %P&quot;, time.localtime() )# </p><p> if (time.strftime( &quot;%b&quot; ) == 'Dec'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Dic'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Jan'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Ene'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Feb'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Feb'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Mar'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Mar'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Apr'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Abr'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'May'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' May'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Jun'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Jun'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Jul'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Jul'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Aug'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Ago'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Sep'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Sep'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Oct'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Oct'+tm1, True, lc )</p><p> else:</p><p> if (time.strftime( &quot;%b&quot; ) == 'Nov'):</p><p> rtm1 = font.render( self.day[0][0:3]+time.strftime( &quot; ,%d&quot; )+' Nov'+tm1, True, lc )</p><p>(tx1,ty1) = rtm1.get_size()</p>
<p>It is possible to change the language if so please help</p>
Should not be too hard. There is already a way to flip the default units to metric. Look near the top of the source code. There are comments that describe how to change the units.<br> <br> For all the rest, just search through the source code file to find all the English words and replace them with your preferred language. Should be really easy. You can't hurt anything so just go for it and make the changes. Worst case, the new language might not fit. However, with enough effort you should be able to abbreviate or otherwise shorten things to make them fit.<br> <br> Good Luck,<br> Jim
<p>Thank you and look for the file in which I mean a change such as Monday and the name of the month.</p>
<p>Great instructable ! I was able to modify the script to suit my needs. Next step: PiTFT and enclosure</p>
<p>Please help shift hours from 12h to 24h</p>
<p>Hi all,</p><p>I found the TFT version of the script and after remming out line 19, it works! Now I am not a python guru, but I understand the script loops every second to update the seconds on the display and every minute to update weather. To reduce network load, every ten minutes or so would be more than accepatble, but would it be possible to loop through a couple of destinations on the minute... And put the location name somewhere on the screen?</p><p>Best regards, Peter</p>
<p>Hi,</p><p>I realise this is dated, but I would love to have this <br>weather station! I run on a pi3, with the small tft lcd screen on it. <br>For some reason I get nothing displayed. Alle steps appear to have <br>worked, but I do not get a display. Please advice what could have been <br>done wrong.</p><p>Best regards, Peter</p>
<p>I get errors like failed to add edge detection line 710 and No module named evdev I tried all the files u uploaded but I get a error. :(</p>
Can you copy the actual error messages and copy them into a reply to your message? Honestly, I have no idea what a &quot;failed to add edge detection line 710&quot; means. Basically, we need the actual complete error message to be able to provide any help.
<p>Thanks for sharing project. Code is working perfectly. Wondering how to change temperature unit from DEG F to DEG C</p>
<p>Is it possible to show the name of the city matching with the location code/zip code?</p>
<p>Well, I'm still seeing lock ups at times. Seems like the display will run for days and days - weeks and weeks sometimes. Then, I get into cycles where I have to cycle the power once a day. And that will go on for days. Then I'll be good again. Super hard to diagnose as a standalone app. I guess some kinda file system logging could be done.</p><p>But I'm pretty sure the problem relates to the weather api call. I think it gets stuck on the line that calls the weather api.</p><p>That call should be wrapped in a separate task so the main task can continue even if the weather api code dies. But alas, no time no time. Seems easier to cycle the power for now. Well, until the Pi file system goes corrupt again with all the power cycles, that is.</p><p>What we need here is a fresh volunteer python wiz. </p>
<p>Hi</p><p>I used this site to get my location.</p><p><a href="https://weather.codes/" rel="nofollow">https://weather.codes</a></p><p>Just search for your city.</p>
<p>Very cool project. Great explanations as well.</p><p>I got this to work on the PiA+, B+ and Pi3. What I find is that it runs for a few hours this it freezes. Meaning the display is there but the seconds stop...no more updates. I can still ping it with no problem. I used a 5' and 7' display. </p><p>Any ideas?</p>
<p>I found out what my problem was. I used ssh from my laptop to remote into the pi and start the weather program. Everything works as long as my ssh session does not die. That was the problem. When my laptop goes to sleep or if I exit the session the weather program freezes. </p><p>The solution (for me) is to run the weather program directly from the pi and not remote from a ssh session. </p>
<p>Thanks, worked like a charm.</p><p>My greatest challenge was finding weather.com's location code for Stockholm. :)</p>
<p>How did you get your location code? </p>
<p>Found a smaller screen for it and mounted on the wall at work, well monted it near the wall anyway. :)</p>
<p>Made this project using a Rpi3, and the new Rpi 7&quot; touchscreen. Had to adjust the display resolution to fit properly, but it looks great! Will probably modify the code to allow for touch (instead of keyboard) input, and add a few more screens. </p>
<p>Great build, had it going in 20 minutes. I have two questions:</p><p>I am not a python programmer.</p><p>1. How can I display the city and state at the top of the screen?</p><p>2. How do I exit out of the program so that I can make changes to the code?</p>
<p>Hey Jim, thanks for the hard work i'm having a hard time with the setup, I'm using a pitft 2.8&quot; 320x240. I'm using FBCP to copy the frame buffer to the pitft. (looks like you have done a build with it as well) when i use the new script listed below i get the following error,</p><p><strong>[code]</strong></p><p><strong>pi@weather</strong>:<strong>~/Weather $</strong> sudo python weather.py</p><p>Traceback (most recent call last):</p><p> File &quot;weather.py&quot;, line 19, in &lt;module&gt;</p><p> from evdev import InputDevice, list_devices </p><p>ImportError: No module named evdev</p><p>[/code]</p><p>When i comment out that line i get the image perfect, but the refresh image blanks after refresh for what im guessing is almost a second before the image comes up again for a split second then blanks again</p><p>when i run the old script from the Weather.zip the image formatting / scaling is incorrect, i've tried messing around but have had no success. Let me know if you have any ideas, thanks!</p>
<p>I see you've make it work on one of the pitfts, I cant manage it, how do you do it? <br><br>This is as far as I've gotten. It works through HDMI on my TV though.</p>
<p>Hey,</p><p>It's been a really long time since I worked on this - I'm afraid I've forgotten most of the details. However, your right, I did have to do some changes to get the TFT screen to work. Attached is the source code for my TFT setup. I just uploaded the code right from the running Pi so this should be good stuff. </p><p>Hope it helps,</p><p>Jim</p>
<p>Hi Jim, this looks really good. My 10 y/o daughter and I want to try it out, I have a 7&quot; TFT screen that I want to use. for some reason the thing will only work with a different kernel and 4 or so wires hooked to the GPIO. Do you know how to make it work with just the HDMI and power cable? I don't need the touch screen, I just want the screen to work with Vanilla Pi. Again thanks for being inspiring. </p><p>Chip</p>
<p>A couple of things to check / try. Make sure the Pi GUI is up and running first. My source code uses PyGame which runs on top of the Pi GUI. Then, open a terminal and launch my Python code with the &quot;sudo&quot; (super user doer command). The &quot;sudo&quot; gets around any permission problems. If there is a problem then Python will kick out some kinda error message you can use to debug the problem. Remember to install PyGame and the weather plug-in. See above for instructions.</p><p>Also know, there are a couple of different versions floating around this instructable. Make sure your using the version for the HDMI. The other version make use of a SPI based small TFT.</p><p>The GPIO does not have to be hooked up to anything. If you do hook it up, a push button can switch to other screens of info. There is also a shutdown button if you hook it up. No worries if the IO is not attached to anything.</p><p>Hope this helps,</p><p>Jim </p>
<p>I used your programming the only thing I did was uncomment 3 or 4 things and change the zip code it works great for my first project</p><p> thank you!</p>
<p>Thank you for the nice tutorial how to set it up. I have it running on my Raspberry Pi 2, with a Dutch zip_code. This also works, very good.</p><p>I would like to ask if it is possible to reduce the screen height with the configuration?</p><p>For the rest i will take a shot to translate this to Dutch.</p><p>Thank you for the nice application.</p>
<p>I can't get this to work. When I run weather.py nothing happens on the GUI. This is what the terminal shows:</p>

About This Instructable

123,867views

220favorites

License:

Bio: Founder of Powerhouse Electronics. For more info goto: www.ph-elec.com
More by jimk3038:Easy ESP8266 WiFi Debugging with Python Raspberry Pi Internet Weather Station Make Your Own Laser Cut Standoffs for Electronic Projects 
Add instructable to: