Smart Farming Using IoT
Hello friends, I'm back with another interesting project which is this time based on IoT. Today we're going to make a Smart farming Project using NodeMCU. In this project, we'll use very basic modules like Soil-Moisture Sensor, ADC, DHT11. These are easily available in the market for cheap also can be purchased online.
Here we are going to use two NodeMCU, because we have here 5 analog sensors and 1 DHT11. So we will use 4 soil moisture sensors with the Nodemcu 1 and dht11 and 1 soil moisture sensor with the second NodeMCU. Also, there we need two code for these two NodeMCU. So, make this project carefully.
Note:
As it is an IoT project, it needs stable Wi-Fi connection to provide IoT Service. Also, the values from soil moisture sensor may different according to the humidity in air and fertilizers in soil. Hence, if you are using this for some more practical implementation,then I'll recommend you to use high quality sensors. For more information regarding this topic visit original post of this project also all my future article will be pre-uploaded on that website so make sure to check it.
Material Required
- NodeMCU-2
- General purpose PCB
- 4 channel multiplexers
- 5 soil moisture sensors
- DHT11
- Connecting wires
- connecting cables
Circuit Diagrams
Code
// Code for 1st NodeMCU // TECHATRONIC.COM // library // <a href="https://github.com/adafruit/Adafruit_ADS1X15"> <a href="https://github.com/adafruit/Adafruit_ADS1X15" rel="nofollow"> https://github.com/adafruit/Adafruit_ADS1X15 </a> </a> // <a href="https://github.com/manrueda/ESP8266HttpClient"> <a href="https://github.com/adafruit/Adafruit_ADS1X15" rel="nofollow"> https://github.com/adafruit/Adafruit_ADS1X15 </a> </a> // <a href="https://github.com/ekstrand/ESP8266wifi"> <a href="https://github.com/adafruit/Adafruit_ADS1X15" rel="nofollow"> https://github.com/adafruit/Adafruit_ADS1X15 </a> </a> #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); }
Code for 2nd NodeMCU // TECHATRONIC.COM // library // <a href="https://github.com/adafruit/DHT-sensor-library" rel="nofollow"> https://github.com/adafruit/DHT-sensor-library </a> // <a href="https://github.com/manrueda/ESP8266HttpClient" rel="nofollow"> https://github.com/adafruit/DHT-sensor-library </a> // <a href="https://github.com/ekstrand/ESP8266wifi" rel="nofollow"> https://github.com/adafruit/DHT-sensor-library </a> #include #include String thingSpeakAddress= "http://api.thingspeak.com/update?"; String writeAPIKey; String tsfield1Name; String request_string,request_string1; HTTPClient http; #include // Including library for dht // library // <a href="https://github.com/adafruit/DHT-sensor-library" rel="nofollow"> https://github.com/adafruit/DHT-sensor-library </a> #include 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); }
For more detailed explanation for code, visit original post of this project.