Introduction: Complete DIY Raspberry Pi Weather Station With Software

Picture of Complete DIY Raspberry Pi Weather Station With Software

Back in late February I saw this post on the Raspberry Pi site.

They had created Raspberry Pi Weather Stations for Schools. I totally wanted one! But at that time (and I believe still as of writing this) they are not publicly available (you need to be in a select group of testers). Well, I wanted on and I didn't feel like shelling out hundreds of dollars for an existing 3rd party system.

So, like a good Instructable user, I decided to make my own!!!

I did a little research and found some good commercial systems I could base mine off. I found some good Instructables to help with some of the Sensor or Raspberry PI concepts. I even found this site, which was pay dirt, they had tore down an existing Maplin system:

Fast forward about a month and I have a basic working system. This is a complete Raspberry Pi Weather system with just the base Raspberry Pi hardware, camera, and some assorted analog and digital sensors to make our measurements. No buying pre-made anemometers or rain gauges, we are making our own! Here's it's features:

  • Records info to RRD and CSV, so can be manipulated or exported/imported to other formats.
  • Uses the Weather Underground API to get cool info like historical highs and lows, moon phases, and sunrise/sunset.
  • Uses the Raspberry Pi Camera to take a picture once a minute (you can then use them to make timelapses).
  • Has webpages that display the data for the current conditions and some historical (last hour, day, 7 days, month, year). The website theme changes with the time of day (4 options: sunrise, sunset, day and night).

All of the software for record and displaying the information is in a Github, I've even done some bug tracking, feature requests in there as well:

This project was a great learning experience for me, I got to really dive into the capabilities of the Raspberry Pi especially with the GPIO, and I hit some learning pain points as well. I hope you, the reader, can learn from some of my trials and tribulations.

Step 1: Materials

