#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", "");
}
}