//www.jopapa.me 2019
//Manda email si cambia nuestra IP. Para ESP32.
#include "ESP32_MailClient.h"
#define WIFI_SSID "Jopapa"
#define WIFI_PASSWORD "EstaEsMiClave"
String miIP="0.0.0.0"; //Para que en primera conexión nos diga la que tenemos
String ip;
//The Email Sending data object contains config and data to send
SMTPData smtpData;
//Callback function to get the Email sending status
void sendCallback(SendStatus info);
void setup(){
Serial.begin(115200);
Serial.print("Connecting to AP");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED){
Serial.print("."); delay(200);
}
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println();
}
void loop(){
ip = getIp();
if (ip != miIP){
Serial.println("Atencion, tu IP ha cambiado");
Serial.println("Tu anterior IP era: "+ miIP);
miIP=ip;
Serial.println("Tu actual IP es: " + miIP);
//Enviar e-mail con la nueva IP
enviarMail();
}
// Crear aquí un delay o un millis para chekear la IP, por x horas. En esta caso cada 12 horas.
for (int Hours = 0; Hours < 12; Hours++) { //Creates 12 hours
for (int Minutes = 0; Minutes < 60; Minutes++) { //Creates 1 hour
Serial.print(Hours); Serial.print(":"); Serial.println(Minutes);
for (int Seconds = 0; Seconds < 60; Seconds++) { //Creates 1 minute
delay(1000); //Creates 1 second
}
}
}
}
void enviarMail(){
Serial.println("Sending email...");
//Set the Email host, port, account and password
smtpData.setLogin("smtp.gmail.com", 587, "pepito@gmail.com", "2018pepito2019");
//Set the sender name and Email
smtpData.setSender("ESP32", "pepito@gmail.com");
//Set Email priority or importance High, Normal, Low or 1 to 5 (1 is highest)
smtpData.setPriority("High");
//Set the subject
smtpData.setSubject("Tu nueva IP es " + miIP);
//Set the message - normal text or html format
smtpData.setMessage(miIP, true);
//Add recipients, can add more than one recipient
smtpData.addRecipient("pepito@gmail.com");
smtpData.setSendCallback(sendCallback);
//Start sending Email, can be set callback function to track the status
if (!MailClient.sendMail(smtpData))
Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
//Clear all data from Email object to free memory
smtpData.empty();
}
//Callback function to get the Email sending status
void sendCallback(SendStatus msg){
//Print the current status
Serial.println(msg.info());
//Do something when complete
if (msg.success()){
Serial.println("----------------");
}
}
String getIp(){
WiFiClient client;
if (client.connect("api.ipify.org", 80)) { //Nos da nuestra IP en forma texto plano
Serial.println("Conectado a ipify.org");
client.println("GET / HTTP/1.0");
client.println("Host: api.ipify.org");
client.println();
}else {
Serial.println("Conexión a ipify.org fallida");
return String();
}
delay(5000);
String line;
while(client.available()){
line = client.readStringUntil('\n');
}
return line;
}
Saber nuestra IP por Mail
Si tenemos dispositivos en casa como camaras IP, automatismos gobernados por Internet, NAS que contienen datos, etc; el manejar o acceder a ellos es fácil si tenemos una IP fija. Si no disponemos de ella por precio o disponibilidad, hay otros métodos que no son fáciles de configurar o también son de pago.
Esta solución nos envia un correo electrónico cada vez que cambia nuestra IP y así poder acceder a casa sin problemas. Solo necesitamos un ESP32 y una cuenta de Gmail. La libreria ESP32_Mail_Client-2.1.1 nos facilita mucho la programación y además podemos usar la misma cuenta de gmail para enviar y recibir ese correo.
El programa conecta con nuestro router y usa un servicio gratuito ipify.org que nos devuelve nuestra IP. Si es diferente a la que ya teniamos antes, entonces nos manda un e-mail a nuestro teléfono con la nueva.
Solo tenemos que determinar con que frecuencia queremos que el programa haga esa verificación.