← Wiki

Concept

Recipe: off-grid soil-moisture mesh

Also known as: soil-moisture mesh recipe, field sensor network recipe

Reference design composed from the farm-tech toolkit: a battery-and-solar-powered network of soil-moisture sensors distributed across a multi-acre field, reporting back to a single farm-edge collector without WiFi or cellular infrastructure. Demonstrates the LoRaWAN star-via-gateway pattern and the Meshtastic gateway-less mesh pattern as two valid compositions for the same problem class. The recipe exercises ~10 ingredients and is the canonical small-scale sensor-network worked example for the toolkit.

Problem statement

A 10-acre orchard or row-crop field with no WiFi, no cellular, and no AC power at most points. Need to read soil moisture (and ideally temperature/humidity) at 20–50 locations every 15 minutes for a season, with data flowing back to a farm-office dashboard for irrigation decisions.

Architecture A — LoRaWAN star (gateway-and-end-nodes)

[Field node × N]                      [Farm hub]
  ESP32 + BME280 + soil sensor          Raspberry Pi 5
  + LoRa radio (RFM95)         ───►     + LoRaWAN gateway (RAK7268 or
  + 10W solar + 18650 + MPPT             outdoor-rated commercial)
  + 3D-printed enclosure                + ChirpStack network server
                                        + Mosquitto MQTT broker
                                        + Home Assistant
  • Each field node sleeps for 14.5 minutes, wakes, reads sensors, transmits one [[lorawan|LoRaWAN]] uplink (~20 bytes), goes back to sleep. Average current ~30 µA with 25 mA wake spikes.
  • One [[lorawan|LoRaWAN]] gateway covers 2–10 acres in moderate terrain; 10–40 acres in flat open conditions.
  • ChirpStack on the Pi receives uplinks, decodes payload, publishes to MQTT topics like field/node-12/soil/moisture.
  • [[home-assistant|Home Assistant]] subscribes; dashboards and threshold alerts work end-to-end.

Cost: ~$50/node × 30 nodes = $1500 + $200 gateway + $100 Pi = ~$1800.

Architecture B — Meshtastic mesh (gateway-less)

[Field node × N]                      [Farm hub]
  Heltec V3 (ESP32 + LoRa)              Raspberry Pi 5
  + BME280 + soil sensor       ◄──►     + Meshtastic node connected via USB
  + same power as above                 + MQTT bridge → Mosquitto
                                        + Home Assistant
  • Same hardware footprint per node, but firmware is [[meshtastic|Meshtastic]] instead of [[lorawan|LoRaWAN]].
  • Nodes route for each other — no gateway needed; if any node has line-of-sight to the farm-hub node, the whole mesh is reachable.
  • Slightly lower battery life per node (mesh-routing overhead) but no gateway dependency.
  • Better for terrain with hills or buildings that would block a single-gateway [[lorawan|LoRaWAN]] link.

Cost: ~$60/node × 30 nodes + $60 hub node = ~$1860. No commercial gateway needed.

Choosing between A and B

  • Open terrain, single gateway works: [[lorawan|LoRaWAN]] is more battery-efficient and battle-tested.
  • Hilly terrain, buildings, or partial line-of-sight: [[meshtastic|Meshtastic]] survives gracefully — if one node fails, the rest reroute around it.
  • Plan to scale beyond 100 nodes: [[lorawan|LoRaWAN]] scales better; [[meshtastic|Meshtastic mesh]]-routing overhead grows with N.

What this recipe doesn’t address

  • Calibrating each soil-moisture sensor before deployment (mandatory; do it indoors).
  • Enclosure sealing for outdoor sensor electronics — cheap probes are not waterproof above the sensor body.
  • Time-series storage beyond [[home-assistant|Home Assistant]]‘s default — pair with InfluxDB for serious analysis.

See also

Auto-generated from this entry’s typed relations: frontmatter, grouped by relation type so the editorial signal isn’t flattened.

  • Combines: [[esp32]] · [[capacitive-soil-moisture-sensor]] · [[bme280-environmental-sensor]] · [[lorawan]] · [[meshtastic]] · [[solar-charge-controller]] · [[lithium-bms]] · [[mqtt]] · [[home-assistant]] · [[raspberry-pi]]

What links here, and how

Inbound connections from across the wiki, grouped by lens and by relationship. These appear automatically — every entity page declares what it links to, and that data populates here on the targets.

Practical

contains

1 inbound link · 10 outbound