Vineyard frost network

Spring frost takes a crop a couple of degrees and a couple of hours at a time, and cold air pools at the bottom of a slope. I built the network that reads the whole block. It replaced walking the site, and it’s still running in production across multiple sites.

When
November 2025 to February 2026, Embedded Systems Engineering Intern
Where
H.B. Bro’s Vineyards, my family’s business
Stack
ESP32, SHT40, ESP-NOW, cellular, InfluxDB Cloud, Grafana
Code
SukhmanH/vineyard-frost-monitor

How the frost network moves a reading

SHT40 over I²Cwatchdogcellularbase stationv4, accepts 44 B and 48 BInfluxDB CloudGrafana alarms+0.5 °C−0.5 °Cbud breakalarm

  1. Nodes wake on a jittered schedule, read the SHT40 over I²C, and hop their packet over ESP-NOW toward the base station.
  2. The base sends it out over cellular to InfluxDB. A reading crosses the warn line, the alarm fires, and it holds until the block recovers.
  3. A link drops. Traffic fails over to a redundant link without anyone touching it.
  4. A node hangs. The 10 s watchdog reboots it into the next cycle.
  5. OTA goes out in stages: the base first, then one node at a time, while 44-byte v3 and 48-byte v4 packets share the air.

Data path

ESP32 nodes read an SHT40 temperature and humidity sensor over I²C and compute dew point on the node. Each sends one packet over an ESP-NOW mesh to a base station, which backhauls over cellular where there’s no Wi-Fi into InfluxDB Cloud, with Grafana threshold alarms on top.

The packet

One versioned packet carries temperature, humidity, dew point, and battery. Old and new firmware stay interoperable, so OTA updates roll out in stages without bricking units. During the v3 to v4 move the base accepted both the 44-byte and the 48-byte frame: base first, then one node at a time.

Staying up

  • Watchdog recovery when firmware hangs.
  • Redundant links with automatic failover.
  • Per-unit calibration applied at runtime.
  • CRC-checked sensor reads, retried on failure.
  • Low-power sleep between wakes.

Field faults

The intermittent ones only showed up outdoors. I traced them from execution logs across firmware, the network, and the hardware.