Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Marco TeddeSilvia CorpinoPaolo MurruNils Gerke
Published

Soil Moisture Monitoring with Agrumino and Analog Sensor

Soil Moisture Monitoring by using Agrumino, an I2C ADC and an Additional Soil Moisture Sensors

IntermediateProtip1,539
Soil Moisture Monitoring with Agrumino and Analog Sensor

Things used in this project

Hardware components

Agrumino
Lifely Agrumino
×1
Jumper wires (generic)
Jumper wires (generic)
×1
ADS1115 Convertitore PGA a 12 bit da 16 bit con amplificatore di guadagno programmabile Scheda di sviluppo del convertitore ADC ad alta precisione compatibile Raspberry Pi
×1
AZDelivery Sensore di Misurazione Umidità del Suolo Igrometro Modulo Capacitivo V1.2
×1

Software apps and online services

ThingSpeak API
ThingSpeak API
Arduino IDE
Arduino IDE

Story

Read more

Code

Agrumino Code

Arduino
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
#include <ESP8266WiFi.h>
#include <Agrumino.h>
#define SLEEP_TIME_SEC 2

#define SSID_NAME "Home&Life SuperWiFi-54EE"///Insert your wifi name"
#define SSID_PASSWORD "JHHGJTLEQKKJR8CK" ///Insert your wifi password"
#define CONNECTION_ATTEMPS 100 ///Maximum number of connection attempt
#define BAUD_RATE 115200 ///Serial baud rate
#define MIN_TO_MS (1000000 * 60)


const int dry = 15400; // value for dry sensor
const int wet = 6200; // value for wet sensor

int agruminoId = ESP.getChipId();
const char* host = "api.thingspeak.com";
const char* writeAPIKey = "BAL31NO9BFRICEF1"; ////API key of your channel
unsigned int SLEEP_TIME_MIN = 20; /*only minute sleep, max 60 minute */
int wifiCount = 0;

Agrumino agrumino;
Adafruit_ADS1115 ads;

void blinkLedConnect() {
  agrumino.turnLedOn();
  delay(200);
  agrumino.turnLedOff();
  delay(200);
  agrumino.turnLedOn();
  delay(200);
  agrumino.turnLedOff();
  delay(200);
  agrumino.turnLedOn();
  delay(200);
  agrumino.turnLedOff();
}

void blinkLed() {
  agrumino.turnLedOn();
  delay(200);
  agrumino.turnLedOff();
}

void setup() {
  Serial.begin(115200);
  agrumino.setup();
  agrumino.turnBoardOn();
  wifiSetup();
}

void wifiSetup() {

  Serial.print("Connecting to ");
  Serial.println(SSID_NAME);
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID_NAME, SSID_PASSWORD);
  
  while ((WiFi.status() != WL_CONNECTED) && (wifiCount < CONNECTION_ATTEMPS)){
    delay(500);
    wifiCount++;
    Serial.print(".");
  }

  if (wifiCount >= CONNECTION_ATTEMPS){
    Serial.println("Failed to connect,...sleep....");
    agrumino.turnBoardOff(); // Turn Board off before sleep to save battery :)
    ESP.deepSleep(MIN_TO_MS * SLEEP_TIME_MIN);
  }
  else if (WiFi.status() == WL_CONNECTED) {
    Serial.println("I'm Connected with:" );
    Serial.println(SSID_NAME);
    delay(100);
  }
}




void loop() {

  if (WiFi.status() == WL_CONNECTED){
    blinkLedConnect();
  }
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    return;
  }

  Serial.println("#########################\n");
  
  agrumino.turnBoardOn();
  ads.begin(0x49);

  boolean isAttachedToUSB = agrumino.isAttachedToUSB();
  boolean isBatteryCharging = agrumino.isBatteryCharging();
  boolean isButtonPressed = agrumino.isButtonPressed();
  float temperature = agrumino.readTempC();
  unsigned int soilMoisture = agrumino.readSoil();
  float illuminance = agrumino.readLux();
  float batteryVoltage = agrumino.readBatteryVoltage();
  unsigned int batteryLevel = agrumino.readBatteryLevel();
  int agruminoId = ESP.getChipId();

  Serial.println("");
  Serial.println("isAttachedToUSB:   " + String(isAttachedToUSB));
  Serial.println("isBatteryCharging: " + String(isBatteryCharging));
  Serial.println("isButtonPressed:   " + String(isButtonPressed));
  Serial.println("temperature:       " + String(temperature) + "C");
  Serial.println("soilMoisture_Agrumino:      " + String(soilMoisture) + "%");
  Serial.println("illuminance :      " + String(illuminance) + " lux");
  Serial.println("batteryVoltage :   " + String(batteryVoltage) + " V");
  Serial.println("batteryLevel :     " + String(batteryLevel) + "%");
  Serial.println("");

  int16_t adc1;
  float volts1;
 
  adc1 = ads.readADC_SingleEnded(1);
  volts1 = ads.computeVolts(adc1);

  Serial.println("-----------------------------------------------------------");
  Serial.print("AIN1: "); Serial.print(adc1); Serial.print("  "); Serial.print(volts1); Serial.println("V");
  
  int percentageHumididy = map(adc1, wet, dry, 100, 0);  
  Serial.print(percentageHumididy);
  Serial.println("%");

  String url = "/update?key=";
  url += writeAPIKey;
  url += "&field1=";
  url += String(temperature);
  url += "&field2=";
  url += String(percentageHumididy);//umidit del terreno rilevata tramite sensore aggiuntivo
  url += "&field3=";
  url += String(soilMoisture);
  url += "&field4=";
  url += String(illuminance);
  url += "&field5=";
  url += String(batteryVoltage);
  url += "&field6=";
  url += String(batteryLevel);
  url += "&field7=";
  url += String(agruminoId);
  url += "\r\n";

  // Request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
  "Host: " + host + "\r\n" +
  "Connection: close\r\n\r\n");

  blinkLed();
  agrumino.turnBoardOff(); // Board off before delay/sleep to save battery :)
  Serial.println("sleep mode enabled.....bye");
  ESP.deepSleep(MIN_TO_MS * SLEEP_TIME_MIN);

}

Credits

Marco Tedde
1 project • 2 followers
Electronics Engineer
Contact
Silvia Corpino
1 project • 3 followers
Contact
Paolo Murru
1 project • 2 followers
Contact
Nils Gerke
1 project • 0 followers
Contact

Comments

Please log in or sign up to comment.