control multiple IFTTT based on Moisture level.
IOT with nature, this is one
of my favorite subject. Connect the Internet of things with nature. In this
project, we are making moisture sensor integrated with IFTTT with multiple
events triggers.
As I said multiple
triggers mean, it sends a moisture level at every 30 minutes (editable mode) to
google spreadsheet (Trigger 1) and if a moisture level goes below a critical
level then sends me an Email (Trigger 2).
At any time, you can
log in to your Google spreadsheet and check current moisture level and if you
miss, then your plant will send you an email at critical condition (below
certain Moisture level). In Arduino Code, you can change the email notification
counter to make an email notification per day (editable mode).
Basic Feature,
1) Active Power sleep mode to reduce battery consumption.
2) Multiple IFTTT events trigger.
3) EPROM enable counter to send Email notification at 12 hours.
A Moisture sensor updated
google spreadsheet at every 30 minutes but you don’t want an email at every 30
minutes until you water back your plant. It will start filling up your Inbox. So,
to avoid such issues, we have EEPROM enable counter to send an email at every
24 counts.
Moisture level at every 30-minute
X 24 counters = 12 Hours,
e.g first email I will get in the morning 9AM
when I’m at home and send another email at 9PM when again I’m back to home from
work.
Basics you need to know,
1) NodeMCU with Arduino IDE
2) Hardware
a.
Moisture sensor
b.
2N2222 transistor with 100E
resistor.
c.
Battery
d.
Breadboard
To start with IFTTT,
Create a free IFTTT account.
Go the official site: https://ifttt.com/ and click the “Sign Up” button in top
of the page.
Once you sign
up…
In the top
raw, select the My applets or create one.
Click on "this" to make trigger activity.
In our case
we want to use a ESP-8266 with Moisture sensor.
Select
maker webhooks, it will allow you to make the IOT hardware integration.
I created an event name "Moisture_sensor" written in the box.
Do remember this name you
will need this in future for the testing.
So once you read moisture
data (On NodeMCU) then what…!!!
It has multiple action
services, which will allow you to connect through possible services with simple
selection. In our-case
1) send Moisture_sensor on the Google spread
sheet. (You need to download an app for notification service)
2) send an Email at time of critical water level condition.
In this Notification dialog, please add a message
you want to see.
Also please add ingredient call "value1",
"value2",
"Value 1" stands for Moisture_sensor data – it will come in level
from 0-1024
below 100 means critical level... (defined in Code)
It will save data on the spread sheet name of IFTTT_maker_webhooks_Event
Compete with the action by a click "create action".
Please follow same process
for Mail Trigger.
Hardware design:
Basic connection with NodeMCU.
1) Connect reset pin with D0,
It will reset NodMCU after deepsleep timer.
2) Connect Moisture sensor with
2N2222 to make a transistor as switch function.
It will disable moisture sensor when device is in sleep
mode, connect base pin to D5 ( Arduino Pin number 14)
3) Analog reading connection
with A0 pin, In Arduino it is A0 number.
Code:
Do not forget to add SSID, Password, Apikey and EEPROM library.
#include <ESP8266WiFi.h>
#include <EEPROM.h>
const char* ssid = "WIFI network"
const char* password = "WIFI password"
const char* host = "maker.ifttt.com";
const char* apiKey = "IFTTT Key";
const int sleepTimeS = 1800;
// If timer is set for 30 minutes (60*30), than you need to change counter number - i for Mail notification.
volatile int flag = false;
int address = 120; // EEPROM storage address, It can be anything in-between 0-511
float Final;
int sensorPin = A0; // Your moisture sensor connection
int pin = 14; // Enable your moisture sensor at time of requirement to reduce power consumption
int sensorValue;
int i;
void setup()
{
Serial.begin(9600);
EEPROM.begin(512);
delay(10);
Serial.println("Moisture sensor interface with IFTTT");
i = EEPROM.read(address); // Store counter to send a notification at 12 hours
pinMode(pin, OUTPUT);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
digitalWrite(pin, HIGH); // Enable sensor with 2N2222 transistor
delay(20);
sensorValue = analogRead(sensorPin);
Final= 1024 - sensorValue;
Serial.print("sensorValue");
Serial.print(sensorValue);
flag = true;
}
void loop() {
if(flag)
{
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
String url1 = "/trigger/Moisture_sensor/with/key/"; // Send a data to google spread sheet.
url1 += apiKey;
Serial.print("Requesting URL: ");
Serial.println(url1);
client.print(String("POST ") + url1 + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" +
"Content-Length: 13\r\n\r\n" + "value1=" + Final + "\r\n" );
if (Final <= 150 && i>=24)
//24 number is to get an Email at every 12 hours + Moisture level is below desired condition,
// if you sleep timer sends you an notification at 30mins x 24 = 12 hours.
{
String url = "/trigger/Moisture_mail/with/key/"; // to trigger Email notification at 12 hours.
url += apiKey;
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("POST ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" +
"Content-Length: 13\r\n\r\n" + "value1=" + Final + "\r\n" );
i = 0;
}
else
{
delay(20);
flag = false;
digitalWrite(pin, LOW);
i++;
}
//Serial.println("New strored I");
// Serial.println(i);
EEPROM.write(address, i);
EEPROM.commit();
}
ESP.deepSleep(sleepTimeS * 1000000); //deepsleep defination
}
------------------------------------------------------------------------------------------------------------------------------------------------
Tested PCBs with Code:
Google spread sheet logs,
Sir, I only want to upload a code using a soil moisture but, i am getting a 14 rows 1023 and after few minutes 14 rows 0 value and the time is not change. So, What should i do. Please help me out. Can you send a code only using soil moisture to google sheets for 15 minutes
ReplyDeletePlease reply fast
DeleteHi Nilesh, Please check your moisture sensor first, It seems like moisture sensor is not sending data to main code. Check connection first. and let me know if you still have any issues.
Delete