Chirp is a great little soil moisture sensor. This is a library for the Chirp soil moisture sensor. It supports reading Capacitance (soil moisture) and soil temperature. You can get Chirp on Tindie https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/ And read documentation on github https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/

Dependents:   Test_Chirp

Files at this revision

API Documentation at this revision

Comitter:
Vlad
Date:
Thu Jan 12 22:01:43 2017 +0000
Child:
1:faff11456df9
Commit message:
Chirp Library. ; https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/; https://github.com/Miceuz/i2c-moisture-sensor; Supports reading soil moisture and temperature.

Changed in this revision

Chirp.cpp Show annotated file Show diff for this revision Revisions of this file
Chirp.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Chirp.cpp	Thu Jan 12 22:01:43 2017 +0000
@@ -0,0 +1,48 @@
+#include "mbed.h"
+#include "Chirp.h"
+
+//Chirp Docs are at https://github.com/Miceuz/i2c-moisture-sensor and https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/
+
+Chirp::Chirp(PinName sda, PinName scl, char slave_adr)
+    :i2c_p(new I2C(sda, scl)), i2c(*i2c_p), address(slave_adr)
+{
+
+}
+
+float Chirp::getCapacitance(){
+    short capacitance = 0;
+    char i2cData[2]= {0}; 
+    
+    char dataReg = 0; //Capacitance is stored in 2 bytes at address 0
+    i2c.write(address, &dataReg, 1); 
+    int success = i2c.read(address, i2cData, 2);
+    
+    if(success != 0)
+        return -1000000; 
+    else
+    {
+        //I2C bytes are in different byte order, write into short bytes 0 and 1 in reverse order!
+        *((char*)&capacitance) = i2cData[1];
+        *(((char*)(&capacitance)) + 1) = i2cData[0];
+        return capacitance;
+    }
+}
+
+float Chirp::getTemperature(){
+    short temperature = 0;
+    char i2cData[2]= {0}; 
+    
+    char dataReg = 5; //Temperature is stored in 2 bytes at address 5
+    i2c.write(address, &dataReg, 1); 
+    int success = i2c.read(address, i2cData, 2);
+    
+    if(success != 0)
+        return -1000000; 
+    else
+    {
+        *((char*)&temperature) = i2cData[1];
+        *(((char*)(&temperature)) + 1) = i2cData[0];
+        return (float) temperature / 10.0;
+    }
+}
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Chirp.h	Thu Jan 12 22:01:43 2017 +0000
@@ -0,0 +1,28 @@
+
+#ifndef MBED_CHIRP_H
+#define MBED_CHIRP_H
+
+#include "mbed.h"
+
+//#define _DEBUG
+#define DEFAULT_SLAVE_ADDRESS (0x20 << 1)
+
+
+class Chirp
+{
+    public:
+        Chirp(PinName sda, PinName sck, char slave_adr = DEFAULT_SLAVE_ADDRESS);
+        float getCapacitance(void);
+        float getTemperature(void);
+    
+    private:
+        
+        I2C         *i2c_p;
+        I2C         &i2c;
+        char        address;
+};
+
+
+
+
+#endif // MBED_CHIRP_H
\ No newline at end of file