Building a battery-powered weather station for under €10
On this page 4 sections
An AHT10 display with touch wake and battery power#
The expanded Lab article covers the sleep sequence, battery estimate, and power limitations. This is the original AHT10 build; I later used a DHT11 when I ran out of AHT10 modules.

Built a small battery-powered indoor weather station — ESP32-C3 Super Mini, AHT10 temperature/humidity sensor, 0.96" SSD1306 OLED, single 18650 cell, TP4056 charger with USB-C. Total BOM under €10.
Tinkering project, but it ended up being a nice end-to-end exercise in low-power microcontroller design. Here's the build.
The parts#
→ AHT10 and SSD1306 share the same I2C bus (0x38 and 0x3C).
→ 18650 feeds through TP4056 with overdischarge protection, then straight into the ESP32's onboard LDO via the 5V pin.
→ A 2N2222 transistor on the low side switches OLED power — the firmware switches the display off before deep sleep. I have not measured a zero-current state; the rest of the board and any leakage still affect the battery.
→ TTP223 capacitive touch sensor wakes the system on tap; a second tap puts it back to sleep.
→ A simple voltage divider on an ADC pin for battery monitoring — that's what shows up as the percentage and voltage on the display.
→ Wakes from deep sleep every 5 minutes for a periodic reading, or on touch for an on-demand check.
The fun part#
The TP4056 protection circuit kept tripping every time I connected the ESP32. Inrush current at boot was enough to look like a short to the protection IC, which would cut power and force a reset cycle. Annoying — the schematic said it should work, but the dynamics said otherwise.
Fixed it with a 1000µF electrolytic across the power rails. That stopped the startup resets on this assembly. The exact supply behaviour depends on the cell, protection board, wiring, and load. One of those classic "the schematic was right; the dynamics weren't" debugging sessions you can't really see coming until it bites.
What's on screen#
Temperature, humidity, and battery state — percentage with fill bars, plus raw cell voltage. Custom bitmap icons for the temperature and droplet glyphs, FreeMonoBold for the readings. Refreshes every 2 seconds while awake; off entirely while asleep.
BOM#
Total cost: under €10.
The ESP32-C3 Super Mini, the AHT10, the OLED, the TP4056 board, the 18650 holder, the TTP223 module, a 2N2222, a 1000µF cap, and a handful of resistors. Most of the build time was the inrush-cap debugging and laying out the perfboard.
→ More on the build on the lab page.