Information

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. I test all sensors before shipping and they give about 290 -
310 in free air at 5V supply.
I didn't measure linearity of the light sensor, it 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.
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.
Controller support
The sensor works fine with Arduino and RaspberryPi. Examples are available
on github page.
Arduino library: https://github.com/Apollon77/I2CSoilMoistureSensor
Raspberry Pi library: https://github.com/ageir/chirp-rpi
Particle proton library: https://github.com/VintageGeek/I2CSoilMoistureSensor
Micropython library: https://github.com/scopelemanuele/pyChirpLib
Thanks guys for writing this software, open source yay!
Note for ESP8266 based systems
In some cases the default ESP8266 Arduino I2C library has the clock stretching timeout
set too low. If you experience intermittent communication, add this to your
code: Wire.setClockStretchLimit(4000)
Waterproofing