Hey guys, we are back with another interesting project on IoT. In this article, we are going to discuss the making of smart farming using IoT project. We are using a server to store the sensor data. The code and circuit diagram both are provided below. You can also read the full working of this project with well-explained code on our website. We are using some soil moisture sensors to detect the water content in the soil and a DHT11 temperature-humidity sensor which can monitor the weather conditions in the fields.
This smart farming project is in trending nowadays because it can reduce the manpower in farming and secondly it is an automatic system so you don't need to interfere in it. So if you also want to make such a system for yourself then follow the given instructions carefully. This IoT farming project will send all the data to the server. We are using the Thingspeak server for receiving and collecting the data that is collected by the different sensors. First of all, you need to create an account and a server on the Thingspeak platform. Read the full instructions on our website.
Components Required:-- NodeMcu-2
- General-purpose PCB
- 4 channel multiplexer
- 5 soil moisture sensor
- DHT11
- Connecting wires
- connecting cables
- This circuit is for the first nodemcu.
- This code is for the first nodemcu.
NOTE: Please upload the code which is given below to the first nodemcu.
// TECHATRONIC.COM
// library
// https://github.com/adafruit/Adafruit_ADS1X15
// https://github.com/manrueda/ESP8266HttpClient
// https://github.com/ekstrand/ESP8266wifi
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Adafruit_ADS1015.h>
WiFiClient client;
String thingSpeakAddress= "http://api.thingspeak.com/update?";
String writeAPIKey;
String tsfield1Name;
String request_string;
HTTPClient http;
Adafruit_ADS1115 ads;
void setup()
{
Serial.begin(115200);
delay(3000);
WiFi.disconnect();
Serial.println("START");
WiFi.begin("DESKTOP","asdfghjkl"); // Wifi ("ID","Password")
while ((!(WiFi.status() == WL_CONNECTED))){
delay(300);
Serial.println("...");
}
Serial.println("I AM CONNECTED");
Serial.println("Hello!");
Serial.println("Getting single-ended readings from AIN0..3");
Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
ads.begin();
}
void loop()
{
int16_t adc0, adc1, adc2, adc3;
Serial.println(" ");
adc0 = ads.readADC_SingleEnded(0);
adc0 = adc0 / 25;
adc1 = ads.readADC_SingleEnded(1);
adc1 = adc1 / 25;
adc2 = ads.readADC_SingleEnded(2);
adc2 = adc2 / 25;
adc3 = ads.readADC_SingleEnded(3);
adc3 = adc3 / 25;
Serial.print("SOIL MOISTURE in persent 1% : "); Serial.println(adc0);
Serial.print("SOIL MOISTURE in persent 2% : "); Serial.println(adc1);
Serial.print("SOIL MOISTURE in persent 3% : "); Serial.println(adc2);
Serial.print("SOIL MOISTURE in persent 4% : "); Serial.println(adc3);
Serial.println(" ");
if (client.connect("api.thingspeak.com",80))
{
request_string = thingSpeakAddress;
request_string += "key=";
request_string += "2YGO2FHN3XI3GFE7";
request_string += "&";
request_string += "field1";
request_string += "=";
request_string += adc0;
http.begin(request_string);
http.GET();
http.end();
}
delay(10);
if (client.connect("api.thingspeak.com",80))
{
request_string = thingSpeakAddress;
request_string += "key=";
request_string += "2YGO2FHN3XI3GFE7";
request_string += "&";
request_string += "field2";
request_string += "=";
request_string += adc1;
http.begin(request_string);
http.GET();
http.end();
}
delay(10);
if (client.connect("api.thingspeak.com",80))
{
request_string = thingSpeakAddress;
request_string += "key=";
request_string += "2YGO2FHN3XI3GFE7";
request_string += "&";
request_string += "field3";
request_string += "=";
request_string += adc2;
http.begin(request_string);
http.GET();
http.end();
}
delay(10);
if (client.connect("api.thingspeak.com",80))
{
request_string = thingSpeakAddress;
request_string += "key=";
request_string += "2YGO2FHN3XI3GFE7";
request_string += "&";
request_string += "field4";
request_string += "=";
request_string += adc3;
http.begin(request_string);
http.GET();
http.end();
}
delay(10);}
- This circuit is for the second nodemcu.
// TECHATRONIC.COM
// library
// https://github.com/adafruit/DHT-sensor-library
// https://github.com/manrueda/ESP8266HttpClient
// https://github.com/ekstrand/ESP8266wifi
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
String thingSpeakAddress= "http://api.thingspeak.com/update?";
String writeAPIKey;
String tsfield1Name;
String request_string,request_string1;
HTTPClient http;
#include <DHT.h> // Including library for dht
// library
// https://github.com/adafruit/DHT-sensor-library
#include <ESP8266WiFi.h>
String apiKey = "77921LPMGM2OAGQE"; // Enter your Write API key from ThingSpeak
const char *ssid = "DESKTOP"; // replace with your wifi ssid and wpa2 key
const char *pass = "asdfghjkl"; // WIFI Password
const char* server = "api.thingspeak.com";
#define DHTPIN 0 //pin D3 where the dht11 is connected
DHT dht(DHTPIN, DHT11);
WiFiClient client;
void setup()
{ dht.begin();
Serial.begin(115200);
delay(3000);
WiFi.disconnect();
Serial.println("START");
WiFi.begin("DESKTOP","asdfghjkl");
while ((!(WiFi.status() == WL_CONNECTED))){
delay(300);
Serial.println("...");
}
Serial.println("I AM CONNECTED");
}
void loop()
{
if (client.connect("api.thingspeak.com",80))
{
request_string = thingSpeakAddress;
request_string += "key=";
request_string += "77921LPMGM2OAGQE";
request_string += "&";
request_string += "field3";
request_string += "=";
request_string += analogRead(A0);
http.begin(request_string);
http.GET();
http.end();
}
delay(10);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
{
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celcius, Humidity: ");
Serial.print(h);
Serial.print(" Soil Sensor ");
Serial.print(A0);
Serial.println("%. Send to Thingspeak.");
}
client.stop();
Serial.println("Waiting...");
// thingspeak needs minimum 15 sec delay between updates
delay(10);
}
You can also view the video tutorial for making the smart farming project
Comments