DriversRecommendedOutdated drivers can make a good PC feel brokenScan driver issues before chasing fixes manually.Scan NowFall ResetAmazon USFall reset deals: check better picks before checkoutAmazon US: today's deals, useful picks and quick comparisons.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
Skip to content
Blog

ESP32 Plant Monitoring with the Arduino IoT Cloud Remote App

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Yes—you can use an ESP32 to monitor soil and room conditions in Arduino IoT Cloud, then view those readings from the Arduino IoT Cloud Remote app. Build the dashboard in a browser; the app displays and controls it. Start with monitoring, then add irrigation only if you also provide local pump limits, a low-water interlock and safe low-voltage wiring.

This guide covers a generic ESP32 as well as Arduino’s supported Nano ESP32. Generic ESP32 boards are supported as third-party devices, but may need manual setup. The flow below is for a Wi-Fi project; both the board and phone need internet access for remote viewing or control.

What the project does

Sensors connect to the ESP32, which reads them and sends values over Wi-Fi to an Arduino Cloud Thing. A browser dashboard and the Remote app display the values; optional writable cloud variables let you send commands back to the board.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Sensors → ESP32 → Wi-Fi → Arduino Cloud Thing and variables
                                  ↓
                      Browser dashboard / Remote app
                                  ↓ optional command
                       ESP32 output → pump driver → pump

Arduino Cloud brings device setup, Cloud Variables, dashboards, monitoring and related features into one service. See the Arduino Cloud documentation for its current capabilities.

#1 Best Overall
DIYables Capacitive Soil Moisture Sensor, TLC555I Chip, for Arduino, ESP32, ESP8266, Raspberry Pi, 2 Pieces
  • Accurate Moisture Monitoring – DIYables capacitive soil moisture sensor provides precise, real-time readings without corrosion, perfect for long-term gardening and automation projects.
  • TLC555I Industrial Chip – Features the reliable TLC555I timer chip for stable output and enhanced performance, ideal for Arduino and other microcontroller platforms.
  • Wide Compatibility – Works with Arduino, ESP32, ESP8266, Raspberry Pi, and other 3.3V/5V boards, making it ideal for smart agriculture, plant watering, and greenhouse projects.
  • Non-Corrosive Design – Unlike resistive sensors, this capacitive type prevents oxidation and rust, increasing durability and lifespan even in moist environments.
  • Value Pack of 2 Sensors – Includes 2 capacitive soil moisture sensors, perfect for multi-zone monitoring or backup use in DIY electronics and smart farming systems.

Choose one of three operating modes:

  • Monitoring only: Report soil moisture and, if fitted, temperature, humidity, light and reservoir level.
  • Manual remote watering: A dashboard control requests pump operation. Firmware must still enforce safety interlocks.
  • Automatic watering: The ESP32 makes watering decisions locally from calibrated readings. The cloud is for monitoring and an optional override, not the only control path.

Arduino’s plant-watering use case likewise combines a moisture sensor, relay and pump for automatic watering and remote activation. The official Plant Watering Kit page is marked End of Life; treat it as a design reference, not a currently available kit recommendation.

Choose the board and parts

For a first build, make a monitoring-only version work before connecting a pump. This keeps water and motor-current problems out of the initial Cloud setup.

Build Parts Notes
Minimum monitor ESP32 development board, capacitive soil-moisture sensor, jumper wires and USB supply Enough to send a calibrated moisture estimate to the cloud.
Expanded monitor Minimum parts plus BME280 or SHT31 temperature/humidity sensor, BH1750 light sensor, and a reservoir float switch Use the sensor datasheets and the exact board pinout to select connections.
Irrigation add-on Low-voltage DC pump, separate suitable supply, 3.3 V-compatible relay or MOSFET driver, tubing, reservoir, float switch and physical cutoff Consider a flow sensor and an enclosure that keeps electronics apart from water.

