Outdoor 3D Printed Wireless IoT Weather Station

10,354

204

14

Introduction: Outdoor 3D Printed Wireless IoT Weather Station

In this Instructable, we're going to be building an outdoor weather station that takes temperature, humidity, barometric pressure, light, and wind speed readings and posts them to the cloud to access through a Thingspeak dashboard.

I’m going to use a development board from DF Robot called a Firebeetle ESP32-E IoT. I’ve chosen this particular board because it is inherently designed for low-power applications and can be powered by a lithium-ion battery. It's got a battery plug directly on the board and supports charging through the USB C port.

For the sensors, I’m going to be using grove sensors by Seeed Studios. They integrate all of the required supporting components, so you just need to make the connections between the sensors and your microcontroller. They use grove cables to plug into supported hats and boards, like the Arduino MKR IoT Carrier board. I’m going to modify one end of each cable to make up a harness that plugs into the pins on the Firebeetle board.

Supplies

Equipment Used

  • Voxelab Proxima 6.0 3D Printer (Amazon) – Buy Here
  • Voxelab Proxima 6.0 3D Printer (Voxelab Direct) - Buy Here
  • Fluke Multimeter - Buy Here
  • TS100 Soldering Iron - Buy Here
  • Dremel Versatip Heat Gun / Soldering Iron - Buy Here

Some of the above parts are affiliate links. By purchasing products through the above links, you’ll be supporting my projects, with no additional cost to you.

Step 1: Prepare the Board & Sensors

The sensors all come from a Grove Beginner Kit and have been removed from the original backboard. I’m going to use a pressure sensor that uses I2C communication, a DHT11 sensor that uses a digital pin and the light sensor that uses an analogue pin.

I’m also going to make up an anemometer or wind speed sensor on the top that uses a reed switch to trigger an interrupt routine for each rotation.

The Firebeetle board has a small bridge in the centre of the board which they recommend breaking if you’re going to be using the board for low power applications. I couldn’t find any information in the documentation on what this does, but I presume it disables things like the onboard power led in order to save power.

If you ever want to undo this, just solder a bridge across these two pads again.

Step 2: Trial Assemble Sensors on a Breadboard

As with any electronics project, its a good idea to trial assemble the components on a breadboard first to test the connections and code.

I’ve connected the pressure sensor to the I2C interface on the board, the DHT11 sensor to pin 14, the light sensor to pin 36 and the reed switch to pin 0.

The other connections are just to 5V and GND.

Have a look at my blog post if you need some additional help with the connections.

Step 3: Program the Firebeetle ESP32 Board

I then wrote up a sketch to take readings from the sensors every ten minutes and post the data to Thingspeak. Between readings, the ESP32 is put into deep sleep mode in order to save power. This shuts down the WiFi and Bluetooth communication modules as well as the CPU.

You’ll notice that all of the code is in the setup() function and the loop() function is left empty. This is because the ESP32 only runs the setup() function when operating in deep sleep mode, so only the code in this function is executed each time it wakes up.

Thingspeak have an Arduino IDE library to make posting data to their server a bit easier, so you'll need to install this library first.

You also need to create an account on Thingspeak and then create a channel for your data which you’ll then be able to generate a write API key for. The API key is effectively the password your ESP32 uses to be able to post data to your Thingspeak channel, so that Thingspeak knows that the data is coming from the correct source.

I’ve created a weather station channel and then made a dashboard to view the channel data which I’ve put a gauge and a trend chart onto for each field.

The wakeup cycle takes about 20-30 seconds to complete including the 10 seconds that the ESP32 waits to measure the wind speed data.

Step 4: Solder a Wiring Harness

Once you're happy with the connections to the sensors and you've got the code running, you can make up a permanent wiring harness. This will provide a more reliable connection between your sensors and Firebeetle board.

I cut the plugs off of one end of each of the grove cables and then soldered these onto some male header pins to plug into the board. I also used some female jumpers to make up the leads that the reed switch plugs into.

Step 5: 3D Print the Housing

I designed the housing to be 3D printed in resin so that the vented sensor housing doesn't need to be assembled in layers. I wanted it to be as compact as possible, so I wanted to integrate the sensors and the anemometer into a single assembly. The design I came up with housed the ESP32 and battery in the base, with the sensors in a vented center compartment and the anemometer on top.

I’m not yet sure how well resin prints will hold up in the sun. I’ve done a bit of research on it and most say that it’s a bad idea, listing brittling and UV damage as likely to lead to failures, but I’ve also seen a couple of tests where people have actually left prints outside and they didn’t seem to have any visible damage. So I thought I’d give it a try and see how long it lasts.

I printed them in regular pla style white resin, cleaned them up and allowed them to cure in the sun for a day as I don’t yet have a curing chamber.

You can download the 3D print files here.

Step 6: Install the Sensors

I mounted the grove sensors onto the sensor stand, with the temperature and humidity sensor on one side and then pressure and light sensors on the other. I already added the mounting holes into the 3D print, so each sensor just needs to be screwed into place. I just used some small screws that I had lying around from some servos.

Step 7: Assemble the Anemometer

Bend the legs of the reed switch 90 degrees so that it can be seated in the top of the sensor housing with the legs through to the inside. I put some resin into the gaps at each end to seal them up and cured the resin with a small UV light.

