How to update IP with Arduino using service like DynDns DtDns.net

Hi guys, I just wanted to share how I managed to update my Dynamic Dns with DtDns.net service using my Arduino.

First i have to retreive my Pubblic IP Address using this code. You will need a Global string variable to store your current ip (in this case it’s called lastip) :

void send_ip()        //client function to send/receive GET request data. Check IP dal sito www.realip.info
{

  if (client.connect(serverName, 80)) {                      //starts client connection, checks for connection
    //Serial.println("connected");
    client.println(F("GET /api/p/realip.php HTTP/1.1"));     //download text
    client.println(F("Host: www.realip.info"));
    client.println(F("Connection: close"));                  //close 1.1 persistent connection  
    client.println();                                        //end of get request
  } 
  else {
    //Serial.println("connection failed");                     //error message if no client connect
    //Serial.println();
  }

  while(client.connected() && !client.available()) delay(1);  //waits for data
  while (client.connected() || client.available()) {          //connected or data available
    char c = client.read();                                   //gets byte from ethernet buffer
    readString += c;                                          //places captured byte in readString
  }

  client.stop();                                                //stop client
   
  int primaricerca = readString.indexOf('{');                   //inserisce in variabile la posizione della prima parentesi graffa all'interno della quale c'è l'IP
  int lastStringLength = readString.length();                   //assegna alla variabile lastSringlength la lunghezza della stringa letta contenente l'IP
  readString.remove(0, primaricerca+7);                         //rimuove tutto quello che c'è dall'inizio della stringa fino alla prima parentesi graffa + 7 caratteri per arrivare all'ip
  lastStringLength = readString.length();                       //rilegge la lunghezza della stringa ora che abbiamo rimosso parte delle cose inutili
  readString.remove(lastStringLength-2, lastStringLength);      //rimuove tutto il resto partendo dalla fine -2 verso la fine in modo da ottenere solo l'IP
  String ipattuale = readString;                                //memorizza il valore dell'ip nella variabile ipattuale per un futuro confronto
  Serial.println(readString);                                   //stampa sul monitor seriale l'IP

 if (lastip != ipattuale )                                      // se lastip è diverso da ipattuale allora dobbiamo inviare il tweet
      {
        lastip="";
        lastip = ipattuale;
        update_dtdns();
       }

  readString="";             //svuota la variabile readString 
  ipattuale="";              //svuota la variabile ipattuale 
}

The following is the code (called from the above code) you need for updating your DtDns.net hostname.

void update_dtdns()  //aggiorna il mio dtdns
{
    client.connect("www.dtdns.com", 80) ;                    
    client.print(F("POST /api/autodns.cfm?id=yourdnsname.dtdns.net&pw=yourpassword&ip="));   
    client.println(lastip);
    client.println();                                   
    client.stop(); 
}

Hope it’s useful for someone! :slight_smile: