Six Months Off-Grid: My ESP32 Sensor Fleet Survives on a Junkyard Battery and a $60 Panel
Every smart home project starts with a wall wart. Then another. Then a power strip under the stairs that looks like a bomb disposal scene. So I did something arguably unwise: I cut the cord entirely.
For the last six months, a dozen ESP32 boards, a handful of sensors, and every smart bulb in my hallway have run on exactly zero grid electricity. The whole setup lives on a used deep-cycle battery I bought off Facebook Marketplace for $40 and a 100-watt solar panel that cost less than a nice dinner.
Here's how it went — including the part where I learned that voltage sag doesn't care about your feelings.
The Math Before the Magic
Before plugging in a single wire, I actually measured my loads instead of guessing. That part matters, because ESP32s lie. Their datasheet says 160mA-ish under Wi-Fi transmission, but idle behavior is all over the map depending on how you flash them.
My fleet at the time:
- Four ESP32 sensor nodes (temperature, humidity, door contacts) running deep sleep, waking every 60 seconds — roughly 0.8mAh average each
- Two always-on ESP32s running ESPHome for a garage monitor and a mailbox sensor — about 60mAh average each
- A 12V LED strip on the hallway stairs, dimmed to 30% most evenings — around 200mAh when lit
Total came to roughly 2,500mAh per day at 5V, or about 30 watt-hours. Sounds trivial, right? It isn't, once you convert through a buck converter at 85% efficiency and account for a battery that doesn't like being drained past 50%.
The used 12V deep-cycle battery claimed 80Ah. Half of that is usable, which gives me 480 watt-hours of real storage. Three days of cloudy weather, no solar input. Tight but workable.
What Died First (Spoiler: My Assumptions)
The first failure wasn't the battery. It was my cheap 5V buck converters. The ones from the mystery-multipack drawer would drop out entirely when battery voltage sagged below 11.5V, rebooting two ESP32s into a boot loop at 3am. My Home Assistant logs from that first week look like a heart monitor during a horror movie.
Fix: I swapped in proper low-dropout modules rated down to 9V input and added a 470µF cap across each board's input. Zero brownouts since.
Second casualty: my measurement methodology. I'd been sizing solar for the annual average of my area — about 4 peak sun hours. What I didn't account for was December, when a string of gray Midwest days dropped my panel to single-digit watt-hours per day. The battery hit its low-voltage cutoff twice. Everything survived, but the hallway lights went dark like a haunted house until the sun came back.
The Voltage Sag Gotcha Nobody Warns Me About
Deep-cycle lead-acid batteries are honest, heavy, and kind of a downer. By 12.0 volts resting, you're at roughly 50% capacity. By 11.8, you're flirting with damage. My charge controller handled cutoffs fine, but the sag under load was sneaky: the LED strip would pull the battery down to 11.6V momentarily while resting voltage was a comfy 12.4V.
If you're doing this, measure voltage at the battery terminals with the load running, not after. Or better yet, buy a LiFePO4 battery like I eventually did on Black Friday. The 100Ah LiFePO4 I picked up for $180 weighs half as much, delivers nearly full capacity regardless of draw, and doesn't sulk when you use most of it.
The ESP32 Side: Squeeze Every Microamp
The off-grid constraint actually improved my firmware. Forced to care, I:
- Moved all four sensor nodes to deep sleep with a 60-second duty cycle
- Dropped Wi-Fi TX power to 8dBm (the router is 20 feet away)
- Disabled the onboard LED blink that ESPHome enables by default
- Switched one node from Wi-Fi to ESP-NOW, broadcasting to a gateway board
The always-on nodes went from 90mA to 55mA just by disabling Bluetooth and setting the CPU to 80MHz. Small numbers, but multiplied by 24 hours and six months, they're the difference between the system limping through winter and shrugging it off.
Six Months Later: The Verdict
Total system cost, all-in: about $290 including the LiFePO4 upgrade. Total grid electricity saved: roughly 12 kilowatt-hours over six months, or about $1.80 at my utility's rates.
So no, this is not a financial play. You will never recoup that money. But that was never the point. What I got instead:
- A hallway that still works when the power's out (the battery runs independent of house mains)
- A live dashboard showing real solar input, battery state, and daily consumption — genuinely fun to watch
- Firmware I'm not embarrassed by
- The smug satisfaction of telling people my smart home runs on a car battery
Is it practical? Marginally. Is it a very fun distraction? Absolutely. If you've got a weekend, $300, and an unhealthy curiosity about where your watts actually go, I can't recommend it enough. Just buy the LiFePO4 battery first and skip the lead-acid phase of grief I went through.
Next up: adding a small wind turbine from a modified PC fan, because apparently I hate free time.