#include <DHTesp.h> // Libreria sensor de temperatura y humedad
#include <CTBot.h> // libreria para el both
#include "frases.h" // frases aleatorias
#include <RTClib.h> // libreria de hora actual
#include <Wire.h> // libreria envia mensajes a traves de SDA Y SCL
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
int segundo,minuto,hora,dia,mes; // variable fecha y hora
long anio; //variable año
#define LED 2
#define FOTOCELDA 36
#define POTENCIOMETRO 39
CTBot bot_planta; //Both
DHTesp dhtSensor; // sensor
DateTime HoraFecha;
RTC_DS3231 rtc;
String TOKEN = "6226909466:AAFwaYnBCiQKhyCkTVyGyZ4lEmqifr3YbR0";
String SSID = "Wokwi-GUEST";
String PSWD = "";
String Mensaje ="";
int menu ;
const int juan = 1470828161;
const int anderson = 6181388315;
const int CLK= 22; // SCL
const int DIO = 21; // SDA
const int DHT_PIN = 15;
const char* password = "";
String servidor = "https://api.openai.com/v1/chat/completions";
String tokenCh = "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";
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22); // i9nicializamos el sensor
bot_planta.wifiConnect(SSID, PSWD);
bot_planta.setTelegramToken(TOKEN);
pinMode(FOTOCELDA, INPUT);
pinMode(POTENCIOMETRO, INPUT);
if (bot_planta.testConnection()){
Serial.println (" Conectado correctamente con Telegram ");
Serial.println ("---");
pinMode(LED,HIGH);
}else{
Serial.println ( "No Conecto Correctamente con Telegram");
Serial.println ("---");
}
rtc.begin(); //Inicializamos el RTC
delay (1000);
//Serial.println("Estableciendo Hora y fecha...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Establece la fecha y hora
//chat GPT
WiFi.begin(SSID, password);
Serial.println("Conectando...");
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Se ha conectado al WiFi con la IP: ");
Serial.println(WiFi.localIP());
//
}
void loop() {
TBMessage mensaje;
// Manejo recibido de Mensajes con el Both //
if(bot_planta.getNewMessage(mensaje)){
Serial.println( "Hay un nuevo mensaje en el chat de Telegram ");
Serial.println("Enviado por:" + String (mensaje.sender.id));
Serial.println("Contenido Mensaje:" + String (mensaje.text));
Serial.println("---");
delay (500);
}
HoraFecha = rtc.now(); // Se obtine la hora actual
segundo=HoraFecha.second();
minuto=HoraFecha.minute();
hora=HoraFecha.hour()-5;//
dia=HoraFecha.day();
mes=HoraFecha.month();
anio=HoraFecha.year();
//Enviamos por el puerto serie la hora y fecha.
Serial.print("Hora = ");
Serial.print(hora);
Serial.print(":");
Serial.print(minuto);
Serial.print(":");
Serial.print(segundo);
Serial.print(" Fecha = ");
Serial.print(dia);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(anio);
Serial.println();
Serial.println ("---");
delay (1000);
// Sensor de Luz //
int Fotocelda = analogRead(FOTOCELDA)/4;
Serial.println ("El valor analogico de la Fotocelda es:"+ String (Fotocelda));
Serial.println("---");
delay(1000);
// Sensor de Humedad de la tierra//
int valorHumedad = analogRead(POTENCIOMETRO)/4;
int Humedad = map (valorHumedad, 0, 1023, 100, 0);
Serial.println ("la humedad a tierra es de:" + String (Humedad)+ "%");
Serial.println ("---");
delay(1000);
// Sensor de Temperatura y Humedad Ambiente //
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("La temperatura es de: " + String(data.temperature, 2) + "°C");
Serial.println("---");
Serial.println("La humedad ambiente es de: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
if (mensaje.text.equalsIgnoreCase ("Hola")){
Mensaje = "Hola soy Flofy 😎🌱, tu asistent........... te la creiste solo soy tu planta ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = "¿ Que chismecito quieres? \n1.- ¿Como me siento hoy ? \n2. - ¿Quieres que te cuente chistes? \n3.- ¿Quieres hablar conmigo? \n4. -Fin ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
delay(1000);
do {
bot_planta.getNewMessage(mensaje);
Serial.println("Contenido Mensaje:" + String (mensaje.text));
menu = mensaje.text.toInt();
Serial.println ("el usuario ha elegido algo del menu ");
switch(menu){
case 1:
Mensaje = "Te contare como me siento hoy ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
//Condiciones de sensor de Luz //
if (Fotocelda >= 39 && Fotocelda <= 180){
Mensaje = "Esta luz mejora mi estado de animo";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
if (Fotocelda < 39){
Mensaje = (escogerMensaje(FrasesPocaLuz));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
if (Fotocelda > 180){
Mensaje = (escogerMensaje(FrasesMuchaLuz));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
}
}
// Condiciones de sensor de humedad de la tierra //
if (Humedad >= 60 && Humedad <= 80){
Mensaje = "Hoy el suelo esta perfecto";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
if (Humedad < 60){
Mensaje = (escogerMensaje(FrasesPocaHumedad));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
if (Humedad > 80){
Mensaje = (escogerMensaje(FrasesMuchaHumedad));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
}
}
// Condiciones Sensor de Temperatura Ambiente //
if(data.temperature >=15 && data.temperature <=20){
Mensaje = "Esta temperatura rejuvenece mis hojas ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}else {
if (data.temperature < 15) {
Mensaje = (escogerMensaje(FrasesDeFrio)) ;
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
if (data.temperature > 20){
Mensaje = (escogerMensaje(FrasesDeCalor)) ;
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
}
}
// Condiciones Sensor de humedad Ambiente //
if(data.humidity >= 40 && data.humidity <= 60){
Mensaje = "Se siente la frescura en el aire";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}else{
if (data.humidity< 40 ){
Mensaje = (escogerMensaje(FrasesPocaHumedadAM)) ;
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
if (data.humidity >60){
Mensaje = (escogerMensaje(FrasesMuchaHumedadAM));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
}
}
Mensaje = " ¿No tienes algo por hacer?, pues ahora lo tienes, hechame una hoja o una mano como prefieras 😉";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
delay(5000);
Mensaje = "¿ Que quieres hacer ahora? \n1.- ¿Como me siento hoy ? \n2. - ¿Quieres que te cuente chistes? \n3.- ¿Quieres hablar conmigo? \n4. -Fin ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
delay(7000);
break;
case 2:
Mensaje = "Empezare con un chiste normalito para romper el hielo";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = "El amor es como el pasto, lo plantas, lo cuidas y al final viene una alpaka fea y se lo come";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = "¿Que te parecio?";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
bot_planta.getNewMessage(mensaje);
Serial.println("Respuesta chiste:" + String (mensaje.text));
delay (7000);
if (mensaje.text.equalsIgnoreCase ("que malo tu chiste")||("malo")||("Ese fue muy malo")||("dime otro ")||("dime uno mejor")){
Mensaje = "Uyyy que exigente, ni que fuera tu Alexa 🙄 ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = "Por cierto tu falta de sentido del humor me enferma, para arreglar eso te gustaria otro chiste?";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
bot_planta.getNewMessage(mensaje);
if (mensaje.text.equalsIgnoreCase ("Si")||("puede ser")){
Mensaje = "Una vez hubo una pelea de plantas medicinales y gano la ruda. Jajaja riete aburrido 😐";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = "¿Quieres otro?, son muy buenos no?";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
bot_planta.getNewMessage(mensaje);
if (mensaje.text.equalsIgnoreCase ("Si")||("puede ser")){
Mensaje = "Hasta las planta tienen mas trasero que tú";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = " y eso ha sido todo por hoy 😉";
} else {
if (mensaje.text.equalsIgnoreCase ("No")){
Mensaje = " Igual ya me habia aburrido de hablar contigo, chaoooooo 👋";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
}
} else {
if (mensaje.text.equalsIgnoreCase ("No")||(" Ya no quiero más")){
Mensaje = "Mis chistes no son tan malos, si no te gustan mejor vete a jugar cartas 😒 ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
}
}
delay(5000);
Mensaje = "¿ Que quieres hacer ahora? \n1.- ¿Como me siento hoy ? \n2. - ¿Quieres que te cuente chistes? \n3.- ¿Quieres hablar conmigo? \n4. -Fin ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
delay(5000);
break;
case 3:
do{
Mensaje = "Recuerda cuando quieras hacer otra cosa solo tienes que decir adios ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
Mensaje = "¿De que quieres hablar?";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
bot_planta.getNewMessage(mensaje);
chatgpt(mensaje.text);
}while (mensaje.text != "adios");
delay(5000);
Mensaje = "¿ Que quieres hacer ahora? \n1.- ¿Como me siento hoy ? \n2. - ¿Quieres que te cuente chistes? \n3.- ¿Quieres hablar conmigo? \n4. -Fin ";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
delay(5000);
case 4:
Mensaje = "Ya sabes donde encontrarme igual ni me puedo mover adios";
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
break;
}
} while (menu !=4);
}
if(mensaje.text == ""){
delay(5000);
Mensaje = "¿No quieres hablar conmigo? 🤨";
mensaje.sender.id = 6149163668;
Serial.println("id de laura:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
mensaje.sender.id = juan;
Serial.println("id de juan:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
mensaje.sender.id = 6181388315;
Serial.println("id de anderson:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
if (hora == 8 && minuto == 00 ){
Mensaje = "Buenos dias 🌞";
mensaje.sender.id = 6149163668;
Serial.println("id de laura:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
mensaje.sender.id = juan;
Serial.println("id de juan:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
mensaje.sender.id = 6181388315;
Serial.println("id de anderson:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
if (hora == 18 && minuto == 30 ){
Mensaje = "Buenas noches 🌚";
mensaje.sender.id = 6149163668;
Serial.println("id de laura:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
mensaje.sender.id = juan;
Serial.println("id de juan:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
mensaje.sender.id = 6181388315;
Serial.println("id de anderson:" + String (mensaje.sender.id));
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
}
delay(1000);
}
String escogerMensaje(String *arreglo){
int indice = random(0, 5);
return arreglo[indice];
}
void chatgpt(String msj){
if(WiFi.status() == WL_CONNECTED) {
HTTPClient httpClient;
httpClient.begin(servidor);
httpClient.addHeader("Content-Type", "application/json");
httpClient.addHeader("Authorization", "Bearer " + tokenCh);
String conte = msj;
String payload = "{\"model\":\"gpt-3.5-turbo\",\"messages\":[{\"role\":\"user\",\"content\":\""+ conte +"\"}]}";
int httpResponseCode = httpClient.POST(payload);
if (httpResponseCode > 0) {
// Leer la respuesta y deserializar el JSON
String respuesta = httpClient.getString();
Serial.println(respuesta);
DynamicJsonDocument jsonBuffer(2048);
deserializeJson(jsonBuffer, respuesta);
// Obtener el valor de "content" y pasarlo a una variable
const char* contenido = jsonBuffer["choices"][0]["message"]["content"];
String mensaje(contenido);
Serial.println("Mensaje recibido: " + mensaje);
Mensaje = mensaje(contenido);
bot_planta.sendMessage(mensaje.sender.id,Mensaje);
} else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
httpClient.end();
} else {
Serial.println("WiFi Desconectado");
}
}