A generic ESP32-WROOM board is widely available and can be inexpensive, but its pinout and board quality vary and Cloud setup is usually manual. The Arduino Nano ESP32 is an official Arduino ESP32 board listed as supported by Arduino Cloud. Arduino also lists ESP32-based third-party devices; support does not mean every clone is automatically provisioned. Check the current supported-device information before choosing a board.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Wire sensors first—and keep the pump separate

Do not rely on a generic ESP32 pin diagram: pin labels, ADC-capable pins and board constraints differ. Choose an ADC-capable input documented for your exact board for the soil sensor’s analog output. I²C sensors connect to that board’s documented SDA and SCL pins; a float switch connects to a digital input with an appropriate pull-up or pull-down. Check sensor output voltage against the ESP32 input limits before connecting it.

Device Logical connection
Soil-moisture sensor Analog output to a documented ESP32 ADC input; power according to the sensor specifications
I²C environmental or light sensor SDA and SCL to the board’s documented I²C pins, plus suitable power and ground
Reservoir float switch Digital input with the correct pull-up or pull-down arrangement for the switch
Relay or MOSFET driver Driver input to a suitable GPIO; pump power goes through the driver, not the GPIO

Never power a pump directly from an ESP32 GPIO. Use a separate low-voltage supply sized for the pump’s operating and startup current, a driver suitable for that current, and a fuse or other appropriate current protection. Check a relay board’s input logic threshold, coil supply, contact rating and whether it is active-low; “5 V relay” alone does not confirm compatibility with 3.3 V ESP32 logic. For a MOSFET-based DC motor circuit, provide flyback protection unless the driver already includes it. Share grounds where required by the chosen low-voltage driver circuit. Keep exposed electronics away from water, use a physical cutoff, and avoid mains-voltage pumps in a beginner build.

Set up the Cloud device and Thing

  1. Create or sign in to an Arduino Cloud account and open the Devices area.
  2. Add the board you actually have. For a generic ESP32, use the third-party ESP32 setup path if offered for that device. An official Arduino board may have a more integrated setup flow.
  3. Create a Thing and associate the device with it.
  4. Add Cloud Variables with the types and permissions appropriate to your project.
  5. Open the generated sketch and its associated properties file. Follow the current Cloud Editor or Arduino IDE instructions for your board and enter Wi-Fi credentials using the supported secrets mechanism.
  6. Compile and upload the basic generated sketch before adding sensor or pump logic. Confirm the device connects to Arduino Cloud, then make changes incrementally.

Arduino Cloud documentation separates setup guidance for ESP32/ESP8266, Things, variables, dashboards and other features; consult its current documentation when labels or provisioning screens differ. Use the current board support package and select the actual board. There is no single reliable pin or package-version recipe for every ESP32 variant. The ArduinoIoTCloud library documentation currently shows version 2.9.3, but that observation is not a requirement to pin every project to that version.

Choose useful Cloud Variables

Variable Suggested type Permission Use
soilMoisture Integer or float Read-only Calibrated estimate, usually displayed as a percentage
temperature, humidity Float Read-only Environmental readings, when those sensors are installed
lightLevel Integer or float Read-only Light measurement, if fitted
reservoirLow Boolean Read-only Indicates the low-water interlock
pumpCommand Boolean Read/write Optional manual request from the dashboard
autoMode Boolean Read/write Enables or disables local automatic watering
pumpState Boolean Read-only Reports the actual output state
lastWatered Cloud-supported type Read-only Optional status marker; choose a type supported by the Cloud interface

Use explicit units in dashboard labels. A value named “moisture percent” is a calibrated proxy for this probe and soil, not a universal measurement of volumetric water content. Cloud-generated properties and connection code normally appear in the sketch workflow, including thingProperties.h; use the generated definitions rather than inventing a separate variable setup. See the ArduinoIoTCloud library documentation.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read and calibrate the soil sensor

First print or publish the raw ADC readings and compare them in air or dry soil with readings in the actual pot after watering thoroughly. Do not assume that “wet” always means a lower number: sensor circuits vary. Record the dry and wet endpoints, and preferably several intermediate points. Recalibrate if you change the probe, soil mix, pot or placement.

