#include "DHTesp.h"
#include <stdio.h>
#include <stdlib.h>
#include "WiFi.h"
#include "ESP_Mail_Client.h"
#include "ThingSpeak.h"
// Configuraciones Pin de Datos
const int soilMoisturePin = 34;
int soilMoistureValue = 0;
const int thresholdValue = 350; // Umbral para activar el riego
const int DHT_PIN = 35;
// Configuraciones de WiFi
char* WIFI_NAME = "Wokwi-GUEST";
char* WIFI_PASSWORD = "";
int myChannelNumber = 2564339; // ThingSpeak channel ID
char* myApiKey = "3PDPDDF1RA32WIER"; // ThingSpeak channel write API key
WiFiClient client;
// Configuraciones de correo de alerta
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define AUTHOR_EMAIL "[email protected]"
#define AUTHOR_PASSWORD "your-email-password"
#define RECIPIENT_EMAIL "[email protected]"
void setup() {
//Se configuran los baudios a 115200
Serial.begin(115200);
//Se configura la conexion virtual wifi dada por la plataforma
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
Serial.println("Connecting...");
Serial.println("Wi-Fi connected");
Serial.println("Local IP: " + String(WiFi.localIP()));
Serial.println("-------------");
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);
pinMode(soilMoisturePin, INPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
// Configuración del cliente SMTP
ESP_Mail_Session session;
session.server.host_name = SMTP_HOST;
session.server.port = SMTP_PORT;
session.login.email = AUTHOR_EMAIL;
session.login.password = AUTHOR_PASSWORD;
session.login.user_domain = "";
// Configuración del mensaje
SMTP_Message message;
message.sender.name = "ESP32";
message.sender.email = AUTHOR_EMAIL;
message.subject = "Alerta: Humedad del suelo baja";
message.addRecipient("Usuario", RECIPIENT_EMAIL);
// Configuración del cliente SMTP
SMTPSession smtp;
smtp.debug(1);
smtp.callback(smtpCallback);
}
void loop() {
soilMoistureValue = analogRead(soilMoisturePin);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.print("Humedad del suelo: ");
Serial.println(soilMoistureValue);
Serial.print("Temperatura: ");
Serial.print(data.temperature, 2);
Serial.println("°C");
Serial.print("Humedad relativa del aire: ");
Serial.print(data.humidity, 1);
Serial.println("%");
// if (soilMoistureValue < thresholdValue) {
// sendEmailAlert();
//}
delay(2000);
}
void sendEmailAlert() {
// Aquí enviamos el correo de alerta
SMTP_Message message;
message.text.content = "La humedad del suelo está por debajo del umbral. Es necesario activar el sistema de riego.";
if (!smtp.connect(&session)) {
Serial.println("Error de conexión SMTP");
return;
}
if (!MailClient.sendMail(&smtp, &message)) {
Serial.print("Error al enviar correo, razón: ");
Serial.println(smtp.errorReason());
}
smtp.closeSession();
}
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
}