Sankhya Farms / Open Hardware / Power design
Open Hardware · Power design
ESP32-S3 solar-powered
sensor node design.
How the v4 carrier board's power architecture is sized to keep a sensor node alive through a fifteen-to-twenty-day monsoon reserve. Measured current budget, LiFePO4 chemistry choice, 20W solar sizing, the dual-buck rail topology, the v3-to-v4 high-side switch revision, and on-board battery telemetry.
01
The problem we are solving with power.
A sensor node deployed in an orchard has to survive without intervention for years. It will sit through monsoon weeks with effectively zero solar generation, through 45°C afternoons that hammer battery chemistry, and through fertigation events that wash conductive solution across the cable entries. If the node goes offline for a week during fruit set, the operator loses the most agronomically important data window of the entire year.
Most published agricultural IoT designs solve for nominal operation and ignore the tails. The v4 carrier board is sized for the tails. The design target is roughly fifteen to twenty days of operation with no solar input, at the worst-case duty cycle the firmware will ever run.
02
Current budget — measured, not estimated.
The single most useful exercise when designing a battery-backed node is to actually measure the current at every operating mode rather than trust datasheet typicals. Below are the measured numbers for the v4 carrier board at 12V input.
| Mode | Measured current @ 12V | Duty cycle (hourly schedule) |
|---|---|---|
| Deep sleep (ESP32-S3 in RTC-only, all rails on, sensor bus off) | ~5.5 mA | ~3585 s/hr |
| WiFi connect + report (radio active, sensors off) | ~150 mA peak, ~95 mA average | ~5 s/hr |
| Sensor read window (bus powered, RS-485 active) | ~120 mA average | ~6 s/hr |
| OTA download window (radio + flash write) | ~180 mA peak | ~30 s/day on update days only |
Hourly average works out to approximately 8.5 mA at 12V — about 0.10 Wh per hour or 2.4 Wh per day. The largest single contributor is the standing 5.5 mA deep-sleep draw, dominated by the LM2596S bucks' quiescent current and the INA219 housekeeping current. Reducing this further is the obvious next revision target.
03
Why LiFePO4 — and the specific chemistry choice.
The battery is a 12.8V (4S) LiFePO4 pack at 6 Ah, built from IFR32650 cells. Three reasons LiFePO4 dominates lead-acid and lithium-cobalt for this duty:
- Thermal stability. LiFePO4 is the only common lithium chemistry with a thermal runaway threshold above 250°C. A 45°C ambient peak in a sealed enclosure is a normal operating condition, not a hazard.
- Cycle life. 2,000+ deep cycles at 80% depth-of-discharge versus about 500 for SLA. At one solar-recharge cycle per day this is a 5-year design life versus 14 months for SLA.
- Voltage profile. Nominal 12.8V sits inside the 9V–24V tolerance of every sensor on the bus and inside the input range of the LM2596S buck regulator, with no need for a separate boost stage during low state-of-charge.
At 6 Ah × 12.8V = 76.8 Wh of usable energy, and a daily draw of about 2.4 Wh, the node survives about 32 days at zero solar input on full charge — comfortably inside the 15-to-20-day design target with reserve. The reserve matters: monsoon overcast weeks can run 10–14 days, and you do not want to depend on the battery being topped up going into one.
04
Solar sizing for the worst month.
The panel is a 20W monocrystalline at 12V nominal, mounted above the canopy on a galvanised pole at the row end. 20W is materially over-sized for the daily load; this is intentional. Solar generation in horticulture is dominated by the worst month, not the average. In a monsoon-active region the worst month delivers 30–45 % of the average — and most of that comes in 1-to-2-hour windows between clouds.
The sizing exercise that matters is: given the panel's effective daily generation in the worst month, does the battery come back to full in three to five sunny days after a wet week? For a 20W panel and a 6 Ah LiFePO4 in the latitudes where Sankhya Intelligence is deployed, the answer is yes with margin. A 10W panel would also work in the average month but pushes recovery from a wet week to 8–10 days, which compounds risk if the next wet week arrives early.
The charge controller is a small MPPT module rated for 12V/24V LiFePO4 input. PWM controllers also work for this size but are about 15% less efficient on cloudy days, which is exactly when efficiency matters. The cost difference between PWM and MPPT at this scale is under three dollars; always specify MPPT.
05
Power architecture on the carrier board.
The v4 carrier board takes 12V LiFePO4 directly as its primary input. From there:
- An NTC 10D-9 inrush limiter sits in series with the 12V input to prevent in-rush current from blowing the battery's protection circuit on power-up.
- A reverse-polarity-protected feed goes to the load switches.
- An LM2596S buck regulator generates the 5V rail for the ESP32-S3 module's onboard LDO and the USB-A 4G dongle port.
- A second LM2596S generates the 3.3V rail. (We tried doing 3.3V via a single 5V→3.3V LDO and the dissipation became thermally significant during WiFi bursts; two switching stages is cleaner.)
- An AP2112K-3.3 housekeeping LDO supplies the I²C bus and INA219 — kept on a separate, always-on rail because we want power telemetry even during faults on the main rails.
- Two TPS1H100B integrated high-side load switches gate the 12V sensor-bus rail and the 5V USB-A rail respectively. Both are GPIO-controlled, both have built-in current limit, both can be hard-disabled to clear sensor faults.
The integrated high-side switches replaced a discrete N-channel MOSFET high-side topology that appeared on earlier prototypes. The discrete topology was workable but required an external charge pump or a dedicated gate-driver, and we found at least one combination of sensor inrush and gate-source capacitance that latched the switch into a partially-on state under certain transients. The TPS1H100B's internal charge pump and current limit eliminate this entire class of failure.
06
Telemetry — knowing the node is alive.
An INA219AIDR sits across a 10 mΩ shunt on the 12V input. It reports bus voltage, shunt current, and computed power on the I²C bus. Every hourly report from the node includes the latest reading, and the server-side intelligence layer flags any node whose battery voltage trends downward over consecutive days regardless of weather. This catches three failure modes well before the node goes silent:
- Panel shading. A branch grows over the panel; daily charge tapers off over weeks.
- Connector corrosion. Resistance rises slowly at a cable joint; charge current drops without an obvious external symptom.
- Cell ageing. A weak cell in the 4S pack starts limiting capacity 12–18 months in; the voltage curve shape under load changes.
The INA219 was missing the I²C pull-ups in the v3 prototype, which made battery monitoring intermittent — a class of bug that is only obvious in retrospect. The v4 board adds explicit 4.7 kΩ pull-ups close to the chip.
07
Enclosure and thermal — the unsexy part.
The carrier board sits in an IP65 polycarbonate enclosure mounted on the same pole as the solar panel, oriented to keep the gland entries pointing down. Three notes from field experience:
The enclosure interior reaches 55–60°C under full afternoon sun even with the panel shading half the box. LiFePO4 tolerates this at the storage level but charge efficiency drops above about 45°C. Place the battery inside the enclosure on the cooler side (away from the panel) and the carrier board on the warmer side; the LiFePO4 sees a few degrees lower peak that way.
Cable entries are the failure point. Use marine-grade glands with a captive O-ring, not the press-fit nylon glands that ship default with most cheap enclosures. Apply silicone grease to the gland before tightening. A single fertigation cycle of nutrient-rich water finding its way past a poorly-sealed gland will destroy the board in under a week.
Mount the antenna external to the enclosure. The U.FL connector on the ESP32-S3 module feeds an external whip antenna through an SMA bulkhead on the side of the box. WiFi range through a polycarbonate wall plus a wet leaf canopy is much worse than the same range through clear air. The bulkhead also acts as the natural strain relief for the antenna cable.
08
Files, schematics, and what to read next.
Full schematic, Gerbers, BOM with LCSC part numbers, and PickAndPlace for the v4 carrier board are at /open-hardware and mirrored on GitHub at github.com/shsa1984/sankhya-node-hardware. Everything is licensed CERN-OHL-P v2.
If you're working on the sensor wiring side of the build, the RS-485 Modbus soil sensor wiring page covers pinouts and bus topology in detail. For the manufacturing step, see the JLCPCB PCBA walkthrough.