ESP32 S3 - Water/Liquid Valve
Learn how to control water flow, beer dispensing, oil flow, or any liquid/gas valve using the ESP32 S3 and a solenoid valve. This beginner-friendly tutorial shows you how to automate liquid control for irrigation, dispensing systems, and flow management projects.
What you'll build:
- A solenoid valve circuit wired to the ESP32 S3 through a relay module
- Arduino code that opens and closes the valve on a 5-second cycle
- Serial Monitor output showing real-time valve state
- A reusable foundation for irrigation, dispensing, and flow automation projects

Hardware Preparation
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Additionally, some of these links are for products from our own brand, DIYables .
Overview of Water/Liquid Valve
A solenoid valve is an electromechanical device that uses an electric signal to open or close a flow path for liquids or gases. When voltage is applied, an internal electromagnet pulls a plunger to open the valve; removing power allows a spring to close it again. This simple on/off mechanism makes solenoid valves an ideal choice for automating irrigation, dispensing, and flow control systems with a microcontroller like the ESP32 S3.
Key Specifications
- Operating Voltage: Typically 12V DC (some models use 5V or 24V)
- Flow Control: Opens when powered, closes when power is removed
- Applications: Water dispensing, irrigation, gas control, beverage systems
- Flow Direction: Some valves are unidirectional (check valve specifications)
- Pressure Requirements: Some models need minimum pressure to fully open
- Perfect for beginners: Simple on/off control makes automation projects easy
Pinout

The solenoid valve exposes two connection terminals that carry the switched 12V supply:
- Positive (+) pin (red): Connect to 12V DC power supply positive terminal
- Negative (-) pin (black): Connect to 12V DC power supply ground (via relay control)
How Water/Liquid Valve Works
The valve operates on a simple electromagnetic principle:
- Default State: Valve is normally closed, blocking liquid/gas flow
- Powered State: When 12V DC is applied, electromagnet pulls valve open
- Flow Control: Liquid/gas flows freely when valve is open
- Return to Closed: Removing power closes the valve automatically
※ NOTE THAT:
- Some valves require minimum water pressure to fully open after power is applied - the pressure is created by the liquid flow itself
- Many solenoid valves are directional - liquid can only flow one way (check the arrow marking on valve body)
- Always verify the voltage rating before connecting power to avoid damaging the valve
How to Control Water/Liquid Solenoid Valve
Controlling a solenoid valve with the ESP32 S3 requires a relay module because the ESP32 S3 GPIO pins output only 3.3V at low current, while most solenoid valves need 12V at significantly higher current. The relay acts as an electronically controlled switch: the ESP32 S3 drives the relay coil with a small signal, and the relay's internal contacts switch the full 12V supply to the valve. This arrangement also electrically isolates the ESP32 S3 from the high-power valve circuit, protecting the microcontroller. For a deeper look at relay operation, see our ESP32 S3 - Relay tutorial.
Wiring Diagram

This image is created using Fritzing. Click to enlarge image
Follow the wiring diagram above to connect your ESP32 S3 to the relay and solenoid valve. Keep signal wires away from the 12V side to minimise noise and reduce risk.
Safety Notes
Never connect the 12V power supply directly to any ESP32 S3 GPIO pin — the relay exists specifically to bridge the voltage gap. Before powering on, double-check polarity on both the relay module and the valve terminals. Ensure all screw terminals and Dupont connections are firmly seated to prevent intermittent switching that could damage the valve coil over time.
Wiring Connections:
| Component Pin | Arduino Pin | Notes |
|---|---|---|
| Relay Signal Pin | D7 | Control signal from ESP32 |
| Relay VCC | 5V | Power for relay module |
| Relay GND | GND | Common ground |
| Relay COM | 12V Power (+) | 12V input to relay switch |
| Relay NO | Valve (+) | Normally Open to valve positive |
| Valve (-) | 12V Power GND | Valve negative to power ground |
ESP32 S3 Code
The following code demonstrates automatic valve control using the ESP32 S3 — it opens the solenoid valve for 5 seconds, then closes it for 5 seconds in a continuous cycle. Serial output lets you confirm the valve state in real time without needing a multimeter or oscilloscope. Copy the sketch into a new Arduino IDE project, select the correct board and port, then upload.
Detailed Instructions
- New to ESP32 S3? Complete our Getting Started with ESP32 S3 guide first.
- Install Arduino IDE: Follow the ESP32 S3 software installation guide if you haven't set up the board package yet.
- Wire the components: Connect the relay and solenoid valve to the ESP32 S3 following the wiring diagram above.
- Connect USB cable: Plug your ESP32 S3 into your computer using a USB Type-C cable.
- Open Arduino IDE: Launch the Arduino IDE application on your computer.
- Select your board: Choose ESP32 S3 from the board menu.
- Select COM port: Pick the correct COM port that your ESP32 S3 is connected to.
- Copy the code: Copy the provided code and paste it into a new Arduino IDE sketch.
- Upload the code: Click the Upload button to compile and upload code to your ESP32 S3.
- Test the valve: Observe the valve opening and closing every 5 seconds, and check water flow if connected.
- Pro Tip: Open the Serial Monitor at 115200 baud to see real-time valve status messages — this is the fastest way to confirm the relay is firing correctly before connecting the 12V supply.
Code Explanation
The ESP32 S3 code includes detailed line-by-line comments explaining each function. Read through the code comments to understand how valve control works!
Key code concepts:
- Pin Configuration: Sets up D7 as an output pin to control the relay
- digitalWrite() Function: Sends HIGH or LOW signals to open/close the valve
- delay() Function: Creates 5-second timing intervals between valve operations
- Serial Monitor: Prints valve status for debugging and monitoring
Serial Monitor Output
Open the Serial Monitor at 115200 baud rate to see the valve operation status:
Application and Project Ideas
The ESP32 S3's wireless capabilities and processing power make it an excellent controller for liquid automation systems across a wide range of domains.
- Smart Garden Irrigation: Automate watering schedules based on soil moisture or time intervals.
- Pet Water Dispenser: Create an automatic water bowl refill system for pets.
- Coffee Machine Automation: Control water flow for DIY espresso or drip coffee makers.
- Aquarium Auto-Fill System: Maintain constant water levels in fish tanks automatically.
- Homebrew Beer Dispenser: Build a controlled beer tap system with precise flow control.
- Car Wash System: Automate water spray timing for DIY vehicle cleaning stations.
- Hydroponics Nutrient Feeder: Control nutrient solution flow in soilless growing systems.
Video Tutorial
Watch the step-by-step video walkthrough for this ESP32 S3 project below.
...VIDEO /videos/placeholder.mp4
...VIDEO
Challenge Yourself
Once the basic valve cycle is working, these challenges will push your ESP32 S3 skills further and result in genuinely useful automation projects.
- Beginner: Add a push button to manually open/close the valve instead of relying on automatic timing.
- Beginner: Change the timing — make the valve open for 10 seconds and close for 3 seconds.
- Intermediate: Add a soil moisture sensor to open the valve only when soil is dry (smart irrigation).
- Intermediate: Use a potentiometer to adjust how long the valve stays open (variable flow duration).
- Advanced: Build a web server so you can control the valve remotely from your phone browser using the ESP32 S3's built-in Wi-Fi.
- Advanced: Create a scheduled watering system using the ESP32 S3 real-time clock (RTC) to trigger the valve at specific times each day.