Introduction: Water Pump Control for Irrigation Via Telegram and Esp32

About: Hello, my name is Carlos. I have a YouTube channel where I share my projects in https://www.youtube.com/c/carlosvolt

Water Pump Control by Telegram and ESP32 is an automated system that allows you to remotely control a water pump by using an ESP32

Supplies

Step 1:

Water Pump Control by Telegram and ESP32 is an automated system that allows you to remotely control a water pump by using an ESP32 microcontroller and the Telegram messaging platform.

The ESP32 is a low-cost, low-power microcontroller that can connect to the Internet using Wi-Fi, making it ideal for IoT projects. On the other hand, Telegram is an instant messaging platform that can be used to send and receive messages, photos, videos, and other types of files.

The ESP32 is responsible for receiving the commands sent by Telegram through a BOT and processing them to control the relay that activates the water pump. The user can send commands to turn the pump on or off.

In short, water pump control via Telegram and ESP32 allows for efficient and easy management of water supply in real time, with the possibility of controlling the water pump from anywhere with Internet access.




An Esp32


Female pins

Submersible water pump

Cables dupont

Module ky-004




Relay Module




TECHNICAL SPECIFICATIONS

  1. Operating Voltage: 5V DC
  2. Control Signal: TTL (3.3V or 5V)
  3. Number of Relays (channels): 1 CH
  4. Max capacity: 10A/250VAC, 10A/30VDC
  5. Max current: 10A (NO), 5A (NC)
  6. Action time: 10 ms / 5 ms
  7. To activate output NO: 0 Volts

PCB

📷 📷

Download gerber file –> Gerber_esp32

Un protoboard

One source for the esp32 and another for the water pump





Step 2: Source Code

#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// Reemplazar con los datos de tu red wifi
#define WIFI_SSID "Mi_red_wifi"
#define WIFI_PASSWORD "Mi_clave"
//Token de Telegram BOT se obtenienen desde Botfather en telegram
#define BOT_TOKEN "Mi_token"
#define ID_Chat "Mi_ID_Chat"//ID_Chat se obtiene de telegram
const unsigned long tiempo = 1000; //tiempo medio entre escaneo de mensajes
String datos;
String chat_id;
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long tiempoAnterior; //última vez que se realizó el análisis de mensajes
const int pin22 = 22;//Pin de la bomba de agua
const int pin23 = 23;//Pin del pulsador
int bombaStatus = 0;
int estadoM = 1;
int inicio = 1;
void mensajesNuevos(int numerosMensajes)
{
for (int i = 0; i < numerosMensajes; i++)
{
chat_id = bot.messages[i].chat_id;
String text = bot.messages[i].text;
//////////Activa la Bomba de agua activada indefinidamente //////
if (text == "/Activar")
{
digitalWrite(pin22, HIGH);
bombaStatus = 1;
bot.sendMessage(chat_id, "Bomba de agua activada indefinidamente", "");
}
//////////Activa la Bomba de agua activada x 1 segundo//////
if (text == "/Activar1")
{
digitalWrite(pin22, HIGH);
bombaStatus = 1;
bot.sendMessage(chat_id, "Bomba de agua activada x 1 segundo", "");
delay(1000);
digitalWrite(pin22, LOW);
bombaStatus = 0;
bot.sendMessage(chat_id, "Bomba de agua desactivada después de 1 Segundos", "");
}
//////////Activa la Bomba de agua activada x 2 segundos//////
if (text == "/Activar2")
{
digitalWrite(pin22, HIGH);
bombaStatus = 1;
bot.sendMessage(chat_id, "Bomba de agua activada x 2 segundos", "");
delay(2000);
digitalWrite(pin22, LOW);
bombaStatus = 0;
bot.sendMessage(chat_id, "Bomba de agua desactivada después de 2 Segundos", "");
}
//////////Activa la Bomba de agua activada x 3 segundos//////
if (text == "/Activar3")
{
digitalWrite(pin22, HIGH);
bombaStatus = 1;
bot.sendMessage(chat_id, "Bomba de agua activada x 3 segundos", "");
delay(3000);
digitalWrite(pin22, LOW);
bombaStatus = 0;
bot.sendMessage(chat_id, "Bomba de agua desactivada automaticamente después de 3 Segundos", "");
}
//////////Activa la Bomba de agua activada x 4 segundos//////
if (text == "/Activar4")
{
digitalWrite(pin22, HIGH);
bombaStatus = 1;
bot.sendMessage(chat_id, "Bomba de agua activada x 4 segundos", "");
delay(4000);
digitalWrite(pin22, LOW);
bombaStatus = 0;
bot.sendMessage(chat_id, "Bomba de agua desactivada automaticamente después de 4 Segundos", "");
}
//////////Activa la Bomba de agua activada x 5 segundos//////
if (text == "/Activar5")
{
digitalWrite(pin22, HIGH);
bombaStatus = 1;
bot.sendMessage(chat_id, "Bomba de agua activada x 5 segundos", "");
delay(5000);
digitalWrite(pin22, LOW);
bombaStatus = 0;
bot.sendMessage(chat_id, "Bomba de agua desactivada automaticamente después de 5 Segundos", "");
}

///////////Desactiva la bomba de agua///////////////////////////

if (text == "/Apagar")
{
digitalWrite(pin22, LOW);
bombaStatus = 0;
bot.sendMessage(chat_id, "Bomba de agua apagada", "");
}

////////Estado de la bomba de agua/////////

if (text == "/Estado")
{
if (bombaStatus)
{
bot.sendMessage(chat_id, "Estado actual: Bomba de agua encendida", "");
}
else
{
bot.sendMessage(chat_id, "Estado actual: Bomba de agua apagada", "");
}
}
////////Imprime el menú de ayuda//////////
if (text == "/Ayuda")
{
String ayuda = "Bienvenido al sistema de Internet de las cosas, con ESP32 " ".\n";
ayuda += "Estas son tus opciones.\n\n";
ayuda += "/Activar: Activa el la bomba de agua en forma indefinida \n";
ayuda += "/Apagar: Desactiva el la bomba de agua \n";
ayuda += "/Activar1: Activa el la bomba de agua durante 1 segundo \n";
ayuda += "/Activar2: Activa el la bomba de agua durante 2 segundos \n";
ayuda += "/Activar3: Activa el la bomba de agua durante 3 segundos \n";
ayuda += "/Activar4: Activa el la bomba de agua durante 4 segundos \n";
ayuda += "/Activar5: Activa el la bomba de agua durante 5 segundos \n";
ayuda += "/Estado : devuelve el estado actual si la bomba de agua está encendidad o apagada\n";
ayuda += "/Ayuda: Imprime este menú \n";
ayuda += "Recuerda el sistema distingue entre mayuculas y minusculas \n";
bot.sendMessage(chat_id, ayuda, "");
}
}
}

