Smart sprinkler control without renting your yard to the cloud.
ESPrinkler32 is an open, practical sprinkler controller built around an ESP32 touchscreen panel, an I2C relay expansion board, and boring-good fail-off safety.
The appliance version of a maker project.
The goal is not just “an ESP32 that clicks relays.” The goal is a controller you can mount, configure, recover, and hand to somebody without a 45-minute explanation.
Local-first
Manual control and safety actions live on the device. WiFi and Home Assistant make it better, but they are not required for basic operation.
Fail-off safety
Outputs default off at boot, one zone runs at a time, runtimes are clamped, and ALL OFF stays available even when a zone is disabled.
Real configuration
Name zones, disable unwired zones, expose useful status, and build schedules on top of the same clean zone model.
Hardware path
Current architecture: 2.8-inch ESP32-S3 touchscreen panel connected over I2C to an MCP23017 relay expansion PCB. Eight zones, one common 24VAC sprinkler transformer path, and a shared 5V logic rail.
| Controller | ESP32-S3 touchscreen module |
|---|---|
| Expansion | MCP23017 I2C GPIO expander |
| Zones | 8 relay-controlled sprinkler zones |
| Valve power | 24VAC switched by relay contacts |
| Integration | Local web/API plus Home Assistant |
Software model
The firmware is moving in small, safe milestones: display and touch first, then web/API status, then stubbed zone control, then persistent zone config, then time and scheduling.
Device UI
- Big zone buttons
- Visible WiFi/time state
- Always-present ALL OFF
API
- /api/status
- /api/zone
- /api/alloff
- Disabled-zone protection
Schedules
- Stored locally
- Skipped if time invalid
- Skipped for disabled zones
- Manual control remains available
Build roadmap
Touchscreen console
Bring up display, touch, pages, diagnostics, and local safe state with stubbed hardware.
Local web and JSON status
Expose a simple web page and status endpoint without blocking offline boot.
8-zone API model
Support all eight zones in software, reject invalid zones, clamp runtimes, and verify ALL OFF.
Zone enable/name config
Persist enabled flags and names, grey disabled zones, reject ON for disabled zones, but allow OFF.
NTP and scheduling
Add time validity, local schedule storage, schedule skip logic, and manual override behavior.