Skip to content

Latest commit

 

History

633 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A low power ESP32 based thermometer with an ePaper display

Prototype Custom board

See docs/wiring.md for prototype wiring information and hardware/thermometer-c6/ for the custom board. More pictures lower down.

Power consumption

Measured with a Nordic PPK2 on pure ESP-IDF firmware; full traces, dates and methodology in docs/notes.md. Figures are config-specific — panel, sensor and board all matter.

Read the node tag on every figure. @3V3 rail is the load alone, with the board's input tree bypassed; @4V2 bat is the whole deployment path, regulator and charger leakage included. They are not interchangeable, and the battery figure is not simply the larger one.

Setup Deep-sleep floor Sensor wake Wake + refresh
Firebeetle ESP32-E + BMP390L + GDEH0154Z90 via DESPI-C02 (FDN340P gate) 19–20 µA @3V3 rail ULP bit-bang I2C every 5 s, avg ≈0 ~112 mC @3V3 rail (was ~600 mC before light sleep — the Z90's ~21 s refresh used to spin-wait)
XIAO ESP32-C6 + BMP581 + GDEH0576T81 via DESPI-C02 (FDN340P gate) 15.5–16 µA @3V3 rail LP core I2C every 60 s: ~1 mA × 3 ms ~45 mC @3V3 railsuperseded, re-measure (see below)
XIAO ESP32-C6 + BMP581 + GDEW029I6FD via Seeed ePaper Driver Board (no gate) ~25 µA @3V3 rail
21.7 µA @4V2 bat
LP core I2C every 60 s: ~1 mA × 3 ms 12.2 mC @3V3 rail
10.05 mC @4V2 bat
thermometer-c6 rev A + BMP581 + GDEM0154I61 (on-board gated booster) 18.3 µA @4V2 bat LP core I2C every 60 s ~24.3 mC @4V2 bat
thermometer-c6 rev A + BMP581 + GDEH0576T81 (on-board gated booster) 19.05 µA @4V2 bat LP core I2C every 60 s 36.77 mC @4V2 bat

The XIAO's GDEH0576T81 figure is superseded: it was taken while the panel ran its coldest waveform LUT, which cost 48% of panel busy time. The last row is the deployment configuration on the corrected waveform — daily budget and derivation in docs/notes.md.

A buck draws less current at 4.2 V than its load does at 3.3 V, which is why ~25 µA at the rail reads 21.7 µA at the battery (~90 % efficient). An LDO runs the other way, ~1.15× the charge for the same work — so the custom board beating the XIAO by 3 µA at the same 4.2 V is a real win, not a topology artefact. Its wake figures include LED blinks, left on for observability. Blank cells are unmeasured, not zero; both are on the PPK2 backlog.

The main CPU only wakes on a ≥0.1 °C delta or a safety-net tick, so a display refresh is the dominant event on a typical day. At one refresh per hour that puts long-term averages in the ~16–51 µA band depending on rig and refresh cadence — load-only runtime of roughly 1–3 years on a 400 mAh LiPo, with the deployment configuration measured at the bottom of that band (~2.3–3.8 C/day, ~380–620 days; derivation in docs/notes.md). But at this current level LiPo self-discharge (a few %/month ≈ 15–25 µA equivalent) rivals the load itself, so expected runtime is on the order of a year, and a 2600 mAh 18650 will age out before the load meaningfully drains it. Not yet confirmed against a full-length run.

Two gotchas worth surfacing (the adapter-leakage ones are under Hardware below):

  • XIAO ESP32-C6 battery operation has a hard floor at ~3.6 V: its 3.3 V rail is a pure buck (SGM6029C), which below VOUT + ~245 mV starves its bootstrap and lets the rail sag ~a VTH below VBAT — deep sleep survives, but wakes collapse into 0.5–0.9 A brownout-restart storms. Firmware shuts down at 3.7 V (~12–15 % of Li-ion capacity abandoned); full regime map in docs/notes.md. LiFePO₄ cells (3.2 V nominal) are unusable on this board. The custom board uses an LDO and shuts down at 3.5 V instead.
  • Don't use the Seeed ePaper Driver Board's JST battery connector: its ETA9740 charger/boost idles at ~330–500 µA — ~20× the whole system's sleep floor, flattening a 400 mAh cell in ~7 weeks doing nothing — and it double-converts BAT→5 V→3.3 V. Solder the battery to the XIAO's underside BAT pads instead, JST empty, switch off.

The Arduino-era ~20 mA deep-sleep USB CDC gotcha is gone: the pure-IDF USB-Serial-JTAG console doesn't hold the port active.

For context: the original 2021 prototype (wake + refresh every 60 s, no ULP) ran a 2600 mAh cell flat in 8.5 days at ~12.6 mA average — the ULP/LP-core redesign is ~700× more efficient.

Hardware

Looking to replicate this? Easy to start with options are tagged [start with this] below.

Controller boards

Temperature sensor (multiple options)

Display (multiple options)

Good Display panels are driven through one of two adapters (same Good Display reference booster on both — panel compatibility notes in docs/wiring.md):

The DESPI-C02's boost converter leaks ~534 µA in deep sleep, which an FDN340P P-channel MOSFET on the adapter's 3.3 V line eliminates; the Seeed board's ungated standby measured only ~9 µA, so it runs without a gate.

Other components

  • FDN340P P-channel MOSFET (SOT-23) — power-gates DESPI-C02 3.3 V during deep sleep
  • AO3400A N-channel MOSFET (SOT-23) — switches the XIAO C6 battery voltage divider so it doesn't draw ~10 µA continuously

Battery

Prototypes in action

2026 - ultra low power custom board

Custom rev A board (with BMP581), GDEM0154I61 & 400mAh battery

Thermometer C6 rev A board & GDEM0154I61 (2026)

Custom rev A boards (with BMP581), GDEH0576T81 & 400mAh battery

Thermometer C6 rev A boards 2 and 4 & GDEH0576T81 (2026)

2026 - ultra low power prototypes

Seed Xiao C6, BMP581, GDEH0576T81 & 400mAh battery

Seeed Xiao C6, BMP581 & GDEH0576T81 (2026)

Seeed Xiao C6, e-Paper Driver Board, BMP581, GDEW029I6FD & 400mAh battery

Seeed Xiao C6, e-Paper Driver Board, BMP581 & GDEW029I6FD (2026)

Firebeetle ESP32-E, BMP390L, GDEH0154Z90 & 400mAh battery

Firebeetle ESP32-E, BMP390L & GDEH0154Z90 (2026)

2021 - first prototype

Firebeetle ESP32-E, DS18B20, GDEW0213M21 & 2600mAh battery

Assembled first prototype (2021)

About

Experiment in building a simple battery powered ESP32 e-Ink room temperature thermometer

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Contributors

Languages