Rank #3
DIYables Capacitive Soil Moisture Sensor, TLC555I Chip, for Arduino, ESP32, ESP8266, Raspberry Pi, 4 Pieces
  • 4 Pieces of Capacitive Soil Moisture Sensor for Arduino, ESP32, ESP8266, Raspberry Pi
  • It is made of a corrosion resistant material, which gives it a long lifespan
  • Timer Chip: TLC555I Chip
  • Operating voltage range of 3.3V ~ 5.5V
  • Tutorials for Arduino, ESP32, ESP8266, Raspberry Pi, Raspberry Pi, and MicroPython are provided => Search for DIYables Soil Moisture Sensor
int raw = analogRead(SOIL_PIN);

// Example values only: measure your sensor in your actual pot.
const int dryValue = 3000;
const int wetValue = 1300;

int moisturePercent = map(raw, dryValue, wetValue, 0, 100);
moisturePercent = constrain(moisturePercent, 0, 100);

This example assumes the sensor reads higher when dry and lower when wet; reverse the endpoints if your measurements show the opposite. A percentage is only meaningful relative to the calibration points. Resistive probes can corrode over time; capacitive probes are generally a more suitable choice for longer-term use but still require calibration. Drift can also result from soil compaction, fertilizer or minerals, probe position, temperature, or electrical noise.

Build the dashboard and open it on your phone

Create the dashboard in a browser and associate widgets with the Cloud Variables. A useful first layout is:

  • Gauge or value card for soilMoisture, labeled as a calibrated estimate.
  • Value cards for temperature and humidity if those sensors are installed.
  • Chart for moisture history, if the account’s plan and settings provide the needed history.
  • Boolean indicator for reservoirLow and a read-only indicator for pumpState.
  • Switch for autoMode and, only after safety checks are implemented, a manual pump control bound to pumpCommand.
  • Connection or last-update status where available, so a stale reading is not mistaken for a current one.

Arduino describes configurable dashboards and widgets, historical data and remote access in its dashboard feature information and Cloud overview. History, retention and OTA availability depend on the current plan; do not assume unlimited history or that every account includes every feature. Check the current plan details before designing around them.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Install the Arduino IoT Cloud Remote app for Android or iOS, sign in to the same account and open the dashboard. The app is a companion for dashboards—not a custom mobile-app builder—and dashboard creation remains in the browser. Arduino says the app supports remote monitoring, historical-data viewing and control of remotely writable values. The app is free to download and use; some background “Phone as Device” features require a Maker plan. See the Remote app page for current details.

Rank #4
AITRIP 10 Pack Capacitive Soil Moisture Sensor Corrosion Resistant for Arduino Moisture Detection Garden Watering DIY Electronic for Arduino and Raspberry Pi (10PCS)
  • This capacitive soil moisture sensor is distinguished from most resistive sensors on the market and uses capacitive sensing to detect soil moisture. The problem that the resistance sensor is easily corroded is avoided, and its working life is greatly extended.
  • The sensor has a built-in voltage regulator chip that supports a 3.3-5.5V working environment, which means it works even on a 3.3-5.5V Arduino control board. A miniature PC such as the Raspberry Pi only needs an external ADC (analog to digital signal) conversion module to work.
  • With an external screen and a motherboard, you can talk to your plants! See if it is thirsty and you don't need more water to moisten.Garden plants, Moisture detection, Intelligent agriculture
  • Interface: PH2.54-3P, Size: 98 x 23mm (LxW)
  • Package Includes: 10pcs Capacitive Soil Moisture Sensor

“Remote” means internet-mediated access: the phone and ESP32 need internet connectivity and the cloud service must be available. Updates are cloud-synchronized, not a safety-critical real-time control channel. If the phone or Wi-Fi goes offline, locally implemented automatic control should remain conservative and safe.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Add pump control only after monitoring works

