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.
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.
Acerca del sensor de agua y Gmail
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:
Diagrama de cableado entre el sensor de agua y Arduino
This image is created using Fritzing. Click to enlarge image
Código de Arduino
/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-water-leak-email-notification*/#include <WiFiS3.h>#include <ESP_Mail_Client.h>#define WIFI_SSID "YOUR_WIFI_SSID"// CHANGE IT#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"// CHANGE IT// the sender email credentials#define SENDER_EMAIL "xxxxxx@gmail.com"// CHANGE IT#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx"// CHANGE IT to your Google App password#define RECIPIENT_EMAIL "xxxxxx@gmail.com"// CHANGE IT#define SMTP_HOST "smtp.gmail.com"#define SMTP_PORT 587#define WATER_SENSOR_PIN 7 // Arduino pin D7 connected to water sensor's pinint water_state; // current state of water sensorint prev_water_state; // previous state of water sensorSMTPSessionsmtp;voidsetup() {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); // set Arduino pin to input pull-up mode water_state = digitalRead(WATER_SENSOR_PIN); // read state}voidloop() { prev_water_state = water_state; // save the last state water_state = digitalRead(WATER_SENSOR_PIN); // read new stateif (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) {// set the network reconnection optionMailClient.networkReconnect(true);smtp.debug(1);smtp.callback(smtpCallback); Session_Config config;// set the session configconfig.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;// declare the message class SMTP_Message message;// set the message headers 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;// set the custom message header message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));// connect to the serverif (!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.");elseSerial.println("Connected with no Auth."); }// start sending Email and close the sessionif (!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()); }}// callback function to get the Email sending statusvoid smtpCallback(SMTP_Status status) {// print the current statusSerial.println(status.info());// print the sending resultif (status.success()) {for (size_t i = 0; i < smtp.sendingResult.size(); i++) {// get the result item SMTP_Result result = smtp.sendingResult.getItem(i);Serial.print("Status: ");if (result.completed)Serial.println("success");elseSerial.println("failed");Serial.print("Recipient: ");Serial.println(result.recipients.c_str());Serial.print("Subject: ");Serial.println(result.subject.c_str()); }Serial.println("----------------\n");// free the memorysmtp.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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
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
----------------
Ln 11, Col 1
Arduino Uno on COM15
2
Revisa tu bandeja de entrada. Recibirás un correo como el siguiente:
Video Tutorial
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.
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!