# 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:

1. **Transmit peak:** Current during an active LoRa TX burst (typically 80 - 120 mA at 3.3 V for SX1276-based modules at +17 dBm).
2. **Receive / idle:** Firmware running, radio in RX mode, no TX. This is the *whole-node* draw (MCU + radio + regulator + peripherals), typically 30 - 80 mA on ESP32-class boards — the SX1276 radio alone is only ~11 - 14 mA in RX, the rest is the MCU and supporting circuitry. Confirm against a board-level power measurement for your platform.
3. **Deep sleep (if used):** Microcontroller and radio in lowest power state, highly design-dependent (0.01 - 10 mA). An nRF52840 board with clean power management can reach low microamps, whereas an ESP32 board with a leaky regulator may sit in the milliamp range — measure your specific board (e.g. nRF52840 vs ESP32 T-Beam) rather than assuming.

Calculate a **weighted average current** based on the fraction of time spent in each state. The example below is *illustrative*, using an assumed duty cycle rather than measured T-Beam data — substitute your own measured currents and duty cycle. For a Meshtastic router node set to 5-minute heartbeat with 20-second sleep cycles:

```

Illustrative example (assumed duty cycle): 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. Use the voltage the node actually runs at when you measured the current — for a single-cell board that is ~3.7 V, even if the battery pack you eventually buy is a 12.8 V LiFePO4 pack. Energy (Wh) is conserved across the voltage conversion: you compute daily Wh at the node's running voltage, then later convert the required Wh to pack Ah using the *pack's* nominal voltage (Step 6). Do not mix the 3.7 V cell figure with a 12.8 V pack in the same multiplication.

```

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:

<table id="bkmrk-deployment-type-reco"> <thead> <tr> <th>Deployment Type</th> <th>Recommended Autonomy</th> <th>Rationale</th> </tr> </thead> <tbody> <tr><td>Sunny desert / Southwest US</td><td>3 - 5 days</td><td>Extended low-sun periods are rare</td></tr> <tr><td>Pacific Northwest / Northeast US</td><td>5 - 7 days</td><td>Multi-day overcast events common Nov - Mar</td></tr> <tr><td>High alpine / polar</td><td>7 - 14 days</td><td>Snow burial possible; winter darkness</td></tr> <tr><td>Non-solar (mains backup only)</td><td>0.5 - 1 day</td><td>Bridge a brief power outage</td></tr> </tbody></table>

## 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. The temperature factors below are **conservative planning estimates** for a −10 °C average low, not values pulled from a specific datasheet curve — check your battery's own capacity-vs-temperature curve where one is published:

<table id="bkmrk-factor-lifepo4-lipo-"> <thead> <tr> <th>Factor</th> <th>LiFePO4</th> <th>LiPo</th> <th>Lead Acid</th> </tr> </thead> <tbody> <tr><td>Max recommended DoD</td><td>80% (use 0.80)</td><td>80% (use 0.80)</td><td>50% (use 0.50)</td></tr> <tr><td>Temperature derating (cold climate, −10 °C avg low — conservative estimate)</td><td>0.85</td><td>0.70</td><td>0.65</td></tr> <tr><td>End-of-life capacity (design to still work at EOL)</td><td>0.80</td><td>0.80</td><td>0.80</td></tr> <tr><td>Combined derating factor</td><td>0.80 × 0.85 × 0.80 = 0.544</td><td>0.80 × 0.70 × 0.80 = 0.448</td><td>0.50 × 0.65 × 0.80 = 0.260</td></tr> </tbody></table>

**Cold-charge warning:** Never charge any lithium chemistry — including LiFePO4 — below 0 °C (32 °F); sub-freezing charging causes lithium plating and permanent damage. In cold climates require a BMS with low-temperature charge cutoff or a charge controller with a battery temperature sensor. (LiFePO4 may still *discharge* down to about −20 °C.)

```

Required_Wh = Raw_Wh / Combined_derating_factor

Example (LiFePO4, cold climate): 28.75 / 0.544 = 52.8 Wh → round up to 53 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 = 52.8 × 1.20 = 63.4 Wh
 Final_Ah = 63.4 / 12.8 = 4.95 Ah → use a 6 Ah pack
```

## Worked Examples

### Example A - ESP32 LoRa Repeater (T-Beam, indoor/outdoor enclosure)

<table id="bkmrk-platformttgo-t-beam-"> <tbody> <tr><td>Platform</td><td>TTGO T-Beam v1.1 (ESP32 + SX1276 + AXP192 PMIC)</td></tr> <tr><td>Measured average current</td><td>65 mA at 3.7 V = 0.240 Wh/h</td></tr> <tr><td>Daily consumption</td><td>5.76 Wh/day</td></tr> <tr><td>Target autonomy</td><td>5 days (Pacific NW)</td></tr> <tr><td>Raw requirement</td><td>28.8 Wh</td></tr> <tr><td>After derating (LiFePO4, cold)</td><td>28.8 / 0.544 = 52.9 Wh</td></tr> <tr><td>With safety margin</td><td>63.5 Wh → use 6 Ah at 12.8 V (76.8 Wh nominal)</td></tr> <tr><td>Recommended battery</td><td>Bioenno BLF-1206A (6 Ah, 12.8 V LiFePO4) or equivalent</td></tr> </tbody></table>

