I2C Soil Moisture Sensor (RETIRED)

$ 8.62$ 31.23

Capacitive soil moisture sensor interfaced via I2C. Additionaly provides ambient light and temperature readings.

Works with Arduino, Raspberry Pi, Particle Photon, and others. Made by WeMakethings.

Select waterproofing / ruggedness

  • Rugged
    Waterproof and ready to use. A 1m (3 feet) long cable is pre-soldered.
  • Simple
    The bare PCB. You’ll need to provide additional protection against water and moisture. Does not include a cable.
SKU: IC2SOIL1 Category:


Technical Data

  • Version 2.7.6
  • Supply voltage 3.3V – 5V
  • Current consumption: 1.1mA @ 5V, 0.7mA @ 3.3V when idle, 14mA @ 5V, 7.8mA @ 3.3V when taking a measurement. When constantly polling sensor at full speed, current consumption averages to 4.5mA @ 5V, 2.8mA @ 3.3V
  • Operating temperature 0°C – 85°C
  • Moisture reading drift with temperature – <10% over full temp range

Controller Support


This sensor is open source hardware




The sensor can be read via I2C protocol and provides these features:

  • Soil moisture sensing
  • Light sensing
  • Temperature sensing
  • Reset chip
  • I2C address change
  • Don’t forget to provide pullups for SCL and SDA lines
  • Default I2C address is 0x20 (hex)
  • To read soil moisture, read 2 bytes from register 0
  • To read light level, start measurement by writing 3 to the device I2C address, wait for 3 seconds, read 2 bytes from register 4
  • To read temperature, read 2 bytes from register 5
  • To change the I2C address of the sensor, write a new address (one byte [1..127]) to register 1; the new address will take effect after reset
  • To reset the sensor, write 6 to the device I2C address.
  • Do not hotplug the sensor into the active I2C bus – address change command has no protection and this might result in a random number set as an address of the sensor. Use I2C scan sketch to find out the address if the sensor stops responding with proper values.

More documentation and example code is available on github.

How to interpret the readings

Both light and moisture sensors give relative values. Meaning, more moisture will give you higher reading, more light, lower reading.

Moisture is somewhat linear. All sensors are tested before shipping and they give about 290 – 310 in free air at 5V supply.

The light sensor gives 65535 in a dark room away form desk lamp. When it’s dark, it takes longer to measure light, reading the light register while measurement is in progress will return the previous reading. Be aware, light sensor is pretty noisy and it’s linearity is not tested.

Temperature is measured by the thermistor on the body of the sensor. Calculated absolute measurement accuracy is better than 2%. The returned value is in tenths of degrees Celsius. I.e. value 252 would mean 25.2°C.

Note Upon reading the moisture or temperature value, a value form the previous read command is returned and the new measurement is started. If you do rare measurements and want to act instantly, do two consecutive readings to get the most up to date data. Also you can read GET_BUSY register via i2c – it will indicate when the measurement is done. Basically the process goes like this: read from GET_CAPACITANCE, discard results, then read from GET_BUSY until you get ‘0’ as an answer, then read form GET_CAPACITANCE again – the returned value is the soil moisture NOW.

Waterproofing the simple version

The sensor with simple waterproofing comes coated with PRF202 – a moisture resistant varnish for electronics. However for continuous use you’ll need to provide additional protection against water and moisture. Some suggestions on making the sensor more robust after attaching the cable:

  • Polyester or epoxy resin – this method is the most bullet proof as the resin is totally resistant to the water. On the par side, note that sensitivity of the sensor will decrease depending on how thick the layer you are going to apply. Also applying the resin in uniform manner presents some challenge.
  • PlastiDip – some people have tried this method – easy to apply by spraying and not a lot of loss of sensitivity.
  • Rubber balloon – yes, just roll a long balloon over the sensor 🙂
  • Be sure to coat the whole thing – the sensor part, the electronics and the cable connection itself so no bare copper or solder is accessible to the water.

Rugged version

The rugged version is waterproof out of the box, your sensor is ready to use. The sensor is coated in epoxy resin, cured and additionally protected by adhesive-lined heat shrink. The 1m (3 feet) long cable is pre-soldered.


Black cable:

  • RED – VCC
  • BLUE – GND
  • bare wire (shielding) – GND

White cable

  • RED – VCC
  • bare wire (shielding) – GND

Additional information

Weight 0.05 kg
Dimensions 20 × 3 × 1 cm


Open Source



Simple, Rugged