Since February 5 at 11:55 PM, I’ve had v1.0.0 of my custom hardware and firmware running in the field.
The nodes sample soil moisture every four hours and transmit the readings over LoRa. They’ve been steady so far.


I’ve been looking for more power savings, After reviewing my design notes, I tried an experiment:
I shared the schematic and firmware with ChatGPT (o3) to see what it would suggest. The feedback fell into two buckets: hardware and firmware.
Hardware#
The initial hardware suggestions weren’t usable. They proposed swapping the regulator for a same-family LDO at an incompatible output voltage, and adding termination resistors or buffers on the SPI lines to the LoRa radio. Those changes would have required a substantial board redesign.
However, the exercise did prompt a simple test on my side: I changed all pull-up resistors (except I²C) from 10 kΩ to 100 kΩ. That step reduced static current noticeably. Even so, the node still drew tens of mA in active mode and hundreds of µA in deep sleep.
Firmware#
On a second pass, the analysis was more helpful. It pointed to leakage through SPI-connected GPIOs and recommended tightening the deep-sleep and startup sequences. I updated the firmware to:
- Keep the V_AUX LDO enabled during deep sleep. (This was already in place.)
- Set all GPIOs connected to radios/sensors to high-impedance (inputs, no pulls) before entering deep sleep.
- Restore GPIO direction, pull state, and peripheral configuration on wake.
You can see the pull request here
Results#
With the pull-up changes and the revised sleep/wake handling:
- Active (TX/RX): from 31 mA → 14.85 mA
- Deep sleep: from 703 µA → 28.2 µA
Before the changes#


After the changes#


That’s a large reduction, especially in deep sleep.
Using an IoT battery-life calculator with the current duty cycle, the estimated lifetime is about 2,970 days (~8.1 years). This is a model-based estimate; real-world life will depend on temperature, battery aging, and radio conditions.

What’s next#
I’m letting the deployed v1.0.0 sensors run their batteries down before I touch them. After that, I’ll swap the pull-ups on those units and update them to the latest firmware, which includes the low-power fixes and remote firmware update support. I’ll write a follow-up post detailing the remote update process once that rollout is complete.