The anemometer is held in place with a single M5x20mm screw pushed through the housing from the inside. A nut holds the screw in place and a second nut then holds the two bearings on the screw. Tighten this nut to hold the bearings in place, but don't make it so tight that it restricts their rotation.

Push a couple of magnets (4-5) into one of the gaps in the anemometer base. These will trigger the reed switch on each rotation.

Lastly, push the anemometer onto the bearings so that it sits a couple of millimeters above the reed switch.

Step 8: Connect the Firebeetle Board

Plug the grove leads into the sensors and connect the jumpers to the reed switch. Plug the battery into the firebeetle board, remembering to charge it first, and then close up the housing with some M3x8mm screws.

The weather station should now be connected to your WiFi network and posting data to Thingspeak, so it's ready to be mounted outside.

Secure it outside with three screws through the supports on the bottom of the base.

Step 9: Test the Weather Station

I left the weather station outside for a couple of hours and then opened up my Thingspeak dashboard. The sensors all seemed to be working well and the data trends were visible on the graphs.

I also tested the current draw from the batteries and found that the board uses around 30-60mA when running, 120mA when posting data over WiFi, and that the current draw goes down to 1.2mA when in deep sleep mode. So on a 2500mAh battery, you should get a little under 2 months of run time on a single charge. You could also add a small solar panel to the assembly to keep the battery charged during the day.

As luck would have it, this was the most still weekend we've had in months, so there was virtually no wind to test the anemometer with. There were a couple of light breezes that registered on the graph, but the readings were way higher than what the actual wind speed was. So the wind speed calibration definitely needs to be adjusted and I'll need to do some further testing to get this set up properly.

Overall I'm really happy with the way it has come out. Hopefully, I'll have a couple of windy days in the coming weeks and I'll be able to adjust the timing to get the wind speed sensor set up properly.

Let me know what you think of the weather station in the comments section and please consider voting for it in the Backyard contest if you enjoyed it.

Backyard Contest

Participated in the
Backyard Contest

Be the First to Share

    Recommendations

    • Stone Concrete Cement Contest

      Stone Concrete Cement Contest
    • Fabric Challenge

      Fabric Challenge
    • First Time Author Contest

      First Time Author Contest

    14 Comments

    0
    diy_bloke
    diy_bloke

    10 months ago

    Interesting. Just wondering if PLA would be the right choice of filament for outside use. PETG a better choice perhaps?

    0
    dnsbob
    dnsbob

    11 months ago

    In rain with high wind, I expect you will get too much water inside. A second ring of vent louvers a cm or two outside the existing ones should make that much less likely. Or even a solid 'cup' inverted over it would work. Rain can splash a long way.

    0
    n9god
    n9god

    11 months ago on Step 9

    One quick and easy wat to compile some windspeed data would be to mount the unit - temporarily - on a vehicle and log the results at various speeds

    0
    thediylife
    thediylife

    Reply 11 months ago

    Thanks for the suggestion, this was similar to my plan - to use a bicycle inside a warehouse to calibrate it. The bicycle speed sensors are fairly accurate.

    0
    k3nth0ma5
    k3nth0ma5

    Question 11 months ago on Introduction

    Nice looking project. What type of weather environment have you considered for the project? For example any temperature extremes? How about rain?
    Thanks.

    0
    thediylife
    thediylife

    Answer 11 months ago

    I had planned on extremes of -5C to 40C as the temperatures here rarely (if ever) exceed those limits. Rain is still a bit of an experiment on this design, I'll see how well the sensors hold up over time.

    0
    marchhare9
    marchhare9

    11 months ago

    Really nice! I'd think a natural addition would be a solar panel to charge the battery.

    0
    thediylife
    thediylife

    Reply 11 months ago

    Yes I think this is definitely going to be the next addition to the weather station.

    0
    ionultd
    ionultd

    Tip 11 months ago on Step 9

    Get a cheap handheld anemometer device from Ali then use a household fan, which will give you a constant wind speed, and direct it towards your anemometer and the hand held device so you can see the fan wind speed and make you adjustments :-)

    0
    thediylife
    thediylife

    Reply 11 months ago

    Thanks for the suggestion, this sounds like a neat idea.

    0
    MarcelS9
    MarcelS9

    11 months ago

    This looks fantastic but I think for outdoor use you really want to use ABS (instead of resin or say PLA).

    0
    thediylife
    thediylife

    Reply 11 months ago

    Since there seems to be a lot of debate around this, I'm planning on doing some testing on different filaments and resins left outside for a period of time and see how well the each hold up.

    0
    jbike2015
    jbike2015

    Reply 11 months ago

    I have parts on my own design anemometer printed in abs and pla. Actually, thick pla lasts longer in the sun than thick abs, but thin abs lasts longer than thin pla. The thin abs lasts about 1 to 2 years. Some sort of paint covering the print should help. Also, pla under any stress in the heat of summer will distort, abs won't distort.

    0
    BerenV
    BerenV

    Reply 11 months ago

    I’ve had good luck using PETG outdoors, it lasts a lot longer in the sun. This is with FFF printing, ABS is probably the best option for resin printers