This is a full distribution of the Plant133 plant-watering device. This device can monitor and water up to 4 plants at a time. This repository hosts the firmware, PCBA design, and OpenSCAD code for all components.
A writeup about this project is at "Plant1337: "Water 4 plants."
- Multi-Plant Support: Monitors and independently waters up to 4 plants.
- Sensors:
- Capacitive soil moisture sensing for each plant.
- SHT3x temperature and humidity sensor for environmental monitoring.
- Reservoir water level float switch detection.
- User Interface:
- OLED Screen: Rotates through status screens showing IP address, moisture levels, and environment data.
- Web Dashboard: A modern Svelte-based responsive web interface for real-time monitoring and configuration.
- Integration:
- MQTT: Full support for Home Assistant auto-discovery and state reporting.
- Safety:
- Watchdog Timer: Hardware watchdog protects against system hangs.
- Dose Limiting: Prevents over-watering by limiting the maximum number of pump cycles per day.
- Reservoir Check: Prevents pump damage by detecting low water levels.
Please see the instructions for how to assemble and set up a Plant133 device hardware.
- PlatformIO (Core or VSCode extension)
- Node.js (for building the web interface)
The web interface is built with Svelte and must be compiled before uploading to the ESP32's filesystem.
./build-svelte.shThis generates the static HTML/CSS/JS files in data/static/, then converts them into a header file (using svelteesp32)to include them all in the firmware.
- Configure Secrets: Copy
secrets.ini.exampletosecrets.iniand set your WiFi credentials, OTA password, and MQTT details. - Build Firmware:
pio run
- Upload Filesystem (contains the web interface):
pio run -t uploadfs
- Upload Firmware:
pio run -t upload
The device exposes a JSON API for integration and control:
GET /api/status: Returns system status (temp, humidity, water level).GET /api/plants: Returns configuration for all plants.GET /api/moisture: Returns current moisture readings.PUT /api/plants/{id}: Update configuration for a specific plant.POST /test/pump: Run a pump for a specific duration (JSON body:{ "pumpId": 1, "duration": 1000 }).POST /api/restart: Restart the device.
This project is built using a custom C++ framework for ESP devices:
- og3: Application framework.
- og3x-oled: OLED screen support.
- og3x-shtc3: SHTC3 sensor support.
- svelteesp32: Web interface integration.
The full KiCAD project for the printed circuit board is in the KiCAD subdirectory.
Components are designed in OpenSCAD. Source code is in the scad subdirectory.
Housing for the PCBA (scad/box/).

Mounts the box to a water reservoir (scad/ebox_hook).

Holds pumps and water level float (scad/reservoir_insert).

Holds the watering tube at the sensor location (scad/moisture_sensor_cap).

Alternative watering method using a soil spike (scad/spike).


