Skip to the content
2 layers128 × 41.5 mmWeather station ext, the printed circuit board in 3D

Weather station ext

rbat05/SolarWeatherStation2

Self-sustaining weather monitoring system with dual-node architecture.

Size
128 × 41.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
16
Nets
37
Pads
77
Tracks, vias
86, 6
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
28 Dec 2024
Updated
13 May 2026

Overview

Weather station ext is an open-source printed circuit board by rbat05, from the rbat05/SolarWeatherStation repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 128 × 41.5 mm with 16 parts on 37 nets, routed with 86 tracks and 6 vias.

It is built around the BME280, FQP27P06 and HT7333, with the TP4056 among its other parts. Its parts include 9 connectors, 3 resistors, 2 capacitors, 1 IC and 1 diode. It belongs with the home automation and IoT boards of this library.

Main components

4

README

README.md

SolarWeatherStation

An end-to-end, off-grid IoT environmental telemetry system featuring custom hardware, low-power RF bridging, and a retro LCD-themed web dashboard.

Project Status License: GPL v3 Platform: ESP32 Platform: ESP8266 Framework: Arduino PlatformIO Last Commit

Solar Weather Station Exterior Solar Weather Station Dashboard
Solar Weather Station Exterior (left) and Dashboard (right)

Table of Contents

  1. Overview
  2. Features
  3. Performance
  4. Design Showcase
  5. Bill of Materials
  6. System Architecture
  7. Firmware & Code
  8. 3D-Printed Parts
  9. License

1. Overview

The Solar Weather Station is a completely custom-engineered, three-tier IoT ecosystem designed to capture, transmit, and visualize highly accurate micro-climate data.

Currently measures temperature, humidity, absolute pressure, and battery voltage at 30 seconds intervals.

Operating entirely off-grid, the remote sensor node utilizes solar power and aggressive deep-sleep optimizations to monitor environmental conditions indefinitely. To bypass the extreme battery drain of standard WiFi, it broadcasts lightweight packets via ESP-NOW to a continuously powered indoor Relay node. This Relay acts as a bridge, forwarding the data into a local Python Flask server where it is logged, archived, and displayed on a visually striking, retro-commercial LCD-style dashboard.

2. Features

  • 100% Off-Grid Operation: Powered by a localized solar charging circuit and Li-Po battery.
  • Decoupled RF Architecture: Uses a low-latency, low-power ESP-NOW to WiFi bridge, saving massive amounts of battery life compared to direct-to-router connections.
  • Bulletproof Failsafes: Features hardware brownout bypassing, local SD card data logging, offline memory buffering (RTC memory), and relay rate-limited backfilling so data is never lost during network dropouts.
  • Retro LCD Dashboard: A beautiful, responsive, bespoke green-and-black dot-matrix web interface built with pure HTML/JS, Flask, and SQLite.
  • Historical Replay Engine: A dual-database architecture allows you to dynamically load archived CSV data into a sandbox database to "replay" historical weather events on the dashboard without interrupting the live data stream.
  • Local vs. Regional Analytics: Automatically fetches regional telemetry from the Open-Meteo API to compare your micro-climate directly against metropolitan averages.

3. Performance

Aggressive power-saving techniques were implemented in the ESP32 C++ firmware. By throttling the clock speed down to 80MHz, actively forcing the WiFi/Bluetooth modems off during boot initialization, and removing parasitic hardware LEDs (like the one on the DS3231 RTC), the remote station achieves incredible efficiency:

  • Average Active Time: < 8.0 seconds per wake cycle.
  • Average Active Current: ~60 mA (Peak during SD Write & ESP-NOW transmission).
  • Average Sleep Current: ~2.5 mA.
  • Weighted Average Draw: ~4.03 mA over a standard cycle.

This ultra-low consumption allows the station to easily survive extended periods of heavy cloud cover without dropping below critical battery voltages.

4. Design Showcase

  • Mechanical Design: Custom 3D-printed Stevenson Screen with integrated mounting points for the PCB and solar panel. The solar panel sits at a 35-degree angle to maximize sun exposure (in Auckland, NZ) while the louvers provide airflow to ensure accurate sensor readings.

    Mechanical Render
    3D-Printed Stevenson Screen Render

  • Internal Assembly: Custom PCB secured inside the Stevenson Screen.

    Solar Weather Station Interior
    Custom PCB Mounted Inside Enclosure

  • LCD Dashboard: A retro-inspired web interface displaying real-time and historical weather data.

