Battery Sizing for LoRa Mesh Nodes
Battery Sizing for LoRa Mesh Nodes
Correctly sizing the battery for a solar-powered LoRa node prevents two failure modes: undersizing (the battery dies overnight or during cloudy periods) and oversizing (wasted cost and weight). This page walks through a systematic methodology and provides worked examples for three common node types.
Step 1 — Measure Actual Current Draw
Never rely solely on datasheet figures. Real-world current draw depends on firmware configuration, peripherals, GPS lock cycles, LoRa transmit duty cycle, and whether deep sleep is used. Measure with a USB power meter (e.g., UM25C, AT34) or an inline current shunt (e.g., INA219 module on the 3.3 V rail).
Take measurements in three states:
- Transmit peak: Current during an active LoRa TX burst (typically 80–120 mA at 3.3 V for SX1276-based modules at +17 dBm).
- Receive / idle: Firmware running, radio in RX mode, no TX (typically 30–80 mA depending on platform).
- Deep sleep (if used): Microcontroller and radio in lowest power state (0.01–10 mA depending on design).
Calculate a weighted average current based on the fraction of time spent in each state. For a Meshtastic router node set to 5-minute heartbeat with 20-second sleep cycles:
Example: T-Beam v1.1 (ESP32 + SX1276 + NEO-6M GPS) TX (0.5% of time at 120 mA) = 0.6 mA average RX active (79.5% at 80 mA) = 63.6 mA average Deep sleep (20% at 3 mA) = 0.6 mA average ───────────────────────────────────────────────── Weighted average ≈ 64.8 mA
Step 2 — Calculate Daily Watt-Hours
Multiply the average current (in amps) by the system voltage and by 24 hours:
Daily_Wh = I_avg(A) × V_system(V) × 24 h Example: 64.8 mA × 3.7 V × 24 h = 5.75 Wh/day
If your system runs at 5 V (e.g., USB-powered node) or 12 V (e.g., Raspberry Pi gateway), substitute the appropriate system voltage.
Step 3 — Determine Required Autonomy Days
Autonomy is the number of consecutive days with no solar input (full cloud cover, snow burial, north-facing shade) the battery must sustain the node. Select based on your climate and criticality:
| Deployment Type | Recommended Autonomy | Rationale |
|---|---|---|
| Sunny desert / Southwest US | 3–5 days | Extended low-sun periods are rare |
| Pacific Northwest / Northeast US | 5–7 days | Multi-day overcast events common Nov–Mar |
| High alpine / polar | 7–14 days | Snow burial possible; winter darkness |
| Non-solar (mains backup only) | 0.5–1 day | Bridge a brief power outage |
Step 4 — Calculate Raw Battery Capacity
Raw_Wh = Daily_Wh × Autonomy_days Example (5 days autonomy): 5.75 Wh × 5 = 28.75 Wh
Step 5 — Apply Derating Factors
Real batteries deliver less than their nameplate capacity due to temperature, aging, and depth-of-discharge limits. Apply the following derating multipliers:
| Factor | LiFePO4 | LiPo | Lead Acid |
|---|---|---|---|
| Max recommended DoD | 80–90% (use 0.85) | 80% (use 0.80) | 50% (use 0.50) |
| Temperature derating (cold climate, −10 °C avg low) | 0.85 | 0.70 | 0.65 |
| End-of-life capacity (design to still work at EOL) | 0.80 | 0.80 | 0.80 |
| Combined derating factor | 0.85 × 0.85 × 0.80 = 0.578 | 0.80 × 0.70 × 0.80 = 0.448 | 0.50 × 0.65 × 0.80 = 0.260 |
Required_Wh = Raw_Wh / Combined_derating_factor Example (LiFePO4, cold climate): 28.75 / 0.578 = 49.7 Wh → round up to 50 Wh
Step 6 — Add a 20% Safety Margin and Convert to Ah
Final_Wh = Required_Wh × 1.20 (20% safety margin) Final_Ah = Final_Wh / V_nominal_pack Example (LiFePO4, 12.8 V nominal pack): Final_Wh = 49.7 × 1.20 = 59.6 Wh Final_Ah = 59.6 / 12.8 = 4.65 Ah → use a 6 Ah pack
Worked Examples
Example A — ESP32 LoRa Repeater (T-Beam, indoor/outdoor enclosure)
| Platform | TTGO T-Beam v1.1 (ESP32 + SX1276 + AXP192 PMIC) |
| Measured average current | 65 mA at 3.7 V = 0.240 Wh/h |
| Daily consumption | 5.76 Wh/day |
| Target autonomy | 5 days (Pacific NW) |
| Raw requirement | 28.8 Wh |
| After derating (LiFePO4, cold) | 28.8 / 0.578 = 49.8 Wh |
| With safety margin | 59.8 Wh → use 6 Ah at 12.8 V (76.8 Wh nominal) |
| Recommended battery | Bioenno BLF-1206A (6 Ah, 12.8 V LiFePO4) or equivalent |
Example B — nRF52840 Ultra-Low-Power Node (RAK4631 + solar harvest)
| Platform | RAK WisBlock Core RAK4631 + RAK12500 GPS (GPS duty-cycled off) |
| Measured average current | 8 mA at 3.7 V = 0.0296 Wh/h (with aggressive sleep) |
| Daily consumption | 0.71 Wh/day |
| Target autonomy | 7 days |
| Raw requirement | 4.97 Wh |
| After derating (LiPo, moderate climate) | 4.97 / (0.80 × 0.80 × 0.80) = 9.71 Wh |
| With safety margin | 11.65 Wh → at 3.7 V = 3.15 Ah → use 3.5 Ah LiPo |
| Recommended battery | EEMB LP905060 3.7 V 3500 mAh or Adafruit 3.7 V 4400 mAh (#328) |
Example C — Raspberry Pi Zero 2W + SX1302 HAT Gateway
| Platform | RPi Zero 2W + RAK2287 SX1302 HAT + LTE modem |
| Measured average current | 620 mA at 5 V = 3.1 W = 3.1 Wh/h |
| Daily consumption | 74.4 Wh/day |
| Target autonomy | 3 days (sunny climate) |
| Raw requirement | 223.2 Wh |
| After derating (LiFePO4, warm climate: 0.85×1.00×0.80 = 0.68) | 223.2 / 0.68 = 328 Wh |
| With safety margin | 394 Wh → at 12.8 V = 30.8 Ah → use 40 Ah pack |
| Recommended battery | Battle Born BB10012 (100 Ah, 12 V LiFePO4) or 4× EVE LF50K in 4S (50 Ah, 12.8 V) |
Rule of Thumb Quick Reference
| Node Type | Typical Daily Wh | Minimum Battery (5-day, LiFePO4) |
|---|---|---|
| nRF52840 sleepy node | 0.3–1.5 Wh | 2–6 Ah @ 3.7 V |
| ESP32 Meshtastic router (no GPS) | 3–5 Wh | 3–5 Ah @ 3.7 V |
| ESP32 + GPS always-on | 5–10 Wh | 4–8 Ah @ 3.7 V |
| Pi Zero 2W gateway | 60–90 Wh | 30–50 Ah @ 12 V |
| Pi 4 + LTE gateway | 100–150 Wh | 50–80 Ah @ 12 V |