I’ve designed and constructed an outdoor IoT weather station that can report humidity, temperature, and pressure every 48 times a day, every day, for months on end. It does not require a base station or hub, is constructed from inexpensive parts, and the data can easily be read from anywhere using the Thingspeak API.
All project files are available on Thingiverse.
The circuitry of this weather station primarily consists of the minimum circuit for an ESP8266 (regulator, pullups, pulldowns, flash button, reset button), with pins broken out for UART and I2C. It also has a voltage divider between the ADC and power input to let the ESP8266 read and report the battery voltage.
All of the SMD resistors and capacitors are neatly hidden on the pack face of the PCB.
I used the ESP-12F module, as it provides all the IO I need in a compact little 24mmx16mm package. The ESP8266 communicates over I2C with a Bosch SensorTec BMP280 atmospheric sensor mounted on an off-the-shelf breakout board.
The housing is designed to withstand all forms of precipitation, any possible outdoor temperature, and constant UV exposure. To meet these needs, I constructed the entire thing out of PETG, a UV-stable, high strength plastic. At the same time, however, the weather station’s Stevenson screen sides and open bottom allow for ample airflow, ensuring accurate readings.
The firmware on board utilises the ESP8266’s deep sleep functionality, allowing it to draw current in the microamps when it is not collecting data. Every 30 minutes, it wakes up for a couple seconds to read the sensor data, connect to WiFi, and report its findings via the Thingspeak API.
Thingspeak acts as the glue binding the weather station to all its clients. It also provides simple visualizations:
I ended up using my own visualizations anyways, but the fact that these plots are available out of the box is nice.
Real Time Displays and Visualization
A few clients have been set up to read data from this weather station’s Thingspeak channel, including a live dashboard written using Dash and an OLED display in the kitchen.
Update: due to cold weather killing my batteries, the weather station has been experiencing interruptions lately. I plan on eventually getting a better battery solution to prevent some of the low voltage issues I’ve been having.