Dashboard Features:

  • Live Mode: Continuously streams real-time environmental data directly from the local SQLite database.

    Dashboard Main View (Live Mode)
    Main Dashboard View (Live Mode)

  • Historical Replay Engine: Dynamically loads archived 7-day CSV files into a sandbox database to replay historical weather events without interrupting live data ingestion. Can set custom timeframes to analyze specific events (e.g., a storm).

    Dashboard Replay Mode
    Replaying Historical Sandbox Data

  • Local vs. Regional Comparison: Automatically polls regional telemetry from the Open-Meteo API to compare your micro-climate directly against metropolitan averages (displayed alongside the "Today" summary).

    Dashboard Regional Compare
    Local Micro-climate vs. Regional Averages

  • Summary Statistics: Provides actionable insights and rolling statistics (High, Low, Average) across different timeframes:

    • Today: Current day metrics.
    • Yesterday: A rolling 24-hour window to spot diurnal patterns.
    • 72 Hours & 7 Days: Extended views to analyze multi-day weather events and trends.
  • Interactive Graphing: Powered by Chart.js, the interactive graph can map individual metrics over adjustable time-scales (1 hour, 3 hours, 12 hours, 24 hours, 72 hours, or 7 days):

    • Temperature
    • Humidity
    • Absolute Pressure
    • Battery Voltage

    Dashboard 7-Day Graph
    Interactive 7-Day Telemetry Chart

5. Bill of Materials

Remote Weather Station

  • Microcontroller: ESP32 (Throttled to 80MHz)
  • Environmental Sensor: BME280 (Temperature, Humidity, Absolute Pressure)
  • Real-Time Clock: DS3231 (Hardware power LED physically removed for power savings)
  • Storage: MicroSD Card Module (SPI)
  • Power: Solar Panel, TP4056 (or equivalent) Charge Controller, 3.7v Li-Po/18650 Battery

Indoor Relay Node

  • Microcontroller: ESP8266

Local Server

  • Hardware: Any local machine (e.g., Raspberry Pi) capable of running Python 3.

6. System Architecture

The system is broken into three distinct operational layers:

  1. Layer 1: Edge Telemetry (Weather Station) Wakes up on an interval timer, samples the BME280 and battery voltage, writes to the local SD card, and fires a rapid ESP-NOW string to the Relay before returning to deep sleep. For a detailed breakdown, see the Weather Station README.
  2. Layer 2: Network Bridge (Relay Node) Stays awake permanently on mains power. Listens for the ESP-NOW MAC address. Upon receiving a packet, it formats it into a JSON payload and executes an HTTP POST request over the home WiFi network. For a detailed breakdown, see the Relay Node README.
  3. Layer 3: Data Ingestion & Visualization (Dashboard) A Python Flask server operating on a local machine. It intercepts the HTTP POST at the /ingest endpoint, commits the data to an SQLite database, handles infinite 7-day auto-archiving to CSV, and serves the UI. For a detailed breakdown, see the Dashboard README.

7. Firmware & Code

The codebase is heavily modularized across three main directories. Please refer to their individual README.md files for deep dives into their logic.

  • /code/WeatherStationCode: C++ (PlatformIO) for the remote ESP32. Handles aggressive power management, hardware watchdog failsafes, I2C/SPI bus management, and RTC memory buffering.
  • /code/RelayCode: C++ (PlatformIO) for the indoor ESP8266. Features a non-blocking millis() architecture, in-memory offline packet buffering, auto-WiFi reconnections, and OTA flashing support.
  • /code/DashboardCode: Python/Flask backend and HTML/JS frontend. Handles the API endpoints, Open-Meteo polling, database querying, and the retro Chart.js interactive graph rendering.

8. Custom Hardware Integration

Custom PCB (/pcb)

Rather than relying on messy jumper wires and breadboards, the Weather Station relies on a completely custom-designed Printed Circuit Board. This custom PCB integrates the ESP32, charge controllers, and sensor headers into a single, reliable footprint. This minimizes point-of-failure wire disconnects, reduces electrical noise on the I2C/SPI busses, and provides a perfectly dimensioned mounting solution for the 3D-printed case. Designed using KiCAD 10.

