Blynk IoT Smart farming using water pump

Hello guys, welcome back to Techatronic. Water pumps play an important role in farming as well as daily household activities. We install them in our homes so that they can pump the groundwater. Sometimes water pumps are also used to create water pressure. In this article, we are going to make an IoT Smart farming and control it via the Blynk application by using NodeMCU. We are using a NodeMCU esp8266 and a single channel relay module for turning the pump on and off. You can check out more amazing projects on IoT made by us. You can control the water pump through the app. Just write your network’s SSID, PASSWORD, and the unique token number in the code given below. You can also see that if the pump is on or off inside the app. You have to click this button on the screen to turn the pump on or off.

smart water pump

smart water pump

Set up the Blynk app

First of all, install the Blynk IoT app on your smartphone and then open it. Sign in to the app and provide your email address so the Blynk app can send a token number to you on your email.

Then you will see the page which is given below and you have to select a new project from it.

Now name the project according to your choice (Smart Water Pump) and choose the device as NodeMCU. Select the connection type to wifi as given in the image.

Then you can choose what to use in the app. You can add different widgets, buttons, or controllers. Click on the plus button to open the widget box.

Now from the menu choose a button and a value display widget as shown below.

When you successfully add the widgets then go to the button settings and set the pin to virtual 12. You can also name the button.

smart water pump

Now do the same for the value display widget. Name it as a switch value and select the V12 pin for it.

smart water pump

The complete app setup looks like this.

smart water pump

Components Required

  • NodeMCU esp8266
  • Single-channel relay
  • DC water pump
  • Push-button
  • Jumper wires and a breadboard
  • Smartphone with a good internet connection
  • 9-volts DC power supply
  • USB cable for uploading the code
S.No Component Name Quantity Buy Link
1. Nodemcu esp8266 1
2. Nodemcu cable 1
3. Push Button 1
4. 5V single channel relay 1
5. Water Pump 1
6. Breadboard 1
7. Jumper wire 40
8. 9V Adaptor 1

IoT Smart farming Circuit diagramsmart water pump

Nodemcu esp8266 5V Relay Module
VV, Vin ( +5V ) VCC ( Positive + )
G, GND ( Ground ) GND ( Ground – )
D4 Pin ( Vin )  OUT Pin
Nodemcu esp8266 Push Button
GND ( Ground ) Terminal 1
D6 Pin Terminal 2
9 Volt Adaptor Water Pump 5V Relay Module
Normally Open
+ 9 Volt Common
Terminal 1 Normally Closed
– Negative Terminal 2

Make the circuit according to the given diagram.

3.3-volts pin of the NodeMCU -> VCC pin of the relay

GND pin of the NodeMCU -> GND pin of the relay

digital-4 pin of the NodeMCU -> signal pin of the relay

digital-6 pin of the NodeMCU -> one side of the pushbutton

GND pin of the NodeMCU -> another side of the pushbutton

Pins of the water pump -> one to the negative supply and other to the relay as shown


IoT Smart farming Code

Note: First please install <ESP8266WiFi.h>, <BlynkSimpleEsp8266.h>, <ArduinoOTA.h> libraries to the Arduino and then upload the code to the NodeMCU. Check here how to install zip libraries to the Arduino IDE.

 // ESP8266 LIBRARY  
 #define BLYNK_PRINT Serial        
 #include <ESP8266WiFi.h>  
 #include <BlynkSimpleEsp8266.h>  
 #include <ESP8266mDNS.h>   
 #include <WiFiUdp.h>  
 #include <ArduinoOTA.h>   
 BlynkTimer timer;  
 void checkPhysicalButton();  
 int relay1State = LOW;  
 int pushButton1State = HIGH;  
 #define AUTH "P5weseHWDxxkwm-SH0GARQt9lStSl-hF"   
 #define WIFI_SSID "DESKTOP"  //Enter WIFI Name           
 #define WIFI_PASS "asdfghjkl" //Enter WIFI Password        
 #define SERVER " "        
 #define PORT 8442  
 #define RELAY_PIN_1   D4  
 #define PUSH_BUTTON_1  D6  
 #define VPIN_BUTTON_1  V12   
 #define OTA_HOSTNAME "Home_Automation"  
  // Request the latest state from the server  
 // When App button is pushed - switch the state  
  relay1State = param.asInt();  
  digitalWrite(RELAY_PIN_1, relay1State);  
 void checkPhysicalButton()  
  if (digitalRead(PUSH_BUTTON_1) == LOW) {  
   // pushButton1State is used to avoid sequential toggles  
   if (pushButton1State != LOW) {  
    // Toggle Relay state  
    relay1State = !relay1State;  
    digitalWrite(RELAY_PIN_1, relay1State);  
    // Update Button Widget  
    Blynk.virtualWrite(VPIN_BUTTON_1, relay1State);  
   pushButton1State = LOW;  
  } else {  
   pushButton1State = HIGH;  
 void setup()  
  Blynk.begin(AUTH, WIFI_SSID, WIFI_PASS,"", 8442);  
  ArduinoOTA.setHostname(OTA_HOSTNAME); // For OTA - Use your own device identifying name  
  ArduinoOTA.begin(); // For OTA  
  pinMode(RELAY_PIN_1, OUTPUT);  
  digitalWrite(RELAY_PIN_1, relay1State);  
  // Setup a function to be called every 100 ms  
  timer.setInterval(500L, checkPhysicalButton);  
 void loop()  

Check out more tutorials on Arduino and Raspberry Pi. For any doubts feel free to use the comments section below.