Use a non-blocking loop so sensor reads, Cloud updates and safety checks can proceed without long pauses. The following is a control pattern, not a complete board-specific sketch; it assumes Cloud variables and functions have already been configured, a valid sensor reading is available, and startPump() and stopPump() explicitly handle the driver’s ON/OFF polarity.

const unsigned long SENSOR_INTERVAL = 30000;
const unsigned long MAX_WATER_TIME = 10000;

unsigned long lastSensorRead = 0;
unsigned long pumpStartedAt = 0;
bool pumpState = false;

const int DRY_THRESHOLD = 30;
const int STOP_THRESHOLD = 45;

void loop() {
  ArduinoCloud.update();
  unsigned long now = millis();

  if (now - lastSensorRead >= SENSOR_INTERVAL) {
    lastSensorRead = now;
    readSensors();
    updateCloudValues();
  }

  bool sensorValid = soilReadingIsValid();

  if (autoMode && sensorValid && !reservoirLow &&
      !pumpState && soilMoisture < DRY_THRESHOLD) {
    startPump();
  }

  if (pumpState &&
      (!sensorValid || soilMoisture >= STOP_THRESHOLD ||
       reservoirLow || now - pumpStartedAt >= MAX_WATER_TIME)) {
    stopPump();
  }
}

The gap between the dry-start and stop thresholds is hysteresis: it helps prevent rapid on/off cycling when readings fluctuate near one threshold. The example values and durations are starting placeholders, not recommendations for every plant. Determine thresholds and pump run time from your plant, soil, pot drainage and pump flow. Consider a maximum daily watering limit as another independent safeguard.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

At boot, set the pump output to off before enabling operation. Treat a disconnected or implausible sensor as invalid and do not start watering on its reading. A remote command should also be rejected when the tank is low, a sensor fault exists, a run-time or daily limit has been reached, or the system is locked out. A software moisture reading cannot detect an empty reservoir: use a float or water-level sensor as a hard interlock. If possible, add a flow sensor or leak detection, but do not treat either as a replacement for safe wiring and a physical cutoff.

Best Value
HiLetgo 5pcs LM393 3.3V-5V Soil Moisture Detect Sensor Soil Moisture Sensor Soil Hygrometer Detection for Arduino Automatic Watering System Robot Smart car
  • This is a simple moisture sensor can be used to detect soil moisture, when the soil water shortage, the module outputs a high level, whereas the output low.
  • Use this sensor to make an automatic watering device that will keep your garden of plants unmanaged.
  • Module dual output mode, digital output is simple, more accurate analog output.
  • Sensitivity adjustable (Figure blue digital potentiometer adjustment)
  • Comparator using LM393 chip, stable job

Some relays are active-low, so a HIGH output may mean OFF. Define ON and OFF levels explicitly for the actual module and test them without a pump attached. Local automation and stop limits must work even when Wi-Fi or Cloud is unavailable. Do not resume a stale pump command after reconnect or reboot without deliberately validating it.

Test failure cases before leaving it unattended

Keep the pump disconnected or the driver safely unloaded while checking basic logic. Then test the complete low-voltage setup under supervision:

  1. Compare readings in dry and watered soil; confirm the percentage direction and calibration.
  2. Unplug the soil sensor and verify the fault prevents watering.
  3. Lower the reservoir level or operate the float switch; confirm it blocks or stops the pump.
  4. Test the maximum run timer and daily limit.
  5. Test the relay or MOSFET’s actual ON/OFF behavior and active-low polarity before connecting the pump.
  6. Disconnect Wi-Fi or interrupt Cloud access; confirm local sampling continues and the pump remains governed by local limits.
  7. Reboot during a watering cycle; verify the pump starts off and does not repeat an old command.
  8. Try a manual command while automatic mode is enabled; verify the defined priority and interlocks.
  9. Check that a disconnected pump, clogged tube or empty reservoir is not mistaken for successful watering.

