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/
Revision 0:6164b94deb27, committed 2017-01-12
- 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