#include <WiFi.h>
#include <HTTPClient.h>
#include <CTBot.h>
#include <DHT.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <Adafruit_Sensor.h>
#include <stdlib.h>
#define DHTPIN 2
#define DHTTYPE DHT22
const char* apiKey = "d8cc1adaea1b7e521a99ffb64c3ec303";
const char* server = "api.openweathermap.org";
const char* apiEndpoint = "/data/2.5/weather?q=Facatativá&appid=";
String TOKEN = "6257753461:AAHSxuxPfEbtVx5pis0G0ozzJdEd13xJUPM";
String SSID = "Wokwi-GUEST";
String PAWD = "";
float ultimoValorTemperatura = 0;
float ultimoValorHumedad = 0;
float ss=0.034;
float dist_cm;
int ledPin = 13;
int inputPin = 12;
int pirState = LOW;
int val = 0;
int t_p=5;
int e_p=18;
int buzzerPin = 14;
long durn;
DHT dht(DHTPIN, DHTTYPE);
CTBot esp_treintaidos_bot;
WiFiClient client;
HTTPClient http;
//setup
void setup() {
Serial.begin(115200);
dht.begin();
esp_treintaidos_bot.wifiConnect(SSID, PAWD);
esp_treintaidos_bot.setTelegramToken(TOKEN);
if (esp_treintaidos_bot.testConnection()) {
Serial.println("Conectado");
} else {
Serial.println("No Se Ha Conectado");
}
configTime(-5 * 3600, 0, "pool.ntp.org");
while (!time(nullptr)) {
delay(1000);
}
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
pinMode(t_p, OUTPUT);
pinMode(e_p, INPUT);
pinMode(buzzerPin, OUTPUT);
}
//_________________________________________________________________________________________________________________________________
//void loop
void loop() {
TBMessage mensaje;
//__________________________________________________________________________________________________________________________________________
//API
if (WiFi.status() == WL_CONNECTED) {
if (http.begin(client, server, 80, apiEndpoint + String(apiKey))) {
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
float temp = doc["main"]["temp"];
int humidity = doc["main"]["humidity"];
Serial.print("Temperatura en Facatativá: ");
Serial.print(temp);
Serial.print(" °C, Humedad en Facatativá: ");
Serial.print(humidity);
Serial.println("%");
time_t now = time(nullptr);
struct tm* timeinfo;
timeinfo = localtime(&now);
char buffer[80];
strftime(buffer, sizeof(buffer), "Fecha: %d/%m/%Y, Hora: %H:%M:%S", timeinfo);
Serial.println(buffer);
}
else {
Serial.print("Error al hacer la solicitud HTTP. Código de error: ");
Serial.println(httpCode);
}
http.end();
}
else {
Serial.println("Error al iniciar la conexión HTTP");
}
}
else {
Serial.println("No se pudo conectar a WiFi");
}
//_________________________________________________________________________________________________________________________________
//Medidor de Movimiento
val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(ledPin, HIGH);
if (pirState == LOW) {
String response = "Movimiento Detectado! ";
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
pirState = HIGH;
}
delay(1000);
digitalWrite(ledPin, LOW);
if (pirState == HIGH) {
pirState = LOW;
tone(buzzerPin, 1600);
delay(1000);
noTone(buzzerPin);
}
}
//________________________________________________________________________________________________________________________________
//Registro DHT22
float temperatura = dht.readTemperature();
float humedad = dht.readHumidity();
if (temperatura != ultimoValorTemperatura) {
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(" °C");
ultimoValorTemperatura = temperatura;
}
if (humedad != ultimoValorHumedad) {
Serial.print("Humedad: ");
Serial.print(humedad);
Serial.println(" % ");
ultimoValorHumedad = humedad;
}
//______________________________________________________________________________________________________________________________________________
//Mensajes del Usuario
if (esp_treintaidos_bot.getNewMessage(mensaje)) {
Serial.print("Usuario: ");
Serial.println(mensaje.text);
//_________________________________________________________________________________________________________________________________
//Sensor Ultrasonico
digitalWrite(t_p, LOW);
delayMicroseconds(2);
digitalWrite(t_p, HIGH);
delayMicroseconds(10);
digitalWrite(t_p, LOW);
durn=pulseIn(e_p, HIGH);
dist_cm=durn*ss/2;
//_________________________________________________________________________________________________________________________________
//Bot de Telegram
if (mensaje.text == "/temperatura") {
float temperatura = dht.readTemperature();
if (isnan(temperatura)) {
esp_treintaidos_bot.sendMessage(mensaje.sender.id, "Error al leer la temperatura.");
} else {
String response = "La temperatura es de: " + String(temperatura) + " °C \n";
if (temperatura > 28) {
String mensajesCalor[] = {
"Me muero de calor",
"Por favor, qué calor",
"Me siento marchito y débil",
"De esta no paso",
"Socorro",
"Ojú, qué calor!.",
"Me achicharro",
"Me estoy azando",
"Me asfixio",
"Hace un calor que aprieta",
"No puedo crecer más en estas condiciones",
"Me sofoco",
"Me frío de calor",
"Esto no es calor, es fuego",
"Me siento como si estuviera en un horno",
"Mis hojas se están quemando",
"No puedo respirar en estas condiciones",
"Necesito más sombra para sobrevivir",
"Me siento como si estuviera en un ambiente tóxico",
"Me siento como si estuviera en un ambiente extremadamente caliente y peligroso"
};
int index = rand() % (sizeof(mensajesCalor) / sizeof(mensajesCalor[0]));
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
esp_treintaidos_bot.sendMessage(mensaje.sender.id, mensajesCalor[index]);
} else if (temperatura < 18) {
String mensajesFrio[] = {
"Mis hojas se sienten secas y crujientes",
"Me siento marchita y débil",
"No puedo crecer más en estas condiciones",
"Me siento congelado y rígido",
"Necesito más calor para prosperar",
"Me siento como si estuviera en hibernación",
"No puedo soportar este frío",
"Mis hojas se están cayendo",
"Necesito más sol para sobrevivir",
"Me siento como si estuviera en un ambiente hostil",
"No puedo hacer fotosíntesis en estas condiciones",
"Me siento como si estuviera en un ambiente inhóspito",
"Necesito más agua para sobrevivir en este frío",
"Me siento como si estuviera en un ambiente árido y seco"
};
int index = rand() % (sizeof(mensajesFrio) / sizeof(mensajesFrio[0]));
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
esp_treintaidos_bot.sendMessage(mensaje.sender.id, mensajesFrio[index]);
} else {
String mensajesNormal[] = {
"Me siento feliz y saludable",
"Mis hojas están verdes y vibrantes",
"Estoy creciendo fuerte y rápido",
"Me siento cómodo y seguro",
"Estoy disfrutando del sol y la lluvia",
"Me siento en armonía con mi entorno",
"Estoy floreciendo y dando frutos",
"Me siento en paz y relajado",
"Estoy absorbiendo los nutrientes que necesito",
"Me siento enérgico y vital",
"Estoy respirando aire fresco y limpio",
"Me siento en equilibrio y en sintonía con la naturaleza",
"Estoy absorbiendo la luz solar que necesito",
"Me siento en un ambiente acogedor y agradable",
"Estoy en un clima perfecto para mi crecimiento y desarrollo"
};
int index = rand() % (sizeof(mensajesNormal) / sizeof(mensajesNormal[0]));
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
esp_treintaidos_bot.sendMessage(mensaje.sender.id, mensajesNormal[index]);
}
}
}
else if (mensaje.text == "/humedad") {
float humedad = dht.readHumidity();
if (isnan(humedad)) {
esp_treintaidos_bot.sendMessage(mensaje.sender.id, "Error al leer la humedad.");
} else {
String response = "La humedad es de: " + String(humedad) + " % \n";
if (humedad > 80) {
String mensajesHumedo[] = {
"Me siento empapada y pesada",
"Mis hojas están amarillas o caídas",
"No puedo respirar en estas condiciones",
"Me siento como si estuviera en un pantano",
"Mis raíces están blandas o podridas",
"Me siento como si estuviera ahogándome",
"Mis hojas están blandas al tacto",
"No puedo absorber más agua",
"Me siento como si estuviera en un ambiente húmedo y sofocante",
"Mis hojas están manchadas o tienen moho",
"Me siento como si estuviera en un ambiente tóxico",
"Mis hojas están cayendo",
"Me siento como si estuviera en un ambiente insalubre",
"Mis hojas están creciendo lentamente o no están creciendo en absoluto",
"Me siento como si estuviera en un ambiente desequilibrado"
};
int index = rand() % (sizeof(mensajesHumedo) / sizeof(mensajesHumedo[0]));
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
esp_treintaidos_bot.sendMessage(mensaje.sender.id, mensajesHumedo[index]);
} else if (humedad < 40) {
String mensajesSeco[] = {
"Me siento seca y sedienta",
"Mis hojas están marchitas o secas",
"Me siento como si estuviera en un desierto",
"Mis hojas están amarillas o marrones",
"Me siento como si estuviera muriendo de sed",
"Mis tallos están blandos o arrugados",
"No puedo absorber suficiente agua",
"Me siento como si estuviera en un ambiente seco y árido",
"Mis hojas están quebradizas o crujientes",
"Me siento como si estuviera en un ambiente hostil",
"Mis hojas están cayendo",
"Me siento como si estuviera en un ambiente inhóspito",
"Mis hojas están creciendo lentamente o no están creciendo en absoluto",
"Me siento como si estuviera en un ambiente desequilibrado"
};
int index = rand() % (sizeof(mensajesSeco) / sizeof(mensajesSeco[0]));
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
esp_treintaidos_bot.sendMessage(mensaje.sender.id, mensajesSeco[index]);
} else {
String mensajesNormalH[] = {
"¡Estoy tan feliz de tener agua perfecta!",
"¡Mis hojas están tan verdes y vibrantes!",
"¡Mis tallos están tan fuertes!",
"¡Estoy creciendo tan rápido!",
"¡Gracias por cuidarme tan bien!",
"¡Me siento tan saludable!",
"¡Estoy tan agradecido por el agua que me das!",
"¡Me encanta tener agua perfecta!",
"¡Estoy tan contento de estar aquí!",
"¡Me siento tan fuerte y enérgico!",
"¡Estoy tan emocionado de florecer!",
"¡Estoy tan emocionado de dar frutos!",
"¡Me siento tan vivo y vibrante!",
"¡Estoy tan agradecido por el sol y el agua que me das!",
"¡Me encanta estar aquí y crecer con ustedes!"
};
int index = rand() % (sizeof(mensajesNormalH) / sizeof(mensajesNormalH[0]));
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
esp_treintaidos_bot.sendMessage(mensaje.sender.id, mensajesNormalH[index]);
}
}
} else if (mensaje.text == "/distancia") {
String response = "La distancia es de: " + String(dist_cm) + "Cm";
esp_treintaidos_bot.sendMessage(mensaje.sender.id, response);
}else if (mensaje.text == "/comandos") {
esp_treintaidos_bot.sendMessage(mensaje.sender.id, "Prueba usar /temperatura o /humedad o /distancia tambien puede usar /grupo para ver quienes participaron en este proyecto");
} else if (mensaje.text == "/start") {
esp_treintaidos_bot.sendMessage(mensaje.sender.id, "Bot Iniciado");
} else if (mensaje.text == "/grupo") {
esp_treintaidos_bot.sendMessage(mensaje.sender.id, "Los participantes son:\n- Julian Andres Perez Mendigaño\n- Kevin Esteban Ramos Romero\n- Kevin Santiago Garcia Ospina");
}else {
esp_treintaidos_bot.sendMessage(mensaje.sender.id, "Comando no reconocido. Intente usar /comandos");
}
}
//________________________________________________________________________________________________________________________________________________________
delay(1500);
//________________________________________________________________________________________________________________________________________________________
}