How to Size a Solar Panel for a Remote IoT Sensor

Small solar panel connected to a battery and IoT sensor board on a workbench

The same ESP32 soil moisture sensor that runs perfectly in Phoenix will die by mid-December in Des Moines. Not because of the cold, but because the engineer sized the solar panel for summer.

This is the single most common failure mode in off-grid IoT deployments, and it comes from a reasonable-sounding mistake: picking a solar panel based on the device’s power draw without accounting for where and when it actually needs to run. A system designed for 7 hours of strong Arizona sun receives barely 2.5 hours of weak winter light in Iowa. That’s not a minor difference. It’s a 3× gap that turns a working prototype into an expensive paperweight stuck on a fence post.

What you need is a repeatable, worksheet-style method that takes your device’s actual current draw and your deployment location’s actual solar conditions, then spits out a concrete panel size and battery size. That’s exactly what this article delivers. Five steps, two worked climate examples, and a bill of materials you can order today.

Here’s the sizing process at a glance:

[Measure Device Current Profile]
            |
            v
[Calculate Daily Energy Budget (mWh)]
            |
            v
[Choose Autonomy Days for Climate]
            |
            v
[Size Battery (mAh) w/ DoD + Temp Derating]
            |
            v
[Look Up Worst-Month Peak Sun Hours]
            |
            v
[Size Solar Panel (W) w/ Safety Factor]
            |
            v
[Select Charge Controller IC / Module]
            |
            v
[Prototype & Validate on Bench]

Step 1: Calculate Your Device’s Daily Energy Budget

Forget panel wattage for now. Everything starts with one number: how many milliwatt-hours your device consumes per day.

Most IoT sensors spend the vast majority of their time asleep, waking briefly to read a sensor, transmit data, and go back to sleep. The average current isn’t the active current or the sleep current. It’s a weighted average across the full duty cycle.

Here’s the formula:

Average Current (mA) = (I_active × T_active + I_sleep × T_sleep) / T_total
Daily Energy (mWh)   = Average Current (mA) × Supply Voltage (V) × 24 h

Let’s work a concrete example: an ESP32-based soil moisture sensor that wakes every 15 minutes, reads a capacitive soil probe, transmits via LoRa, then goes back to deep sleep.

+---------------------------+----------+------------+
| State                     | Current  | Duration   |
+---------------------------+----------+------------+
| Deep Sleep                | 0.01 mA  | 14 min 50s |
| Wake + Sensor Read        | 40 mA    | 5 s        |
| LoRa Transmit             | 120 mA   | 5 s        |
+---------------------------+----------+------------+

Per 15-minute cycle (900 seconds):

  • Sleep: 0.01 mA × 890 s = 8.9 mA·s
  • Wake + read: 40 mA × 5 s = 200 mA·s
  • Transmit: 120 mA × 5 s = 600 mA·s
  • Total: 808.9 mA·s per 900 s → Average current ≈ 0.90 mA
Daily Energy = 0.90 mA × 3.7 V × 24 h ≈ 79.9 mWh

We’ll round up to ~82 mWh/day to keep a small margin.

One critical point: measure, don’t guess. Datasheets give typical values, but your firmware, your LDO regulator’s quiescent current, and your specific sensor’s idle draw will differ. Use a current profiler (like the Nordic PPK2) or even an INA219 breakout board to capture an actual current trace across a full wake/sleep cycle.

Step 2: Size the Battery for Days Without Sun

The solar panel collects energy. The battery stores it. You need enough stored energy to survive consecutive cloudy or overcast days when the panel produces little to nothing. This is your autonomy period.

Rules of thumb for autonomy days:

  • Warm, sunny climates (US Southwest, Mediterranean, inland Australia): 3 days
  • Cold, cloudy climates (US Midwest, Northern Europe, Pacific Northwest): 5–7 days

The formula introduces one more concept: Depth of Discharge (DoD), the percentage of the battery’s total capacity you can actually use without damaging it or shortening its lifespan. For LiFePO4, that’s roughly 80%. For standard lithium-ion or LiPo, use 70–80%. For lead-acid, only 50%.

Required Battery (mWh) = Daily Energy × Autonomy Days / Max DoD