3D-Printed Parts (/cad)

All physical enclosures for the project were custom modeled in CAD to fit the bespoke electronics and withstand the elements.

  • Stevenson Screen (Weather Station): A classic multi-louvered meteorological enclosure. It is specifically designed to shield the BME280 sensor from direct UV radiation and precipitation while allowing ambient wind/air to freely pass through. This prevents artificial greenhouse heating inside the case, ensuring the temperature readings are a true reflection of the outside air. Provided a .step file for easy modification of the full assembly in any CAD software.
  • Low-Profile Relay Case: This enclosure can be found at Makerworld. Credit to Lyron for the original design. A hole was cut on the top for the heatsink.

9. License

This project is licensed under the GNU General Public License v3.0 (GPL-3.0).

Parts

16
QtyValueFootprintReferences
10.1uFCapacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mmC1
1100KResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_VerticalR3
110kResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_VerticalR1
110uCapacitor_THT:C_Disc_D3.0mm_W1.6mm_P2.50mmC2
11N5819Diode_THT:D_A-405_P7.62mm_HorizontalD1
168KResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_VerticalR2
1BME280Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ1
1FQP27P06Package_TO_SOT_THT:TO-220-3_VerticalJ4
1HT7333Package_TO_SOT_THT:TO-92J5
1LIPOTerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ7
1SDConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ2
1SOLARTerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ6
1SwitchConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ9
1TINYRTCConnector_PinSocket_2.54mm:PinSocket_1x05_P2.54mm_VerticalJ3
1TP4056Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ8
1WeMos_S2_miniwemoss2:wemoss2U1

Similar boards

  • 2 layers80 × 35.6 mmIrouette, the printed circuit board in 3D

    Irouette

    rletendu/irouetteV2

    IrouetteV2

    32 partsGPL-2.0
  • 2 layers68.6 × 46 mmGoodTorch, the printed circuit board in 3D

    GoodTorch

    ShrinathN/GoodTorch

    An STM32G0 based torch for a 20W LED

    106 parts
  • 2 layers80 × 58 mmRadio 2, the printed circuit board in 3D

    Radio 2

    Shya-Bubu/pocket-fm-radio

    This repository contains the complete design and documentation for an FM Pocket Radio project, developed as part of the EE2050 Design Principles and Manufacturing Technologies module at the University of Peradeniya…

    58 parts
  • 2 layers68.5 × 57.5 mmLoad Sharing PCB, the printed circuit board in 3D

    Load Sharing PCB

    HiranGeeth/RescueMesh-Disaster-Rescue_Long-Range-Communication-System

    RescueMesh uses a Long Range Communication System to send SOS signals to a central database where the rescue data is sent even without any mobile connectivity.

    8 partsMIT
  • 2 layers46 × 90 mmGardenGuard, the printed circuit board in 3D

    GardenGuard

    juraj8/IOT-GardenGuard-board

    PCB designs for GardenGuard IOT solution.

    76 partsGPL-3.0
  • 2 layers100.3 × 69.9 mmCanSat 2019 Bodenstation, the printed circuit board in 3D

    CanSat 2019 Bodenstation

    ApoapsisHGV/CanSat2019-electronics

    Circuit and PCB design files related to our 2019 CanSat competition

    70 parts1MIT
  • 2 layers110 × 90 mmMeteo station, the printed circuit board in 3D

    Meteo station

    alicjamusial/meteo-station-pcb

    Meteo station project - PCB based on ESP32.

    36 parts8
  • 2 layers54.9 × 95 mmBoard v5, the printed circuit board in 3D

    Board v5

    brev-dev/another_esp8266_sensor_board

    PCB layout and instructions for a multi-purpose esp8266 sensor device, with optional LORA connectivity.

    86 parts5GPL-3.0

Questions

How big is the Weather station ext PCB?

It measures 128 × 41.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Weather station ext use?

16 parts, built around the BME280, FQP27P06, HT7333 and TP4056. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Weather station ext KiCad files?

From the rbat05/SolarWeatherStation repository on GitHub, at the commit this page was made from: the board is pcb/weather_station_ext/weather_station_ext.kicad_pcb and its schematic pcb/weather_station_ext/weather_station_ext.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Weather station ext design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).