The module that lets GROUU act on the field, not just sense it — driving valves and pumps from MQTT commands. The reference build is a one-in / four-out electrovalve water router for micro-irrigation; an ESP8266 node from GROUU V1 already implements the pattern.
The actuator is GROUU's output counterpart to the sensor node: an MQTT-driven way to switch valves, pumps and other loads. The V1 reference — a 4-relay water router — works and is documented; the module is being generalised to the current node/naming conventions so a garden, greenhouse or aquaponics build can water, dose or ventilate on the same stack it reports to.
Goal: close the loop. Sensing observes; actuation acts. It shares the basic node's connection, naming and OTA plumbing — the difference is outputs instead of inputs.
Command in, state echoed back — outputs instead of inputs.
State echoes back on <host>/valve/one — the loop closes without polling.
The module is a naming + topic convention as much as hardware: a command topic per output, a state topic that echoes back, and the shared control topic for OTA/reboot — so any dashboard or automation can drive and read it the same way it reads sensors.
A 4-channel relay board on GPIO 16 · 5 · 4 · 0 switches the loads. The reference target is four solenoid valves (the water router); the module is meant to drive the greenhouse actuator set too — servo latch, fan, grow-LED, pump. Breadboard-friendly; no custom PCB.
| Part | Role | Source |
|---|---|---|
| ESP8266 (NodeMCU / ESP-01) | MCU + WiFi — runs the relay node, WiFiManager + OTA | — |
| 4-channel relay board | Switches valves / pumps on GPIO 16 · 5 · 4 · 0 | — |
| Solenoid valves ×4 | The one-in / four-out irrigation router | — |
| Servo latch · fan · grow-LED · pump | Other actuator targets (greenhouse set, design) | — |
Reuses the basic node's connection, naming and OTA; the difference is command topics driving outputs. The V1 reference is the committed grouu-wrout.
ARDUINO/GROUU_V1/…/grouu-wrout.ino — MQTT-commanded relay actuation
#define RELAY_ONE 16 // D0
#define RELAY_TWO 5 // D1
#define RELAY_THREE 4 // D2
#define RELAY_FOUR 0 // D3
void turnOnOut1() {
digitalWrite(RELAY_ONE, HIGH);
client.publish(MQTT_VALVE_ONE_STATE_TOPIC.c_str(), PAYLOAD_ON);
}
void turnOffOut1() {
digitalWrite(RELAY_ONE, LOW);
client.publish(MQTT_VALVE_ONE_STATE_TOPIC.c_str(), PAYLOAD_OFF);
}
The V1 reference works and is documented; the module is being generalised to the current conventions. To reproduce: flash the firmware to an ESP8266, wire the relay board to the loads, set the host name and broker, then command each output over MQTT.
Wiring and build photos of the water router are added as it is rebuilt on the current conventions.