carlosvolt
Published © LGPL

Water pump control for irrigation via telegram and esp32

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

IntermediateProtip128
Water pump control for irrigation via telegram and esp32

Things used in this project

Hardware components

ESP32S
Espressif ESP32S
×1

Story

Read more

Code

Source code

C/C++
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", ""); 
}
}

Credits

carlosvolt
34 projects • 3 followers
Contact

Comments

Please log in or sign up to comment.