Home Services Blog Contact

Insights & Builds

Real projects, technical deep-dives, and lessons learned from the field. No fluff — just things we've actually built.

Back to Blog
February 2026 5 min read Project Build

Smart Irrigation on a Budget: ESP32 + ESPHome + Home Assistant

The Problem

Manual irrigation timers are dumb. They water on a schedule whether it rained yesterday or not, they can't be adjusted remotely, and adding zone-level control usually means buying an expensive proprietary controller that locks you into an app you'll hate.

We wanted something different: Home Assistant-integrated zone control that could be automated based on weather, soil conditions, or just a tap on a phone. Off-the-shelf smart irrigation controllers exist, but they're either cloud-dependent, expensive, or both. So we built one over a weekend.

Parts List

The total build came in well under the cost of a Hunter or Rachio controller, and every component is locally sourced or readily available online.

Controller

Waveshare ESP32-S3 6-CH Relay

ESP32-S3 with six onboard relays, screw terminals, and Wi-Fi. The brain of the operation.

Power

Jaycar 24VAC Transformer

MP3032 — provides 24VAC to drive standard irrigation solenoid valves.

Power

Jaycar AC/DC Converter

MP3350 — converts 24VAC down to DC to power the ESP32 board cleanly.

Firmware

ESPHome

YAML-based firmware that compiles and flashes directly. OTA updates, native HA integration.

Platform

Home Assistant

Local-first automation platform. Dashboards, automations, and voice control out of the box.

Enclosure

Weatherproof Junction Box

IP65-rated box from the hardware store. Drill, mount, done.

The Build

The Waveshare board made this almost too easy. Six relay channels, screw terminals for valve wiring, and an ESP32-S3 that ESPHome supports natively. No soldering, no custom PCBs.

ESPHome Configuration

The core YAML is straightforward. Each relay maps to an irrigation zone, exposed as a switch in Home Assistant:

  
irrigation.yaml
esphome: name: irrigation-controller friendly_name: Irrigation Controller esp32: board: esp32-s3-devkitc-1 framework: type: arduino wifi: ssid: !secret wifi_ssid password: !secret wifi_password switch: - platform: gpio name: "Zone 1 — Front Lawn" pin: GPIO1 id: zone_1 icon: "mdi:sprinkler-variant" - platform: gpio name: "Zone 2 — Garden Beds" pin: GPIO2 id: zone_2 icon: "mdi:sprinkler-variant" - platform: gpio name: "Zone 3 — Side Yard" pin: GPIO3 id: zone_3 icon: "mdi:sprinkler-variant" # ... zones 4–6 follow the same pattern

Wiring Overview

The wiring is dead simple. The 24VAC transformer plugs into mains and outputs to two places:

  • Solenoid valves — each valve's common wire goes to the transformer's 24VAC common. The other wire from each valve runs to a relay's normally-open terminal.
  • AC/DC converter — the MP3350 takes 24VAC in and outputs clean 5VDC to power the ESP32 board via its USB-C or barrel jack input.

When ESPHome closes a relay, it completes the 24VAC circuit for that zone's solenoid valve, opening the water. Simple, reliable, and no cloud dependency.

Relay-to-Zone Mapping

We labelled each relay channel inside the enclosure and mapped them in the ESPHome config. With six channels available:

  1. Zone 1 — Front lawn rotary sprinklers
  2. Zone 2 — Garden beds (drip line)
  3. Zone 3 — Side yard pop-ups
  4. Zone 4 — Backyard lawn
  5. Zone 5 — Veggie patch (drip)
  6. Zone 6 — Spare / future expansion

The Result

Once ESPHome compiles and flashes the firmware (takes about 90 seconds), the device appears in Home Assistant automatically. Each zone shows up as a toggleable switch with a sprinkler icon.

From there, the automation possibilities open up:

  • Scheduled watering — run zones sequentially at 5am, skip weekends
  • Weather-aware — check the BOM forecast and skip if rain is expected
  • Manual override — tap a zone on your phone or ask a voice assistant
  • Duration limits — auto-shutoff after 20 minutes to prevent flooding
  • Dashboard cards — see which zones are active, last run time, total usage

The whole system runs 100% locally. No cloud accounts, no subscriptions, no internet dependency. If the Wi-Fi goes down, you can still trigger zones via physical buttons or fallback automations.

What’s Next

The relay controller handles the “turn water on and off” part perfectly. But smart irrigation gets really interesting when you add sensing:

  • Soil moisture sensors — ESPHome supports capacitive moisture probes via ADC. Water only when the soil actually needs it.
  • Rain delay integration — pull live radar data from BOM and suppress scheduled runs when precipitation is detected within a configurable radius.
  • Weather-based scheduling — adjust watering duration based on temperature, humidity, and evapotranspiration rates using the OpenWeatherMap integration.
  • Flow metering — add a pulse-based flow sensor to track actual water usage per zone and detect leaks.

The best part about building on ESPHome and Home Assistant is that none of this requires replacing hardware. It’s all firmware and config changes — flash over the air and you’re done.

Total cost: under $120 AUD. Total build time: one afternoon. Total cloud subscriptions required: zero.