"Solar mesh power budgeting: sizing panels and LiFePO4 for an off-grid T-Beam"
Solar mesh power budgeting: sizing panels and LiFePO4 for an off-grid T-Beam
An ESP32 LoRa node looks like it should sip power, and it does — until you ask it to listen continuously, run GPS, or sit through a week of southern-Australian winter cloud. Solar sizing for a Meshtastic node fails in one direction only: people pick a panel that handles a sunny weekend and a battery that handles one dark day, then the node dies in the second week of June. Here's how to budget it properly, using measured numbers rather than hopeful ones.
Start with what the node actually draws
A LILYGO T-Beam (ESP32 + SX1262 + u-blox GPS) has wildly different current depending on role. The useful range to remember:
- Active, screen on, BLE connected, transmitting regularly: roughly 100-130 mA continuous on the 3.7 V rail, consistent with published measurements of ESP32 Meshtastic nodes — tutoduino measured a Heltec V3 at about 130 mA under a similar load, and the ESP32 family behaves alike.
- Client role, power saving on, GPS enabled: the Meshtastic power calculator models the T-Beam at about 8.6 mA average, sleeping ~93% of the time. That's around 0.76 Wh per day at the device rail.
- Router or repeater role (always listening): about 44 mA average, or ~3.9 Wh/day — a 5× jump, because the radio never sleeps.
The big lever you control is the role. If the node is an endpoint rather than relay infrastructure, leave it as a client. Meshtastic's own power configuration documentation describes the Power Saving mode that disables Bluetooth, serial, Wi-Fi and the screen — for a node hanging on a fence post with nobody staring at it, that's free runtime.
GPS is the second lever. A continuously fix-seeking GPS module can cut runtime by half or more; NepaMesh's runtime measurements put GPS at a 50-70% runtime penalty depending on device. For a fixed node, set the position manually and disable GPS hardware entirely. If the node exists to appear on a map — which is most of the point of a GPS-equipped field kit — stretch the position broadcast interval to 30-60 minutes instead of the 15-minute default.
One honest concession: the T-Beam is not the most efficient platform available. nRF52-based nodes draw a fraction of the idle current and will outlast it on any given battery. But the T-Beam integrates GPS and is what's in the StealthMesh Field Kit; if you'd rather have the efficient option, our T-Beam node and Heltec V3 node both run the 2.7.x line with the same current-reduction settings described below,, and its ESP32-class draw is entirely manageable once you're solar-powered — the constraint shifts from battery life to whether the panel keeps up.
Turning draw into a daily energy budget
The Field Kit's battery is a 12 V, 6 Ah LiFePO4 pack — 76.8 Wh nominal. To work out how long that lasts, run the node's daily Wh through the conversion chain:
- Client node, 0.76 Wh/day at the device rail, plus step-down conversion losses (call it 80-85% efficient) → ~1 Wh/day at the 12 V bus. The pack would run this node for two months with zero sun. Client nodes are not the sizing problem.
- Router node, 3.9 Wh/day at the rail → ~5 Wh/day at the bus. The pack gives 76.8 / 5 ≈ 15 days of autonomy with no panel input at all.
Fifteen days of autonomy sounds luxurious, and it is — that's the payoff of using a 12 V SLA-sized pack rather than a small 18650. But it's also exactly why undersized panels go unnoticed for weeks. The node ships healthy, runs a month, and then quietly browns out during a cold snap. Your battery reserves are a buffer, not a supply.
Sizing the panel for the worst month
Panel output scales with peak sun hours (PSH), and in Australia the worst case is June for everything south of about Brisbane. The Solar Choice summary of PVWatts radiation data for Australian capitals lists the lowest-month daily solar radiation: 2.9 kWh/m² in Melbourne, 2.3 in Hobart, 3.1 in Adelaide, 3.4 in Canberra — against summer figures around 6-7. Brisbane and Perth hold up better at 4.1. The Bureau of Meteorology publishes monthly average daily solar exposure maps if you want gridded data for a specific property, roughly 1 kWh/m² ≈ 1 PSH for sizing purposes.
Back-of-envelope, router node in Melbourne June: you need ~5 Wh/day delivered. A panel of P watts produces roughly P × PSH × 0.7 after real-world derating (temperature, dirt, non-ideal tilt, controller efficiency, and June haze). So:
P ≥ 5 / (2.9 × 0.7) ≈ 2.5 W
Two and a half watts keeps the lights on in the average June day. But an average day is not the failure case — the failure case is seven overcast days in a row, when output collapses to 20-30% of clear-sky. Over a dull week you might harvest a quarter of the nominal figure, and the system only survives if the battery bridges the gap and the panel replenishes it promptly afterwards. To rebuild 35 Wh of battery deficit in a few clear days following the cloud, and to keep a client node's GPS warm, most practical builds land at:
- 10 W panel — comfortable for a client node anywhere in Australia; marginal for a router in Hobart in June.
- 20-30 W panel — the right call for a router or repeater in Victoria/Tasmania, or anywhere you don't want to think about it again.
Tilt matters more than people expect at 20-50 W scale: standing the panel at ~60° from horizontal in winter both collects more June sun and sheds water and leaf litter. A panel lying flat on a shed roof collects maybe 60% of its tilted potential in the shortest weeks.
PWM or MPPT?
At these sizes the honest answer is that PWM is fine, and the Field Kit's EPEVER LS1024B is exactly the right class of controller. An MPPT controller harvests 10-25% more in cold, cloudy conditions — genuinely valuable at 12 V panel-to-battery systems of hundreds of watts, where that percentage is real kilowatt-hours. At 20 W charging a 76 Wh pack, MPPT buys you an extra watt-hour or two per winter day, which is real but small; a 10 W panel bump costs about the same as the MPPT upgrade and does more. PWM's one real requirement: match the panel voltage to the battery (a "12 V nominal" panel, ~18 V open-circuit — not a 24 V or grid-tie module).
What the controller must have, in either flavour, is a proper LiFePO4 charge profile or adjustable absorption/float setpoints: around 14.4-14.6 V absorption, 13.6-13.8 V float for a 4S pack.
Why LiFePO4 over Li-ion
The kit ships LiFePO4 rather than an 18650-based Li-ion pack for three reasons that matter specifically off-grid:
- Cycle life. 2,000-5,000 cycles at moderate depth of discharge versus a few hundred for consumer Li-ion. A solar node cycles daily for years; chemistry is the difference between a 3-year and a 10-year pack.
- Flat discharge voltage. The node sees ~13.0-13.2 V for most of the discharge, so your voltage-based telemetry stays meaningful for longer, then falls off a cliff near empty. That cliff is actually a feature — it's an unambiguous low-battery signal.
- Safety without drama. No thermal-runaway fuel load on a shed wall.
The known limitation is cold-weather charging: LiFePO4 cells should not be charged below about 0 °C (lithium plating damages them permanently). Discharge in the cold is fine. In most of populated Australia overnight winter lows sit above freezing, but if you're deploying in the NSW tablelands, the Victorian high country or Tasmanian frost hollows, mount the pack indoors or in an insulated enclosure and route panel wire in — a solar controller will happily attempt charge current into a frozen pack otherwise. The BMS in the kit's pack provides basic protection; treat -0 °C charging as your responsibility.
Telemetry: watching the budget from the mesh
The last piece closes the loop. Meshtastic exposes device battery voltage over the mesh, and with the 12 V pack behind a step-down you're better served by the power config's ADC Multiplier Override plus a simple resistor divider from the LiFePO4 terminals to the T-Beam's battery-sense pin, calibrated per the documented procedure. Node telemetry then reports pack voltage, and you can set a neighboring node — or the community dashboard — to watch it.
What to watch: pack voltage sagging below ~12.6 V (roughly 40% state of charge on a resting LiFePO4) by mid-winter means the panel isn't keeping up, and you'll get days of warning before the flat-discharge cliff. A node that bounces between 12.9 V all day and 12.4 V each pre-dawn is healthy. A node whose resting voltage declines week over week is the one you drive out to fix — and because the mesh is two-way, you see that from home.
The short version
Budget a client-role T-Beam with GPS at ~1 Wh/day on the 12 V bus, a router at ~5 Wh/day, give the pack 5-15 days of autonomy, and size the panel for June in your region — 10 W is enough for a client node nearly anywhere, 20-30 W covers a router in the south. PWM with a LiFePO4 profile, tilt the panel steeply, keep the pack above freezing when charging, and let the node report its own battery voltage so you find out about a shortfall before it becomes an outage. Every one of those numbers is conservative, which is the point: a solar mesh node should be the least interesting thing on your property.