void setup()
{
Serial.begin(115200);
// dht.begin();//Inicializar el sensor DHT
pinMode(pin22, OUTPUT); //Inicializar pin 22 como salida para en control de la bomba de agua.
pinMode(pin23, INPUT); //Se configura como entrada para el pulsador
digitalWrite(pin22, LOW);// La colocamos en estado bajo
// Intenta conectarse a la red wifi
Serial.print("Conectando a la red ");
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); //Agregar certificado raíz para api.telegram.org
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.print("\nConectado a la red wifi. Dirección IP: ");
Serial.println(WiFi.localIP());
if(inicio == 1){
Serial.println("Sistema preparado");
bot.sendMessage(ID_Chat, "Sistema preparado!!!, escribe /Ayuda para ver las opciones", "");//Enviamos un mensaje a telegram para informar que el sistema está listo
inicio = 0;
}
}

void loop()
{
//Lectura del pulsador
int lecturaPin23 = digitalRead(pin23);
if(lecturaPin23 == LOW){
Serial.println("Botón activado");
bombaManual();
}
//Verifica si hay datos nuevos en telegram cada 1 segundo
if (millis() - tiempoAnterior > tiempo)
{
int numerosMensajes = bot.getUpdates(bot.last_message_received + 1);

while (numerosMensajes)
{
Serial.println("Comando recibido");
mensajesNuevos(numerosMensajes);
numerosMensajes = bot.getUpdates(bot.last_message_received + 1);
}

tiempoAnterior = millis();
}
}

void bombaManual(){
int lecturaPin22 = digitalRead(pin22);//Leemos el estado del pin de la bomba de agua
if(lecturaPin22 == LOW ){
digitalWrite(pin22, HIGH);//Activamos la bomba de agua
bombaStatus = 1;
delay(200);
bot.sendMessage(ID_Chat, "Bomba de agua activada manualmente", "");
}
if(lecturaPin22 == HIGH ){
digitalWrite(pin22, LOW);//Desactiva la bomba de agua
bombaStatus = 0;
delay(200);
bot.sendMessage(ID_Chat, "Bomba de agua desactivada manualmente", "");
}
}