Here’s the worked comparison:

+-----------------------+------------------+------------------+
| Parameter             | Warm Climate     | Cold Climate     |
+-----------------------+------------------+------------------+
| Daily Energy          | 82 mWh          | 82 mWh           |
| Autonomy Days         | 3                | 5                |
| Depth of Discharge    | 80% (LiFePO4)   | 80% (LiFePO4)   |
| Battery Required      | 308 mWh         | 513 mWh          |
| @ 3.7V nominal        | ~83 mAh         | ~139 mAh         |
| Practical choice      | 500 mAh LiPo    | 1,000 mAh LiPo  |
+-----------------------+------------------+------------------+

Always round up to the next standard cell size. You can’t buy an 83 mAh cell off the shelf, and the headroom is welcome.

One more factor for cold climates: lithium-ion batteries lose 20–30% of their effective capacity below 0°C. If your Des Moines sensor faces January nights at -15°C, that 1,000 mAh cell effectively becomes 700–800 mAh. This is yet another reason the cold-climate battery is larger. In genuinely frigid deployments, LiFePO4 chemistry earns its premium because it handles sub-zero temperatures more gracefully than standard Li-ion.

Step 3: Look Up Your Location’s Worst-Month Solar Energy

Here we bridge from battery to panel. To do that, you need to know how much solar energy your location actually receives, and specifically, how much it receives during the worst month of the year.

Solar engineers express this as Peak Sun Hours (PSH): the equivalent number of hours per day at full 1,000 W/m² irradiance. A location with 5 PSH doesn’t get exactly 5 hours of blazing sun. It might get 10 hours of moderate sun that totals the same energy.

+-------------------------+----------+-----------+
| Location                | Summer   | Winter    |
|                         | PSH/day  | PSH/day   |
+-------------------------+----------+-----------+
| Phoenix, AZ             | 7.5      | 5.0       |
| Des Moines, IA          | 5.5      | 2.5       |
| Manchester, UK          | 4.5      | 1.0       |
+-------------------------+----------+-----------+

Look up your specific location for free using NREL’s PVWatts Calculator (US locations) or the Global Solar Atlas (worldwide).

The non-negotiable rule: design to the worst month’s PSH if your sensor must run year-round. Sizing for summer PSH is the #1 reason solar IoT deployments fail in winter.

Step 4: Size the Solar Panel

Combine your daily energy budget with your location’s available sun:

Min Panel Output (mWh/day) = Daily Energy × Safety Factor
Min Panel Power (W)        = Min Panel Output / (PSH × 1000 × Efficiency Factor)

The safety factor absorbs a long list of real-world losses: charge controller inefficiency (~85–90%), wiring resistance, panel soiling from dust or bird droppings, non-optimal tilt angle, and temperature derating (panels lose efficiency in extreme heat). Use 1.5× for warm, clear-sky sites and for cold, cloudy sites.

The efficiency factor (0.85) specifically captures the charge controller’s conversion loss, separated here to make the math transparent.

Worked example for both climates:

+--------------------------+-----------------+------------------+
| Parameter                | Warm (Phoenix)  | Cold (Des Moines)|
+--------------------------+-----------------+------------------+
| Daily Energy             | 82 mWh          | 82 mWh           |
| Safety Factor            | 1.5             | 2.0              |
| Required Solar mWh/day  | 123 mWh         | 164 mWh           |
| Worst-Month PSH          | 5.0 h           | 2.5 h            |
| Efficiency Factor        | 0.85            | 0.85             |
| Min Panel Power          | ~29 mW          | ~77 mW           |
| Practical Panel Choice   | 0.5W 5V mini    | 1W 5V mini       |
+--------------------------+-----------------+------------------+

The cold-climate system needs roughly 2.5× the panel for the identical sensor. That’s not intuition most people have when shopping for solar panels.

A note on voltage: your panel’s output voltage must exceed the battery’s charge voltage after accounting for the charge controller’s dropout. For single-cell Li-ion/LiPo systems (4.2V charge voltage), 5V or 6V panels are standard choices. Check your charge controller’s input voltage range against the panel’s open-circuit voltage (Voc), which is typically 20–30% above the panel’s rated voltage.

