Skip to main content

Soil Moisture Monitoring using ESP8266 and Soil Moisture Sensor

Hey folks

In this tutorial, we will learn how to interface LM393 module(Soil Moisture Sensor)with NodeMcu(ESP8266). LM393 is a simple water sensor can be used to detect soil moisture when the soil moisture deficit module plant waterer device, so that the plants in our garden without people to manage; Adjustable sensitivity adjust the digital potentiometer (shown in blue) Operating Voltage 3.3V-5V; Module Dual Output mode, a simple.

LM393 Soli Moisture Sensor Module(over view) 

Components Required:
  • LM393 Soil Sensor 
  • NodeMcu(ESP8266) 
  • Connecting wires(male to male) 
  • Breadboard 
Follow the Image below for circuit connection reference:-

(Interfacing all components) 

Here Pin A0 of the moisture sensor module connects to pin A0 on the ESP8266
The GND pin on the moisture sensor module connects to a GND pin on the ESP8266
The VCC pin on the moisture sensor module connects to a 3v3 pin on the ESP8266
D0 pin remain disconnected

After making the circuit dump the code given below:-

#include <ESP8266WiFi.h>
const char* ssid = "Enter SSID";
const char* password = "Enter password";
const int redPin = 4; // ~D2
const int greenPin = 12; // ~D6
const int bluePin = 14; // ~D5
int WiFiStrength = 0;
WiFiServer server(80);
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
analogWrite(redPin, 280);
analogWrite(greenPin, 300);
analogWrite(bluePin, 300);
Serial.print("Connecting to ");
WiFi.begin(ssid, password);
//WiFi.config(IPAddress(192, 168, 1, 221), IPAddress(192, 168, 1, 1), IPAddress(255, 255, 255, 0));
while (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi connected");
Serial.println("Server started");
Serial.print("Use this URL to connect: ");

double analogValue = 0.0;
double analogVolts = 0.0;
unsigned long timeHolder = 0;
void loop() {
WiFiStrength = WiFi.RSSI();
analogValue = analogRead(A0);
analogVolts = (analogValue * 3.08) / 1024;
int chartValue = (analogValue * 100) / 400;
chartValue = 100 - chartValue;
if (millis() - 15000 > timeHolder)
{ timeHolder = millis();
if (chartValue <= 25) { // 0-25 is red "dry"
analogWrite(redPin, 1000);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
} else if (chartValue > 25 && chartValue <= 75) // 26-75 is green
analogWrite(redPin, 0);
analogWrite(greenPin, 1000);
analogWrite(bluePin, 0);
else if (chartValue > 75 ) // 76-100 is blue
{ analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 1000);
delay(1000); // this is the duration the LED will stay ON
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
// Serial data
Serial.print("Analog raw: ");
Serial.print("Analog V: ");
Serial.print("ChartValue: ");
Serial.print("TimeHolder: ");
Serial.print("millis(): ");
Serial.print("WiFi Strength: ");
Serial.print(WiFiStrength); Serial.println("dBm");
Serial.println(" ");
delay(1000); // slows amount of data sent via serial
WiFiClient client = server.available();
if (!client) {
Serial.println("new client");
String request = client.readStringUntil('\r');
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println(" <head>");
client.println("<meta http-equiv=\"refresh\" content=\"60\">");
client.println(" <script type=\"text/javascript\" src=\"\"></script>");
client.println(" <script type=\"text/javascript\">");
client.println(" google.charts.load('current', {'packages':['gauge']});");
client.println(" google.charts.setOnLoadCallback(drawChart);");
client.println(" function drawChart() {");
client.println(" var data = google.visualization.arrayToDataTable([ ");
client.println(" ['Label', 'Value'], ");
client.print(" ['Moisture', ");
client.println(" ], ");
client.println(" ]); ");
// setup the google chart options here
client.println(" var options = {");
client.println(" width: 400, height: 120,");
client.println(" redFrom: 0, redTo: 25,");
client.println(" yellowFrom: 25, yellowTo: 75,");
client.println(" greenFrom: 75, greenTo: 100,");
client.println(" minorTicks: 5");
client.println(" };");
client.println(" var chart = new google.visualization.Gauge(document.getElementById('chart_div'));");
client.println(" chart.draw(data, options);");
client.println(" setInterval(function() {");
client.print(" data.setValue(0, 1, ");
client.println(" );");
client.println(" chart.draw(data, options);");
client.println(" }, 13000);");
client.println(" }");
client.println(" </script>");
client.println(" </head>");
client.println(" <body>");
client.print("<h1 style=\"size:12px;\">Karkhana Soil Moisture</h1>");
// show some data on the webpage and the guage
client.print("WiFi Signal Strength: ");
client.print("Analog Raw: ");
client.print("<br>Analog Volts: ");
client.println("<br><a href=\"/REFRESH\"\"><button>Refresh</button></a>");
client.println("<div id=\"chart_div\" style=\"width: 300px; height: 120px;\"></div>");
Serial.println("Client disonnected");

After dumping the code we can check our output in the serial monitor as well as in the URL shown below:-

Output at the time of working:-

(During circuit is running)

Join our hands-on training courses.
To know more visit us at Karkhana Training Portal.


Popular posts from this blog

IoT - LPG Gas Sensor Logging with NodeMCU and Thingspeak.

In this tutorial, will learn, how to interface MQ-5 Module with Node Mcu(ESP8266).

The Grove - Gas Sensor(MQ5) module is useful for gas leakage detection (in home and industry). It is suitable for detecting H2, LPG, CH4, CO, Alcohol. Due to its high sensitivity and fast response time, measurements can be taken as soon as possible. The sensitivity of the sensor can be adjusted by using the potentiometer.

Components Required
NodeMcu(ESP8266) MQ-5 LPG SENSOR Module Few male to female connecting wires Breadboard  Follow the image below for circuit connection reference:-
After making the circuit dump the code given below:-

// Karkhana Report
// Analyse the volume of the gas using
// Hardware: NodeMCU,MQ-5

#include <ESP8266WiFi.h>
String apiKey = "Enter the API key"; // Enter your Write API key from ThingSpeak
const char *ssid = "Enter ssid"; // replace with your wifi ssid and wpa2 key
const char *pass = "Enter password";
const char* server = &qu…

IoT - Humidity and Temperature Logging using NodeMCU and ThingSpeak

Hey Folks,
In this tutorial, we will learn, how to interface DHT 11 with Node Mcu(ESP8266).
The DHT11 is a basic, ultra low-cost digital temperature and humidity sensor. It uses a capacitive humidity sensor and a thermistor to measure the surrounding air and spits out a digital signal on the data pin (no analog input pins needed).

Components Required
NodeMcu(ESP8266) DHT 11 SENSOR Few male to female connecting wires Breadboard
Follow the image below for circuit connection reference.
In this circuit, we have connected the output pin to the D3 pin of the NodeMcu module and NC pin remain disconnected. After making the circuit dump the code given below.
// Karkhana Report
// temperature and humidity data using
// Hardware: NodeMCU,DHT11
#include <DHT.h> // Including library for dht
#include <ESP8266WiFi.h>
String apiKey = "THINGSPEAK API KEY"; // Enter your Write API key from ThingSpeak
const char *ssid = "ENTER YOUR SSID"; // replace with your wifi ssid a…

Getting Started with Embedded System Design on AVR

In this tutorial, we will learn how to interface LED with Atmega16 using AVR Studio.
An embedded system is built around a processor. The design goals of an embedded system are to reduce size, cost and power consumption and to increase performance and reliability.
The microprocessor we are using is ATMEGA16. The processor has limited internal memory, and if this is not sufficient for a given application external memory devices are used. The hardware also includes any components that facilitate the user-application interaction such as display units, keypad. The light emitting diodes are used for getting status information, such as power on, check output(high/low). You all must have observed led decoration lights, which can glow in different patterns.
First, we will learn to interface a single Led and then 8 LEDs to learn a simple toggling technique.
Components Required:- AVR controller(Atmega16)LEDsConnecting wiresUSBASP Programmer For single Led dump the following code:
#include<avr/io.h> #in…