Projects

Hobby · April – June 2025

Low-cost weather station v1

A solar, battery-backed ESP32 station for under €100. Temperature, humidity, wind speed, rain, light and air quality, logged in Home Assistant through ESPHome.

Weather station on a wooden cross

The brief was simple. Build a station that can sit outside, run off two small panels and a pair of 18650s, and show up in the same Home Assistant instance as the rest of the apartment. No commercial mast, no expensive sensors.

Sensors

Two DHT22s in stacked radiation shields, for redundancy. Home Assistant shows them as Température 1 / 2 (24.2 °C and 24.0 °C on that June screenshot).

The cup anemometer and the wind vane are 3D printed. Wind speed uses a magnet in the rotor and a hall-effect sensor on the mast. Pulses go into ESPHome. Home Assistant turns the pulse count into m/s. The wind vane was fitted but never set up in software, so direction is unused.

Rain is not a tipping bucket. It is a small module whose voltage changes when water sits on it. Luminosity is a breakout on a JST. Air quality is an ENS160. After first power-up it stays in its datasheet start-up window for about an hour before HA gets a valid reading. The only dashboard capture I have is from that window, which is why TVOC, eCO2 and AQI still read unknown.

Breadboard first

ESP32 breadboard prototype with two taped 18650 cells

Before KiCad: an ESP32-DevKit on a breadboard, Dupont wires, two 18650s taped in parallel in a plastic tub. The only question was whether ESPHome on Wi-Fi could see every sensor. Once it could, the wiring was allowed to become a PCB.

ESPHome is YAML. A DHT on GPIO13, 60 s update, entity IDs Home Assistant can pick up without a custom component.

ESPHome YAML for a DHT22 on GPIO13

Power

Solar panels to TP4056 to 2P 18650 to TPS63020 at 3.3 V

Two 5 V / 3 W panels in parallel into a TP4056 charge module, then a 2P 18650 pack. The ESP32 does not run from the charger output. A TPS63020 buck-boost holds 3.3 V as the cells sag. A linear 3.3 V LDO would drop out too early.

Pack voltage is read on an ADC pin through a 100 kΩ / 27 kΩ divider, same ratio as on the KiCad silk. Target was 48 h without sun. v1 has no deep sleep. The radio stays up, which is the real limit on runtime.

The PCB is a carrier

KiCad layout, Weather Station Icam v1, June 2025

KiCad, labelled Weather Station Icam v1, June 2025. Not a fully SMD board. A motherboard for modules: ESP32-DevKitC footprint in the middle, TP4056 module, TPS63020 module, two 18650 holders, JST to every sensor (DHT1, DHT2, rain, anemometer, wind direction, luminosity, air quality). JLCPCB made the copper.

The point of v1 was to leave the breadboard, keep the breakouts, and learn the CAD and fab loop.

Assembled carrier PCB in a vice, DevKit sockets and 18650 holder

Home Assistant

Home Assistant dashboard, 26 June 2025

26 June 2025, 10:35. Dual temperature and humidity are live and close to each other. Battery at 79 %. Luminosity 8 829 lx. Wind speed 0 m/s. Air quality cards are empty because the ENS160 was still in its one-hour start-up. I do not have a later capture.

v2

v2 stayed a sketch. I never had the time to build it. The idea was a full SMD board (no daughter modules), tighter power conversion, and wind cups and vane designed properly instead of the first printed pair. Deep sleep would have gone with that board. The wooden cross and the grey box did their job for v1: they stood in a car park and reported.