Arduino - Notificación por correo electrónico de fuga de agua
En esta guía, aprenderemos a usar Arduino para detectar fugas de agua y enviar alertas por correo electrónico de forma inmediata. Repasaremos cómo configurar el sensor, mostraremos ejemplos del código y explicaremos cómo conectarlo con servicios de correo. Esto ayudará a mantener su hogar u oficina a salvo de daños por agua. Esto es ideal para personas que disfrutan de proyectos de bricolaje y quieren mejorar sus sistemas para detectar fugas de agua.
Or you can buy the following kits:
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.
Ofrecemos tutoriales detallados sobre sensores de agua y Gmail. Cada guía proporciona detalles exhaustivos y pasos fáciles de seguir sobre la configuración de hardware, cómo funciona y cómo conectar y programar el Arduino. Para obtener más información, visite estos enlaces:

This image is created using Fritzing. Click to enlarge image
#include <WiFiS3.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
#define SENDER_EMAIL "xxxxxx@gmail.com"
#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx"
#define RECIPIENT_EMAIL "xxxxxx@gmail.com"
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
#define WATER_SENSOR_PIN 7
int water_state;
int prev_water_state;
SMTPSession smtp;
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
pinMode(WATER_SENSOR_PIN, INPUT_PULLUP);
water_state = digitalRead(WATER_SENSOR_PIN);
}
void loop() {
prev_water_state = water_state;
water_state = digitalRead(WATER_SENSOR_PIN);
if (prev_water_state == HIGH && water_state == LOW) {
Serial.println("Water leakage is detected!");
String subject = "Email Notification from Arduino";
String textMsg = "This is an email sent from Arduino.\n";
textMsg += "Water leakage is detected";
gmail_send(subject, textMsg);
}
}
void gmail_send(String subject, String textMsg) {
MailClient.networkReconnect(true);
smtp.debug(1);
smtp.callback(smtpCallback);
Session_Config config;
config.server.host_name = SMTP_HOST;
config.server.port = SMTP_PORT;
config.login.email = SENDER_EMAIL;
config.login.password = SENDER_PASSWORD;
config.login.user_domain = F("127.0.0.1");
config.time.ntp_server = F("pool.ntp.org,time.nist.gov");
config.time.gmt_offset = 3;
config.time.day_light_offset = 0;
SMTP_Message message;
message.sender.name = F("Arduino");
message.sender.email = SENDER_EMAIL;
message.subject = subject;
message.addRecipient(F("To Whom It May Concern"), RECIPIENT_EMAIL);
message.text.content = textMsg;
message.text.transfer_encoding = "base64";
message.text.charSet = F("utf-8");
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;
message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));
if (!smtp.connect(&config)) {
Serial.println("Connection error: ");
Serial.print("- Status Code: ");
Serial.println(smtp.statusCode());
Serial.print("- Error Code: ");
Serial.println(smtp.errorCode());
Serial.print("- Reason: ");
Serial.println(smtp.errorReason().c_str());
return;
}
if (!smtp.isLoggedIn()) {
Serial.println("Not yet logged in.");
} else {
if (smtp.isAuthenticated())
Serial.println("Successfully logged in.");
else
Serial.println("Connected with no Auth.");
}
if (!MailClient.sendMail(&smtp, &message)) {
Serial.println("Connection error: ");
Serial.print("- Status Code: ");
Serial.println(smtp.statusCode());
Serial.print("- Error Code: ");
Serial.println(smtp.errorCode());
Serial.print("- Reason: ");
Serial.println(smtp.errorReason().c_str());
}
}
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
if (status.success()) {
for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
SMTP_Result result = smtp.sendingResult.getItem(i);
Serial.print("Status: ");
if (result.completed)
Serial.println("success");
else
Serial.println("failed");
Serial.print("Recipient: ");
Serial.println(result.recipients.c_str());
Serial.print("Subject: ");
Serial.println(result.subject.c_str());
}
Serial.println("----------------\n");
smtp.sendingResult.clear();
}
}
Coloca el sensor de agua en un lugar donde pueda detectar fugas de agua.
Conecta el sensor de agua a la placa Arduino.
Conecta la placa Arduino a tu PC utilizando un cable micro USB.
Abre el Arduino IDE en tu PC.
Selecciona la placa Arduino correcta (Arduino Uno R4 WiFi) y el puerto COM.
Abre el Gestor de Bibliotecas haciendo clic en el icono Gestor de Bibliotecas en la barra de navegación izquierda del Arduino IDE.
Busca ESP Mail Client y encuentra el ESP Mail Client desarrollado por Mobizt.
Haz clic en el botón Instalar para agregar la biblioteca ESP Mail Client.

Copia el código proporcionado y ábrelo en el IDE de Arduino.
Actualiza tus datos de WiFi (SSID y contraseña) en el código modificando WIFI_SSID y WIFI_PASSWORD.
Reemplaza el correo electrónico y la contraseña del remitente con los tuyos modificando SENDER_EMAIL y SENDER_PASSWORD.
Actualiza la dirección de correo electrónico del destinatario en el código modificando RECIPIENT_EMAIL. Esto puede ser igual que la del remitente.
※ Nota:
El correo electrónico del remitente debe ser una cuenta de Gmail.
La contraseña del remitente es la contraseña de la aplicación obtenida en el paso anterior.
El correo electrónico del destinatario puede ser cualquier tipo de correo electrónico.
Haz clic en el botón Subir en el IDE de Arduino para subir el código al Arduino.
Abre el Monitor Serial.
Vierte agua sobre el sensor de agua.
Observa el resultado en el Monitor Serial.
Water leakage is detected
#### Email sent successfully
> C: Email sent successfully
----------------
Message sent success: 1
Message sent failed: 0
----------------
Message No: 1
Status: success
Date/Time: May 27, 2024 04:42:50
Recipient: xxxxxx@gmail.com
Subject: Email Notification from Arduino
----------------
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.
※ NUESTROS MENSAJES
No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!