Soil moisture alone does not establish plant health or a universal watering schedule. Plant species, soil, pot size, drainage, sensor depth and root condition all matter; observe the plant and adjust rather than treating a displayed percentage as a guarantee.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Troubleshoot by symptom

  • ESP32 stays offline: Check that the network provides 2.4 GHz Wi-Fi, credentials are correct, and the network does not require an unsupported captive portal or enterprise login. Check USB/power stability during Wi-Fi transmission, board selection, third-party-device setup and the Thing association.
  • Dashboard is blank or values do not change: Confirm the device is connected, the Cloud Variables are associated with the correct Thing, the firmware updates them, and widgets are bound to the intended variables. Check that the sensor is actually powered and that its pin matches the board-specific wiring.
  • Moisture moves the wrong way: Record raw readings at dry and wet endpoints and reverse the mapping if necessary. Do not infer wetness from a generic example.
  • Pump does not start: Check the separate supply, driver input compatibility, relay polarity, pump wiring and interlocks. Never bypass an empty-tank or sensor-fault lockout to force operation.
  • Pump will not stop or keeps cycling: Verify the output polarity and stop conditions, including maximum duration, sensor validity, low reservoir and hysteresis. Test the fail-off state with the pump disconnected first.
  • Remote commands are delayed: Confirm both devices have internet and the ESP32 is maintaining its Cloud connection. Cloud synchronization is not a guaranteed instant control channel.
  • It waters again after a reboot: Ensure startup initializes the pump off and stale remote commands are not automatically replayed. Require a fresh, valid command or a new local decision.

When Arduino Cloud is—and is not—the right fit

Arduino Cloud suits a small maker project when you want a browser-built dashboard, phone access, generated connectivity workflow and cloud charts or OTA features where your plan supports them. It depends on a hosted service and account. If offline-first operation, local data ownership or broader home automation matters more, Home Assistant with MQTT is a common alternative, with more infrastructure and setup. Blynk, ThingSpeak and Adafruit IO are other platforms, but their firmware, dashboard model, limits and offline behavior are not interchangeable with Arduino Cloud. Choose based on how the system should behave when the internet is down.

Once the basics are reliable, possible additions include per-pot calibration, flow measurement, leak detection, multiple plants, a local display, notifications or OTA updates if available on your plan. Add features only after the pump’s electrical and local shutdown protections have been proven.

Quick Recap

Bestseller No. 2
Songhe Capacitive Soil Moisture Sensor Module Corrosion Resistant Moisture Detection Garden Watering for Arduino DIY 3.3~5.5V 5pcs
Songhe Capacitive Soil Moisture Sensor Module Corrosion Resistant Moisture Detection Garden Watering for Arduino DIY 3.3~5.5V 5pcs
Chip is TL555; Operating Voltage: 3.3 ~ 5.5 VDC; Output Voltage: 0 ~ 3.0 VDC; PH:2.54MM
$12.99
Bestseller No. 3
DIYables Capacitive Soil Moisture Sensor, TLC555I Chip, for Arduino, ESP32, ESP8266, Raspberry Pi, 4 Pieces
DIYables Capacitive Soil Moisture Sensor, TLC555I Chip, for Arduino, ESP32, ESP8266, Raspberry Pi, 4 Pieces
4 Pieces of Capacitive Soil Moisture Sensor for Arduino, ESP32, ESP8266, Raspberry Pi; It is made of a corrosion resistant material, which gives it a long lifespan
$9.90
Bestseller No. 4
Bestseller No. 5
HiLetgo 5pcs LM393 3.3V-5V Soil Moisture Detect Sensor Soil Moisture Sensor Soil Hygrometer Detection for Arduino Automatic Watering System Robot Smart car
HiLetgo 5pcs LM393 3.3V-5V Soil Moisture Detect Sensor Soil Moisture Sensor Soil Hygrometer Detection for Arduino Automatic Watering System Robot Smart car
Module dual output mode, digital output is simple, more accurate analog output.; Sensitivity adjustable (Figure blue digital potentiometer adjustment)
$7.89

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.