Picture of Materials



  • Raspberry Pi - I used the B+
  • Wireless adapter
  • Pi Camera
  • A solid 5V power adapter (this turned out to be painfully annoying, I eventually got the Adafruit one, otherwise the camera pulls too much juice and can/will hang the Pi, it's here:


  • 2 Thrust Bearings (or skateboard or roller-skate bearings will work too), I got these on Amazon:
  • 2 Waterproof Enclosures (I used an electrical enclosure from the local big box store), doesn't matter much, just need to find a good size enclosure that's going to have enough space and protect everything).
  • Some PVC Pipe and End Caps (various sizes).
  • PVC mount brackets
  • Couple sheets of thin Plexiglass (nothing too fancy).
  • plastic standoffs
  • mini screws (I used #4 bolts and nuts).
  • 2 Plastic Christmas Tree Ornament - used for the anemometer, I got mine at the local Hobby Lobby.
  • Small dowel
  • Small piece of plywood.


  • Dremel
  • Glue Gun
  • Soldering Iron
  • Multimeter
  • Drill

Step 2: Main Enclosure - Pi, GPS, Camera, Light

Picture of Main Enclosure - Pi, GPS, Camera, Light

The main enclosure houses the PI, the Camera, the GPS and the light sensor. It is designed to be waterproof since it houses all the critical components, the measurements are taking from the remote enclosure and that one is designed to be exposed/open to the elements.


Pick an enclosure, I used an electrical junction box, various project boxes and waterproof cases will work just as well. Key point is it has enough space to hold everything.

My Enclosure contains:

  • The raspberry pi (on standoffs) - Needs a WIFI chip, don't want to be running Cat5e into the backyard!
  • The Camera (also on standoffs)
  • The GPS chip, connected via USB (using a sparkfun FTDI cable: - The GPS provides latitude and longitude, which is nice, but more importantly, I can get accurate time from the GPS!
  • two ethernet/cat 5 jacks to connect the Main enclosure to the other enclosure that houses the other sensors. This was just a convenient way of having cables going between the two boxes, I have roughly 12 wires, and the two cat5 provide 16 possible connections, so I have room to expand/change things around.

There is a window in the front of my enclosure for the Camera to see out of. The case with this window protects the camera, but I did have issues where the red led on the camera (when it's taking a photo) reflects off the plexiglass and shows up in the photo. I used some black tape to mitigate this and try and block it (and other LEDs from the Pi and GPS), but it's not 100% yet.

Step 3: 'Remote Enclosure' for Temperature, Humidity, Pressure

Picture of 'Remote Enclosure' for Temperature, Humidity, Pressure

This is where I stored the Temperature, Humidity, and Pressure sensors as well as the "hook ups" for the rain gauge, wind direction and wind speed sensors.

It's all very straightforward, pins here connect via the ethernet cables to the required pins on the Raspberry Pi.

I tried to use Digital sensors where I could and then any Analog are added on to the MCP 3008 it takes up to 8 analog which was more than enough for my needs, but gives room to improve / expand.

This enclosure is open to the air (it has to be for accurate temperature, humidity and pressure). The bottom holes are popped out, so I gave some of the circuits a spray of a Silicone Conformal Coating spray (you can get it online or a place like Fry's Electronics). Hopefully it should protect the metal from any moisture, though you have to be careful and not use it on some of the sensors.

The top of the enclosure is also where the wind speed sensor fits. It was a toss up, I could have put the wind speed or wind direction on top, I didn't see any major advantages of one over the other. Overall you want both sensors (wind dir and speed) high enough where buildings, fences, obstacles don't interfere with the measurements.

Step 4: Rain Gauge

Picture of Rain Gauge

I mostly followed this instructable to make the actual gauge:

I made this out of plexiglass so I could see what was going on and I thought it would be cool. Overall the plexiglass worked ok, but combined with the Gluegun, rubber sealant and overall cutting and drilling it doesn't stay looking that pristine, even with the protective film.

Key points:

  • The sensor is a simple reed switch and magnet treated like a button press in the RaspberryPi code, I simple count buckets over time and then make the conversion later to "inches of rain".
  • Make it big enough to hold enough water to tip, but not so much that it needs a lot in order to tip. My first pass I made each tray not large enough so it would fill and start draining over the edge before it tipped.
  • I also found that residual water could add some error to the measurement. Meaning, completely dry it took X drops to fill a side and tip it, once wet it took Y drops (which is less than X) to fill and tip. Not a huge amount but came into affect when trying to calibrate and get a good "1 load equals how much" measurement.
  • Balance it, you can cheat by adding gluegun glue to the underneath ends if one side is vastly heavier then the other, but you need it as close to balanced as you can.
  • You can see in the photo I setup a little testing rig using some sponges and a wood holder to test and get it balanced properly before installing.

Step 5: Wind Direction

Picture of Wind Direction

This was a simple weather vane. I based the electronics off the Maplin system:

Key Points:

  • This is an analog sensor. The eight reed switches combined with various resistors divide up the output into chunks so I can identify which coordinate the sensor is in by the value. (The concept is explained out in this instructable:

  • After screwing on the weather vane part you do need to calibrate it so that "this direction is what points north".
  • I made a test rig with wood so that I could switch in and out resistors easily that covered the full range of values for me, that was super helpful!
  • I used a thrust bearing, it did fine, I'm sure a regular skateboard or rollerskate bearing would have been just as fine.

Step 6: Wind Speed

Picture of Wind Speed

This one I once again turned to the Instructable community and found and followed this instructable:

Key points:

  • You can use the hall sensor or switch to a reed sensor as well. The hall sensor is more of an analog sensor so if you are using it in a digital way, like a button press, you need to make sure the reading/voltage is high enough that it acts like a true button press, rather than not enough.
  • Size of the cup is crucial, so is the length of the stick! Originally I used ping pong balls and they were way too small. I also put them on long sticks which didn't work either. I got very frustrated and then came across that instructable, Ptorelli did a great job explaining and it helped me out when my original design didn't work as well.

Step 7: Software

Picture of Software

Software is written in Python to record the data from the sensors. I used some other 3rd party Git libraries from Adafruit and others to get the information from the sensors and GPS. There are also some cron jobs that pull some of the API information as well. Most is explained/outlined in the Git documentation at docs/install_notes.txt

The web software is in PHP to display it on the webpage while also utilizing YAML for the config files and of course the RRD tool to store and graph the data.

It utilizes the Weather Underground API to get some of the interesting data that sensors can't pull: Record Hi's and Lows, Phase of the Moon, Sunset and Sunrise times, there's also Tides available on their API, which I thought was really neat, but I live in Austin TX which is very far from water.

All of it is available on Github and is actively maintained and currently being used as I further refine and calibrate my own system, so you can submit feature requests and bug reports as well.

The software goes through a theme change depending on the time of day, there are 4 stages. If the current time is + or - 2 hrs from sunrise or sunset then you will get the sunrise and sunset themes, respectively (right now just a different background, I will probably do different font/border colors in the future). Likewise outside those ranges gives the day or night theme.


ThomasH130 (author)2017-10-03

is there eneyway of geting the code

BikerRay (author)2017-08-31

The pressure sensor is discontinued. Try this one:

joeberman334 (author)2017-07-22

So, if I'm understanding the instructions right, I'm supposed to gather all the materials and then hook them all up. Super clear instructions. Really cleared things up for me. Thanks.

IanS256 (author)joeberman3342017-07-22

yeah, the instructions are a bit vague, especially for a beginner. Im about to attempt this myself; all the parts just came in, and i stopped at the hardware store today. let me know if you attempt it too. maybe we can compare notes :p

DanielR510 (author)IanS2562017-07-24


I'm also about to attempt this craft. The "hardware" part i found it quite easy to make, but the software one...

I come from Arduino world, and I don't really know what to do with the files he let us in Github...

CecilLandow (author)2017-07-23

I will join those that just posted in July 2017 in building this. I need some help to gain some traction.

Do I need to 1st become an premium user and download the ("super clear") instructions? Or are what I see as a non premium user the extent of the instructions?

kwisher (author)2017-07-08

I've just recently found this how-to and noticed the last comment was 2 years ago. I was just checking to see if there are still people available for help if I attempt this project.

bqbowden (author)2017-02-23

Hello. I need something similar for my greenhouse but I also need to measure ph of my water. Does anyone know of a sensor that can do that?

HansG19 (author)bqbowden2017-03-02

An account (author)2016-11-05

So you're saying that the reed sensor can replace the optical sensor?

rpotts2 (author)2016-09-08

Finally!!! I've been looking for something comprehensive that I could adapt for kite use! You've put it all together in one easy to read place!

gazman321 (author)2016-04-15

Great Instructable, I'm trying to build this weather station, but having a few issues with moving the files to correct locations, where to put API key, GPS ( had it working on pi, now i get connection refused) and an empty website, I can get it to display any data.

Has anyone managed to get this working on Raspbian Jessie and a pi3?

David_Dragino (author)gazman3212016-07-04

It's very cool! There is another useful board here,LoRa/GPS HAT

and you can get the tutorial here

walt-s (author)2016-03-31

I am having a really hard time getting any of the software to work. I can use the getAPIData module to print out the data on the screen, but it won't update the database; the program does the same, and the web page just comes up empty. Everything in the database shows up as "NaN".

I tried using "updatev" to get more info on the update problem and I get 19 error messages, complaining about RRA AVERAGE, MIN, and MAX not found for every variable.

I've been reading the PHP and RRD documentation but still can't get anything to work. (I am a programmer, familiar with C, VB, mySQL, and ODBC on various platforms).

Can anyone provide comprehensive instructions on the software setup. the install notes are just too vague for me to follow.



TiagoSantos (author)2016-03-16

Hello. I've design some parts for the weather station. Can be downloaded from here:

JeFfA39 (author)2016-02-19

hola soy novato en esto me podrias ayudar de urgencia nose ya instale todos los updates del el archivo notes-install.txt pero no se como hacer que se me visualize en esa pagina con la lunas osea todo creoq es una pagina web me podrias ayudar xfa muchas gracias

tangorom (author)2015-10-14

Hi there, chief. Started to get all parts/materials to build the station with my RPi2; I went through all files from zip archive (from Github) but would be really-really helpful for many interested in this beautiful project if some wiring/schematics would be posted. Any suggestions? Much appreciated, thx.

nfarrow (author)tangorom2016-01-28

Use an Arduino nano to get the analog data, then dump it as serial data to the pi. Would be the easiest way.

nfarrow made it! (author)2016-01-28

I just put the data from the Internet and then push the weather data to an LCD screen using i2c.

jerryk959 (author)2015-06-24

I am interested! I will email you shortly. Thanks!

MarcP5 (author)jerryk9592015-12-01

they are all sold. sorry!

tangorom (author)2015-11-14

hey man,

I've seen you had a tentative of dropping some schematics. great. can't wait for them as I'm in the middle of building it. I HOPE we'll have them soon. Thx.

on the other hand, this is what's on your notes regarding the BMP180/183 sensor:



wiring pins 8,10,12,16:

self.SCK = 8 # GPIO for SCK, other name SCLK

self.SDO = 10 # GPIO for SDO, other name MISO

self.SDI = 12 # GPIO for SDI, other name MOSI

self.CS = 16 # GPIO for CS, other name CE

bmp works staright up with ./


the problem I have is that on RPI2's GPIO pin8 is SPI_CE0; pin10 is SPI MOSI (not MISO which is GPIO pin9). Which ones are the correct ones to connect the sensor with RPI2 ? thx again

AdrieSentosa (author)2015-11-11

Very nice work dude. Thank you for sharing with use.

stp715a (author)2015-04-17

Excellant project! Thank you for sharing. Could you please provide a schematic or drawing of the wiring connections?

Thank you.

kkingsbury (author)stp715a2015-04-21

Thanks! I don't have one, but you're right, it would be helpful to see how all the connections are made. I'll try to get one done and posted, thanks for the feedback.

pt3pt3 (author)kkingsbury2015-10-09

Very good project! Please send me the wiring diagram too (if you have it). Thank you!

stp715a (author)kkingsbury2015-04-21

Thanks. If I can help by taking your hand drawings and creating a cad schematic please let me know.

hardwarify (author)2015-09-22

hi, I cant understand how to build wind anemometer. Can you briefly explain? thanks

MichałO (author)hardwarify2015-10-03

Bulid in magnetic sensor, every rotation 'put' signal, rpi read signal and calculate (how many signals/min), worst part is calibrating

cooperguy31 (author)2015-09-14

I would like to buy a kit from you please, do you have anymore left?

ChrisR60 (author)2015-09-11

Pricing the parts from Amazon is around $125 w/o the Pi and camera.

Little steep for my taste. Guess I'll have to buy pieces over a few months.

Looks like a really good build and I intend on making this though.

ChrisR60 (author)2015-09-09

Any more available? I emailed you.

DarwinF (author)2015-09-08

Good Day! can i ask you sir how the data transfer in to a website? because that weather forecast is my thesis project. thank you hoping that you reply.

fandujar (author)2015-08-23

did you still have this kits?

PedroC22 (author)2015-08-19

i have a question, can anyone tell me how could i trasmit the data over radio?


TonyA3 (author)2015-08-16

Nice project. I have one question - why did you connect the wind direction reed switches to resistors as in the original Maplin design, when there is enough GPIO on the R Pi to do this completely digitally? Since your other sensors are digital, you could have saved the need for an ADC.

asyraf02 (author)2015-08-05

can u ship the package outside us?

Kris Jacobs (author)2015-07-13

Awesome instructable, thank you! Your style to present all the data is especially nice.

I just saw these on today -- would make a super easy accurate rain guage I bet. That plus a tube and a Pi-controlled valve to dump the tube once per day or something like that.

Kris Jacobs (author)Kris Jacobs2015-07-13

Oops, URL!

RicanStarr (author)2015-06-27

very nice weather station dude, super pimp. I am also interested in the $25 Kits i will email you too.

linuxweenie (author)2015-06-11

Thank you sir! I am a little late in finding this one but I have been looking all over the place for some Weather Underground API setups. I have a weather station (Davis Instruments Vantage Vue) which pushes data to Weather Underground, CWOP, and WeatherBug - it runs through weewx on a Raspberry Pi. I wanted to have a living room display of my weather stations information, extracted from Weather Underground, rather than generating it at home and your code fits a lot of the bill. More info at on what I am doing. Thanks for the instructable!

hoby2199 (author)2015-05-16

I may just be missing it but can you post the Gethub address?

momet (author)2015-05-06

Really great idea! Excellent detail on the mechanicals and software.
Thank you. However not sure how anyone can use this instructable to
build anything without a wiring diagram or schematic. Is it possible you can share? Could try to backward engineer this but a schematic or simple wiring diagram would be very useful and appreciated.

TimB13 (author)2015-05-02

I Like It! Been Looking for a good way to make a weather station for months. this is the best i have found and.reading the comments here, I think other think the same as me. Once you have to drawings I am super interested. Also could you delve into the anemometer a little more with the bearing set up?

LlewellynR (author)2015-04-12

How much did all of this cost roughly?

kkingsbury (author)LlewellynR2015-04-13

I had a lot of the parts already, but I probably spent about $100 (some pieces took a couple builds as well before I found a good design so I wasted some materials) the most expensive pieces are the Pi, GPS, Camera. Everything else is like $5 here, $10 there, but it does add up. Sensors were relatively cheap between $2 (Reed Switch) to $10 (the BMP183). To start from scratch I guess it would cost somewhere in the $100 to $150 range (Just a PI, Camera and GPS puts you easily at the $100 mark though).

diy_bloke (author)kkingsbury2015-04-21

you have chosen quite sturdy and thus relatively expensive reed switches. Glass switches are a lot cheaper and once they are mounted they are protected enough I think, so yeah it is possible to cut down here and there.
For those who will just build it for their own place... indeed GPS could be omitted (and get a cheap RTC (DS3231) (but that would mean rewriting the code)
Anyway, really impressive

diy_bloke (author)2015-04-21

Great instructable.

kkingsbury (author)diy_bloke2015-04-21


RodrigoG3 (author)2015-04-13

Looks great! I would like to know how much time did it take you to build it? I've never worked with the rasp before, do you think it would be achievable for me?

About This Instructable




More by kkingsbury:Scrappy Science CaddyNOAA Satellite Signals with a PVC QFH Antenna and Laptop Folding Project Table
Add instructable to: