Battery Chemistry and Selection
Comparing LiFePO4, LiPo, and lead acid battery chemistries for LoRa deployments, plus sizing methodology and BMS protection.
- LiFePO4 vs LiPo vs Lead Acid for LoRa Deployments
- Battery Sizing for LoRa Mesh Nodes
- Battery Management Systems and Protection Circuits
LiFePO4 vs LiPo vs Lead Acid for LoRa Deployments
Choosing the right battery chemistry for a LoRa mesh node is one of the most consequential hardware decisions you will make. The chemistry determines cycle life, safe operating temperature, charging behaviour, physical size, and total cost of ownership. This page provides a deep technical comparison of the three chemistries most commonly encountered in field deployments: Lithium Iron Phosphate (LiFePO4), Lithium Polymer (LiPo), and valve-regulated lead acid (VRLA/AGM).
Chemistry Overview
| Property | LiFePO4 | LiPo (LiCoO₂/NMC) | Lead Acid (AGM/VRLA) |
|---|---|---|---|
| Nominal cell voltage | 3.2 V | 3.7 V | 2.0 V per cell (12 V = 6 cells) |
| Fully charged voltage | 3.65 V | 4.2 V | 12.7 - 12.8 V (12 V battery) |
| Fully discharged cutoff | 2.5 V (3.0 V recommended) | 3.0 V (3.2 V recommended) | 10.5 V (50% DoD recommended) |
| Usable energy density (Wh/kg) | 90 - 120 Wh/kg | 150 - 200 Wh/kg | 30 - 40 Wh/kg |
| Cycle life (to 80% capacity) | 2,000 - 4,000 cycles | 300 - 500 cycles | 200 - 500 cycles (50% DoD) |
| Self-discharge per month | 1 - 3% | 2 - 5% | 3 - 5% |
| Thermal runaway risk | Very low - does not propagate | High - flammable electrolyte | Low - explosive H₂ gas if overcharged |
| Operating temperature (discharge) | −20 °C to +60 °C | −10 °C to +45 °C | −15 °C to +50 °C (capacity drops >30% at 0 °C) |
| Charging temperature minimum | 0 °C (lithium plating below) | 0 °C | −20 °C (reduced rate) |
| Typical cost (USD, 2024) | $0.25 - $0.50 / Wh (cells); $0.60 - $1.20 / Wh (pack) | $0.15 - $0.30 / Wh (pouch) | $0.10 - $0.20 / Wh |
| Cost per cycle (at rated life) | $0.0002 - $0.0006 / Wh / cycle | $0.0006 - $0.0010 / Wh / cycle | $0.0004 - $0.0010 / Wh / cycle |
Cycle Life in Depth
LiFePO4 is the standout performer for longevity. A quality cell from EVE, CALB, or Headway will reliably deliver 2,000 cycles at 100% depth of discharge (DoD) and can exceed 4,000 cycles at 80% DoD. At a 1-cycle-per-day charge rate typical of solar nodes, this translates to 5 - 11 years of service life.
LiPo cells (using LiCoO₂ or NMC cathodes as found in hobby packs and phone batteries) are rated for 300 - 500 full cycles. With daily cycling on a solar node, these cells will reach end-of-life in under 18 months. The LP503562 3.7 V 1100 mAh pouch cell common in hobbyist builds, for example, is typically rated 300 cycles by the manufacturer. Permanent deployments in LiPo are therefore not economical.
Lead acid (AGM) ratings of 200 - 500 cycles assume 50% DoD. Going to 80% DoD halves the cycle count. Because solar systems routinely deep-discharge during extended cloudy periods, real-world lead acid life in solar applications is often only 2 - 3 years.
Temperature Performance
This is where LiFePO4 dominates cold climates. At −20 °C, LiFePO4 retains approximately 70 - 80% of rated capacity on discharge - usable, though not ideal. LiPo cells at −10 °C typically retain only 50 - 60% of rated capacity and internal resistance rises sharply, causing voltage sag under load. At −20 °C many LiPo cells effectively stop functioning. Lead acid loses approximately 30 - 40% of rated capacity at 0 °C, and at −20 °C a fully charged lead acid battery delivers only 40 - 50% of its 25 °C rating.
Critical charging constraint: Both LiFePO4 and LiPo must not be charged below 0 °C. Charging lithium cells in freezing temperatures causes metallic lithium plating on the anode, permanently reducing capacity and creating an internal short-circuit hazard. Solar systems in freezing climates must incorporate a low-temperature charge cutoff. Many commercial LiFePO4 BMS modules include this feature.
Safety
LiFePO4 uses an olivine phosphate cathode that is inherently stable. Even in nail-penetration and overcharge abuse tests, LiFePO4 cells typically vent mildly without fire or explosion. This makes them suitable for enclosed enclosures and attic/wall installations.
LiPo cells with NMC or LiCoO₂ cathodes store significantly more energy per unit mass and release it rapidly in fault conditions. Thermal runaway in a LiPo pack can reach temperatures exceeding 600 °C and produces toxic HF gas. Never install LiPo packs in sealed enclosures without adequate ventilation or thermal fusing. For unattended LoRa repeater deployments in public locations, LiPo represents a meaningful liability.
Lead acid produces hydrogen gas during overcharge. In sealed VRLA/AGM formats the recombination rate is high, but a faulty charge controller can still cause pressure build-up and case rupture. AGM batteries should not be enclosed in airtight boxes.
Voltage Curves and State-of-Charge Estimation
LiFePO4 has an extremely flat discharge curve - the cell voltage sits near 3.2 - 3.3 V for the majority of its capacity range, dropping steeply only in the last 10 - 15% of charge. This makes voltage-based SoC estimation imprecise in the mid-range, but the flat curve is beneficial because the node's voltage regulator sees a near-constant input for most of the discharge cycle.
| SoC (%) | LiFePO4 OCV (V/cell) | LiPo OCV (V/cell) | 12 V Lead Acid OCV (V) |
|---|---|---|---|
| 100 | 3.60 - 3.65 | 4.18 - 4.20 | 12.70 - 12.80 |
| 90 | 3.35 - 3.38 | 4.07 - 4.10 | 12.50 - 12.60 |
| 80 | 3.32 - 3.34 | 3.98 - 4.02 | 12.40 - 12.50 |
| 70 | 3.30 - 3.33 | 3.88 - 3.92 | 12.30 - 12.40 |
| 50 | 3.27 - 3.30 | 3.73 - 3.77 | 12.10 - 12.20 |
| 30 | 3.22 - 3.25 | 3.60 - 3.65 | 11.90 - 12.00 |
| 20 | 3.18 - 3.22 | 3.55 - 3.60 | 11.75 - 11.90 |
| 10 | 3.10 - 3.18 | 3.45 - 3.55 | 11.50 - 11.75 |
| 0 (cutoff) | 2.5 - 3.0 | 3.0 - 3.2 | 10.5 - 11.2 |
All OCV values are resting voltage with no load applied for at least 30 minutes. Under load, voltages will be lower due to internal resistance. For LiFePO4, Meshtastic firmware reports battery percentage based on voltage thresholds; refer to the telemetry page in this book for specific ADC configuration.
Specific Product Recommendations
LiFePO4 - Recommended Products
- EVE LF50K (50 Ah, 3.2 V prismatic): Grade A cells widely used in DIY packs. ~$15 - 20 USD per cell from Chinese suppliers. Rated 3,000 cycles at 1C. Excellent for 12 V 4S packs powering Pi gateways.
- Headway 38120S (10 Ah, 3.2 V cylindrical): Threadable terminals, very robust, 2,000+ cycle rating. Good for vibration-prone installations.
- Bioenno Power BLF-1206A (6 Ah, 12.8 V): Complete sealed pack with integrated BMS, ~$60 - 70. Designed for portable amateur radio use. Plug-and-play for most repeater boxes.
- Dakota Lithium 12V 7Ah: ~$55, includes BMS, designed for marine environments, IP65-rated case. Excellent for outdoor enclosures.
LiPo - Acceptable for Short-Deployment or Prototype Use
- EEMB LP805060 (3.7 V, 3000 mAh): Popular single-cell pouch for T-Beam style boards, includes built-in PCM protection board.
- Adafruit 328 (3.7 V, 2000 mAh): JST PH 2.0mm connector, compatible with most Adafruit LoRa boards out of the box.
- Tenergy LP 103450 (3.7 V, 1800 mAh): Flat pouch, low profile for tight enclosures.
Lead Acid - Only Where Weight/Cost Dominates
- Mighty Max ML7-12 (12 V, 7 Ah AGM): ~$20, widely available. Suitable for short-duration backup where replacement is routine.
- Universal Power Group UB1270 (12 V, 7 Ah): UL-listed, common in security system applications, drop-in for 12 V enclosures.
Summary Recommendation
For any unattended LoRa repeater or mesh node intended for permanent or semi-permanent deployment, LiFePO4 is the correct choice. The superior cycle life, wide temperature tolerance, and thermal safety profile outweigh its higher per-Wh cost compared to LiPo. Lead acid remains viable only when cost is the dominant constraint and the installation allows for routine (annual) battery replacement. LiPo is acceptable for short-term field deployments, handheld nodes, and prototyping, but should not be used in sealed enclosures or unattended permanent installations.
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 |
Battery Management Systems and Protection Circuits
A Battery Management System (BMS) is the electronic circuit that protects lithium cells from conditions that cause permanent damage or fire. Understanding what a BMS does - and detecting when one has failed - is essential for maintaining reliable solar-powered LoRa nodes.
What a BMS Does
A BMS monitors cell voltage, current, and temperature in real time and opens a protection MOSFET to disconnect the battery when it detects an out-of-bounds condition. The primary protection functions are:
| Protection Function | Trigger Condition | Consequence if Missing |
|---|---|---|
| Overvoltage protection (OVP) | Cell voltage > 3.65 V (LiFePO4) or 4.25 V (LiPo) | Electrolyte decomposition, capacity fade, fire (LiPo) |
| Undervoltage protection (UVP) | Cell voltage < 2.5 V (LiFePO4) or 3.0 V (LiPo) | Copper dissolution, cell permanently damaged (cannot accept charge) |
| Overcurrent protection (OCP) | Discharge current > rated maximum (e.g., 1C - 3C continuous) | Cell heating, electrolyte venting, cable fire |
| Short-circuit protection (SCP) | Near-instantaneous high current spike | Cell fire, explosion |
| Over-temperature protection (OTP) | Cell temp > 60 °C (some BMS modules) | Accelerated aging, thermal runaway risk in LiPo |
| Low-temperature charge inhibit | Cell temp < 0 °C | Lithium plating on anode, internal shorts, reduced cycle life |
| Cell balancing (multi-cell packs only) | Voltage delta between cells > 20 - 50 mV | Weakest cell reaches cutoff early, reducing pack capacity |
Why 18650 Cells Always Need a BMS
Bare cylindrical 18650 cells - including popular Samsung 30Q, LG HG2, and Panasonic NCR18650B - have no built-in protection. They are raw electrochemical cells. Connecting multiple 18650 cells in series or parallel without a BMS creates a serious hazard. If one cell has slightly lower capacity (as all real cells do), it will be over-discharged before the others during a deep cycle, permanently damaging it. On charge, it will be over-charged, potentially causing thermal runaway.
Even for a single 18650 used to power an ESP32 node via a TP4056 charging module, the TP4056 only handles charging protection - it does not provide discharge-side UVP or OCP. A DW01A + FS8205A dual-MOSFET protection IC circuit (commonly integrated into 18650 holder modules sold on AliExpress) is the minimum acceptable protection for bare-cell usage.
Built-in BMS on LiPo Pouch Cells
Consumer LiPo pouch cells sold for drones, hobby use, and electronics (Adafruit, SparkFun, EEMB, Polymer Lithium) typically include a small protection circuit module (PCM/PCB) laminated between the cell and the outer casing. This PCM provides OVP, UVP, and OCP - but usually not balancing (since these are single-cell packs) and rarely temperature protection. The PCM is designed for the specific cell and chemistry, with cutoff voltages pre-set at the factory.
When purchasing LiPo cells, verify the datasheet explicitly states "with protection circuit" or "PCM included." Bare (unprotected) LiPo cells are also sold, typically labeled "battery" without "protection" in the listing. Bare cells require an external BMS.
LiFePO4 Packs - BMS Inclusion Varies
LiFePO4 prismatic cells (EVE, CALB, Winston) are sold bare. DIY packs require a separate BMS module. Common choices:
| BMS Module | Cell Configuration | Continuous Current | Features | Approximate Cost |
|---|---|---|---|---|
| Daly 4S 40A BMS | 4S LiFePO4 (12.8 V) | 40 A | OVP, UVP, OCP, balancing, UART | $8 - 12 |
| JBD/Overkill Solar 4S 60A | 4S LiFePO4 | 60 A | Bluetooth app, UART, active balancing option | $20 - 35 |
| Ant BMS 4S 100A | 4S LiFePO4 | 100 A | CAN bus, SOC display, temp sensor | $30 - 50 |
| Texas Instruments BQ76920 | 3S - 5S Li-Ion/LiFePO4 | Configurable | IC-level, requires MCU interface; used in custom designs | $4 - 8 (IC only) |
Packaged LiFePO4 batteries from Bioenno, Dakota Lithium, and Battle Born include an integrated BMS and are safe to use without additional protection hardware.
Cell Balancing in Multi-Cell Packs
In a series-connected pack, cells must stay at nearly equal voltage. Over hundreds of cycles, manufacturing variations cause cells to drift apart. A balancing circuit periodically bleeds charge from higher-voltage cells (passive balancing) or shuttles charge from high to low cells (active balancing) to keep the pack uniform.
Passive balancing is simpler and more common. The BMS bleeds excess energy as heat through a resistor. Balance current is typically 50 - 200 mA, which is adequate for slowly drifting cells in solar nodes.
Active balancing (capacitor or inductor-based charge shuttling) is more efficient but more expensive. For LoRa nodes with <100 Ah packs, passive balancing from a Daly or JBD BMS is entirely sufficient.
Signs of BMS Failure
- Node shuts down at higher-than-expected battery voltage: The UVP threshold may have drifted, or a cell has developed high internal resistance (voltage sag trips protection prematurely).
- Battery refuses to charge after deep discharge: Some BMS modules enter a "sleep" or "protection" state when UVP fires and require a brief application of charge current to wake up. If the charger's output voltage is below the battery voltage, it won't wake the BMS. Apply 3 - 3.2 V per cell briefly through a current-limited source.
- Pack becomes warm during light loads: A shorted MOSFET in the BMS or a shorted cell can cause continuous current flow and heat generation.
- Intermittent disconnection under load: Worn BMS MOSFETs or a marginal OCP threshold. Measure the current draw and compare to the BMS rating.
- Cell voltages diverge by >100 mV at full charge: Balancing circuit has failed or a cell has degraded. The pack capacity is effectively limited to the weakest cell.
Parallel Cell Balancing Considerations
When connecting cells in parallel (e.g., 2P or 4P for higher capacity), cells must be at the same voltage before paralleling. Connecting cells with a voltage difference of >100 mV causes a large equalisation current spike that can damage cells and weld connectors. Always charge all cells to the same voltage (within 10 mV) before forming a parallel group.
Parallel cells naturally balance themselves during use because they share the same terminal voltage. Balancing circuits are only required for series-connected groups in a larger series-parallel pack (e.g., 4S2P). The BMS sees each parallel group as one "cell" and balances between groups.