Arduino Nano ESP32 - Notificación por correo electrónico de fuga de agua
Esta guía le mostrará cómo usar Arduino Nano ESP32 para detectar fugas de agua y enviar alertas por correo electrónico de inmediato. Explicaremos cómo configurar el sensor, proporcionaremos ejemplos de código y mostraremos cómo enlazar con servicios de correo electrónico. Esto es útil para mantener su hogar u oficina protegidos contra daños por agua y es ideal para quienes les gustan los proyectos de bricolaje y desean mejorar sus sistemas de detección de 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 guías claras sobre sensores de agua y Gmail. Cada guía incluye instrucciones detalladas y pasos sencillos para configurar el hardware, comprender cómo funciona y conectar y programar el Arduino Nano ESP32. Para obtener más información, haga clic en estos enlaces.

This image is created using Fritzing. Click to enlarge image
#include <WiFi.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 D4
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 ESP32";
String textMsg = "This is an email sent from ESP32.\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("ESP32");
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.printf("Connection error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), 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.printf("Error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());
}
void smtpCallback(SMTP_Status status) {
Serial.println(status.info());
if (status.success()) {
Serial.println("----------------");
Serial.printf("Email sent success: %d\n", status.completedCount());
Serial.printf("Email sent failed: %d\n", status.failedCount());
Serial.println("----------------\n");
for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
SMTP_Result result = smtp.sendingResult.getItem(i);
Serial.printf("Message No: %d\n", i + 1);
Serial.printf("Status: %s\n", result.completed ? "success" : "failed");
Serial.printf("Date/Time: %s\n", MailClient.Time.getDateTimeString(result.timestamp, "%B %d, %Y %H:%M:%S").c_str());
Serial.printf("Recipient: %s\n", result.recipients.c_str());
Serial.printf("Subject: %s\n", result.subject.c_str());
}
Serial.println("----------------\n");
smtp.sendingResult.clear();
}
}
Para empezar con Arduino Nano ESP32, siga estos pasos:
Conecta el sensor de agua a la placa Arduino Nano ESP32 según el diagrama proporcionado.
Conecta la placa Arduino Nano ESP32 a tu computadora utilizando un cable USB.
Abre el IDE de Arduino en tu computadora.
Selecciona la Arduino Nano ESP32 placa y su puerto COM correspondiente.
Abre el Library Manager haciendo clic en el icono en el lado izquierdo del IDE de Arduino.
Busca ESP Mail Client y localiza el ESP Mail Client de Mobizt.
Haz clic en el botón Install para obtener la biblioteca ESP Mail Client.

Copie el código proporcionado y péguelo en el IDE de Arduino.
Cambie los datos de sus credenciales de WiFi editando WIFI_SSID y WIFI_PASSWORD en el código.
Coloque su correo electrónico y su contraseña en lugar de las credenciales del remitente, actualizando SENDER_EMAIL y SENDER_PASSWORD.
Edite la dirección de correo electrónico del destinatario en el código cambiando RECIPIENT_EMAIL. Puede ser igual a la del remitente.
※ Nota:
El correo electrónico del remitente debe ser una cuenta de Gmail.
Utilice la contraseña de la aplicación del paso anterior como la contraseña del remitente.
El correo electrónico del destinatario puede ser de cualquier tipo.
Haz clic en el botón Subir en el IDE de Arduino para enviar el código al Arduino Nano ESP32.
Abre el Monitor Serial.
Vierte agua sobre el sensor de agua.
Verifica el Monitor Serial para ver el resultado.
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 Nano ESP32
----------------
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!