The goal was a sensor node that could run on a single 18650 cell for at least six months, which meant the entire design had to be built backward from a power budget rather than forward from a parts list. Most of the current draw wasn't the sensors. It was the radio.
Deep sleep changes the whole schematic
An ESP32 in deep sleep draws roughly 10 microamps. The same chip transmitting over Wi-Fi draws closer to 150 milliamps in bursts. That four-order-of-magnitude gap means the real design question isn't how to reduce average current: it's how to make the active bursts as short and as rare as possible.
In practice: wake once every fifteen minutes, take one reading from each sensor, connect to Wi-Fi, publish over MQTT, and go back to sleep: a cycle that takes about four seconds of high-current draw out of every nine hundred. The battery math worked out to roughly eight months, with margin, once we measured actual current on the bench instead of trusting the datasheet numbers alone.
The particulate sensor was the hard part
The temperature and humidity sensor was a solved problem: an off-the-shelf I2C part, five minutes of firmware. The particulate sensor needed a small fan running continuously to pull air through its optical chamber, which meant it couldn't sleep with the rest of the board. It ended up on its own switched rail, powered only for the few seconds needed to get a stable reading, controlled by a MOSFET the microcontroller drives directly.
That one decision, a switched rail instead of leaving the sensor powered, was the difference between a two-week battery life and an eight-month one.