Step 5: Select a Charge Controller That Matches the Scale

At these power levels, milliwatts to low single-digit watts, a full-size solar charge controller designed for rooftop panels is absurd overkill. You need a dedicated solar energy harvesting IC.

The most common options:

  • TI BQ25570 works down to microwatts of input, includes Maximum Power Point Tracking (MPPT), and is widely available on breakout boards from Adafruit and others.
  • STMicroelectronics SPV1050 is a similar ultralow-power harvesting IC with an integrated LDO.
  • Linear Tech (Analog Devices) LTC3105 is a good fit for very low input voltages.

MPPT (Maximum Power Point Tracking) dynamically adjusts the load the IC presents to the panel to extract maximum power. At these small scales, it’s the difference between capturing 60% vs. 85% of available panel energy. Most harvesting ICs include it automatically.

For prototyping, grab an off-the-shelf module like the Adafruit BQ25570 breakout or DFRobot Solar Power Manager, and save board-level design for your production revision. Match the module’s input voltage range to your panel’s Voc, and confirm the output is configured for your battery chemistry (4.2V float for Li-ion/LiPo, 3.6V for LiFePO4).

The Same Sensor, Two Different Builds

Here’s the final side-by-side BOM for our ESP32 + LoRa soil moisture sensor:

+----------------------------+--------------------+--------------------+
| Component                  | Warm (Phoenix, AZ) | Cold (Des Moines)  |
+----------------------------+--------------------+--------------------+
| Solar Panel                | 0.5W, 5V           | 1W, 5–6V           |
| Battery                    | 500 mAh LiPo       | 1,000 mAh LiFePO4 |
| Charge Controller          | BQ25570 breakout    | BQ25570 breakout   |
| Enclosure Note             | UV-rated, vented    | Sealed, insulated  |
| Est. Power Supply Cost     | ~$10–15             | ~$18–25            |
+----------------------------+--------------------+--------------------+

Notice the cold-climate build uses LiFePO4 for better low-temperature resilience despite its lower energy density. The enclosure strategy changes too: vented in Arizona to prevent heat buildup, sealed and insulated in Iowa to retain warmth near the battery.

The cost difference is modest ($8–10 per unit), but multiply that across a 200-sensor agricultural deployment and the decision matters.

Mistakes That Kill Field Deployments

Sizing to summer sun. Your system needs to survive the worst month, not the best one. Always use winter PSH for year-round deployments.

Ignoring sleep current. Deep sleep is never zero. An ESP32 with a connected peripheral can draw 0.01 mA or 5 mA depending on your power rail design. Measure it.

Using nameplate battery capacity. A “1,000 mAh” cell at -10°C with 80% DoD gives you roughly 560 mAh of usable capacity. Derate for temperature, derate for DoD.

Forgetting charge controller losses. That 85–90% efficiency means 10–15% of your panel’s output never reaches the battery. It’s already baked into our formulas, but skip it and you’ll come up short.

Mounting the panel dead flat. Even a 15–20° tilt toward the equator meaningfully improves winter energy harvest, when the sun sits low on the horizon. That’s exactly the season where every milliwatt-hour counts.

Build It on the Bench Before the Field

You now have a five-step method that works for any IoT device, any location, any climate. To recap:

  1. Measure your device’s current profile across a full wake/sleep cycle.
  2. Size the battery for your climate’s autonomy days, derated for DoD and temperature.
  3. Look up worst-month Peak Sun Hours for your deployment location.
  4. Size the panel using the safety factor appropriate for your climate.
  5. Select a harvesting IC that matches your panel voltage and battery chemistry.

Before you drive to the field site and zip-tie anything to a fence post, validate the whole system on your bench. A desk lamp held six inches from your panel won’t simulate real solar irradiance accurately, but it will confirm that your charge controller is working, your battery charges and discharges correctly, and your firmware handles low-battery gracefully.

Get the power system right on the bench, and you won’t be making a second trip to the field.


Hubble Network connects your IoT sensors directly to satellite from a standard Bluetooth chip — no solar-powered gateways to size, site, or maintain. See how it works →