### Example B - nRF52840 Ultra-Low-Power Node (RAK4631 + solar harvest)

*Note on chemistry:* the LiPo sizing below is shown only to illustrate the LiPo derating column. For an unattended outdoor or permanent solar deployment, LiPo is **not recommended** — use a LiFePO4 (or a protected Li-ion) cell instead, per the battery-chemistry, LiFePO4-vs-LiPo, and cold-weather pages. The 8 mA average is an assumed measurement; the duty cycle behind it (mostly deep sleep with brief RX) must be confirmed on your own board.

<table id="bkmrk-platformrak-wisblock"> <tbody> <tr><td>Platform</td><td>RAK WisBlock Core RAK4631 + RAK12500 GPS (GPS duty-cycled off)</td></tr> <tr><td>Measured average current</td><td>8 mA at 3.7 V = 0.0296 Wh/h (assumed, with aggressive sleep — confirm duty cycle on your board)</td></tr> <tr><td>Daily consumption</td><td>0.71 Wh/day</td></tr> <tr><td>Target autonomy</td><td>7 days</td></tr> <tr><td>Raw requirement</td><td>4.97 Wh</td></tr> <tr><td>After derating (LiPo, moderate climate — illustration only)</td><td>4.97 / (0.80 × 0.80 × 0.80) = 9.71 Wh</td></tr> <tr><td>With safety margin</td><td>11.65 Wh → at 3.7 V = 3.15 Ah → use a 3.5 Ah cell</td></tr> <tr><td>Recommended battery</td><td>EEMB LP905060 3.7 V 3500 mAh (meets the 3.15 Ah requirement). Note: Adafruit #328 is a 2500 mAh cell — below the 3.15 Ah needed here, so prefer the 3500 mAh option for outdoor use.</td></tr> </tbody></table>

### Example C - Raspberry Pi Zero 2W + SX1302 HAT Gateway

*Gateway note:* a gateway is the highest-value node in an incident (it bridges to internet/MQTT), so the 3-day / no-cold-derate figures below are a desert best-case, not a default. For a gateway, use at least 5-day autonomy even in sunny climates, and do not apply a 1.00 temperature factor unless you have confirmed the battery never sees sub-freezing nights. The 620 mA average is a representative estimate (Pi Zero 2W idles ~150 - 250 mA, the SX1302 HAT adds load) — measure your own build.

<table id="bkmrk-platformrpi-zero-2w-"> <tbody> <tr><td>Platform</td><td>RPi Zero 2W + RAK2287 SX1302 HAT + LTE modem</td></tr> <tr><td>Measured average current</td><td>620 mA at 5 V = 3.1 W = 3.1 Wh/h (representative estimate — measure your build)</td></tr> <tr><td>Daily consumption</td><td>74.4 Wh/day</td></tr> <tr><td>Target autonomy</td><td>5 days (use ≥5 days for a gateway, even in sunny climates)</td></tr> <tr><td>Raw requirement</td><td>372 Wh</td></tr> <tr><td>After derating (LiFePO4: 0.80 DoD × 0.85 temp × 0.80 EOL = 0.544)</td><td>372 / 0.544 = 684 Wh</td></tr> <tr><td>With safety margin</td><td>821 Wh → at 12.8 V = 64 Ah → use a 100 Ah pack</td></tr> <tr><td>Recommended battery</td><td>Battle Born BB10012 (100 Ah, 12 V LiFePO4) or 2× EVE LF50K-class packs in parallel</td></tr> </tbody></table>

## Rule of Thumb Quick Reference

These figures are computed from the Step 1-6 methodology (5-day autonomy, LiFePO4, with DoD/cold/EOL derate and a 20% margin). They are planning floors — run your own numbers from your measured daily Wh.

<table id="bkmrk-node-type-typical-da"> <thead> <tr> <th>Node Type</th> <th>Typical Daily Wh</th> <th>Minimum Battery (5-day, LiFePO4)</th> </tr> </thead> <tbody> <tr><td>nRF52840 sleepy node</td><td>0.3 - 1.5 Wh</td><td>~1 - 5 Ah @ 3.7 V</td></tr> <tr><td>ESP32 Meshtastic router (no GPS)</td><td>3 - 5 Wh</td><td>~7 - 12 Ah @ 3.7 V (or ~2 - 4 Ah @ 12.8 V)</td></tr> <tr><td>ESP32 + GPS always-on</td><td>5 - 10 Wh</td><td>~12 - 25 Ah @ 3.7 V (or ~4 - 7 Ah @ 12.8 V)</td></tr> <tr><td>Pi Zero 2W gateway</td><td>60 - 90 Wh</td><td>~50 - 75 Ah @ 12 V</td></tr> <tr><td>Pi 4 + LTE gateway</td><td>100 - 150 Wh</td><td>~80 - 120 Ah @ 12 V</td></tr> </tbody></table>