Tip 2

De ArduWiki
Saltar a: navegación, buscar

Descripción

Si tenemos dispositivos en casa como camaras IP, automatismos gobernados por Internet, NAS que contienen datos, etc; 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 ESP8266 y una cuenta de Gmail. La libreria Gsender 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 correo a nuestro teléfono con la nueva.

Solo tenemos que determinar con que frecuencia queremos que el programa haga esa verificación

Código

#include "ESP8266WiFi.h"
#include "Gsender.h"
const char* ssid = "Jopapa";
const char* password = "pepitogrillo";
String miIP="0.0.0.0";           //Para que en primera conexión nos diga la que tenemos

void setup() {  
   Serial.begin(115200);
   delay(10); 
   //Conexión a nuestro router
   Serial.println();
   Serial.print("Conectando a ");
   Serial.println(ssid);
   WiFi.begin(ssid, password);
   while (WiFi.status() != WL_CONNECTED){
     delay(500);
     Serial.print(".");
   }
   Serial.println("");
   Serial.println("WiFi conectada");  
   Serial.print("Direccion IP interna del ESP8266: ");
   Serial.println(WiFi.localIP());
}

void loop() {
   String 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
      Gsender *gsender = Gsender::Instance(); 
      String subject = "Tu nueva IP";
      if (gsender->Subject(subject)->Send("[email protected]", "Tu actual IP es: " + miIP)) {
         Serial.println("Mensage enviado.");
      }else{
         Serial.print("Error enviando mensage: ");
         Serial.println(gsender->getError()); 
      }        
   }
   //Crear aquí un delay o un millis para chekear la IP, por ejemplo cada hora o más
   delay(60000);
}

String getIp(){
   WiFiClient client;
   if (client.connect("api.ipify.org", 80)) {
      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');
      //Serial.println(line);
   }
   return line;
}

Vea también

Tips


Referencias externas