IOT Soil Moisture

Introduction: IOT Soil Moisture

About: Professional by day and Hobbyist by weekend

Soil Moisture is the amount of moisture in the soil or to simply put the amount of wetness or dampness in the soil.

This is an important parameter when you want garden automation as this parameter lets your system know how dry is the soil and does the plant need watering.

Wikipedia link:

As described in the link soil moisture can be quantified by 3 methods:

  • Resistive Method:
  • Galvanic Cell(aka Battery Method)
  • FDR (aka Capacitive method)
  • TDR(aka Charge & Discharge of dielectric)

We will be focusing on Resistive Method as its the best and easy method with reliable and repeatable results...

Since we are going to make this a little more fun we will be posting the results on Internet so that we can keep track of our soil moisture 24 *7 IOT-ed the project :)

You can look at my dashboard at

*Soil Moisture is a function of Soil temperature as well this Instructable doesn't include soil temperature

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: List of Materials:

Again this is not a expensive circuit the total cost was approx 7$ to 9$ excluding power bank cost

  • 1pc -ESP8266 12F module This had a better ADC reliability as shown in the picture below from Ebay
  • 2pcs -Screw 60mm long M3 size again from EBay
  • 1pcs -1K resistor 1/4watt
  • 2pcs -Connecting wires

Step 2: Assembly

The concept here is to push the screw into the soil at a distance which is lesser than length of the screw, mine were 20 to 30 mm apart and then we can simply measure the resistance between them. when my measurements were taken they varied from 16K to 26 K dry and wet conditions thus giving us a relative approximation of moisture in the soil.

To simply measure resistance i used ESP8266 to read a simple voltage divider circuit from ADC pin Caution it can only handle maximum 1V

This was fairly easy for me as my module already had a LDR connected to the ADC pin all i had to do was simply de-solder the LDR and solder the soil moisture posts.this is shown in the given circuit. from the voltage divider circuit we can easily see that the voltage never exceeds 1v with the given divider. Thus making it easy to read resistance between the probes.

Just power the ESP using the power bank and now its portable ;)

Note: We are not compensating soil temperature in this Instructable


void setup() {
// put your setup code here, to run once:

pinMode(A0, INPUT);


void loop() { // put your main code here, to run repeatedly:




This should give you ADC counts which shall map to Soil Moisture content(My research says:Small number is dry soil and Bigger number means wet soil)

Step 3: Spicing Up With IOT :)

Since now we are able to read the moisture content of the soil and display it on the computer through serial port this doesn't help my IOT Garden water pump to know when to water the plants and when to stop for this part we need to publish this information somewhere so that the pump can read from it.

This is where comes into picture the concept is simple the pump reads data from this Soil Moisture Thing and takes decision when to start stop.

But doing so means posting data on internet which means its too much power hungry for this device to run on battery for the same we sleep the device for 1 min and take reading and post on internet.

Following code helps ESP to do the same. we will also be using to publish visual results.

You can look at my board here:

Be the First to Share


    • Indoor Plants Challenge

      Indoor Plants Challenge
    • Trash to Treasure Contest

      Trash to Treasure Contest
    • Sculpting Challenge

      Sculpting Challenge