Prerequisiti

Prima di procedere con la configurazione è necessario:

CONFIGURAZIONE
CONNESSIONE .IT NATIVA
Abbonamento consigliato
Standard dynDNS.it

Configurazione rapida

Dopo aver creato una connessione .it nativa prendere nota del nome host creato completo di dominio, del nome utente e della password utilizzate per accedere al sito dynDNS.it. A questo punto è possibile configurare la propria scheda Arduino utilizzando i dati necessari alla configurazione.

I dati necessari alla configurazione saranno, ad esempio:

Fornitore del servizio

dyndns.it

Nome Host

myhost.homepc.it

dynDNS.it Username

myusername (usata per accedere a dynDNS.it)

dynDNS.it Password

mypassword (usata per accedere a dynDNS.it)

Configurazione guidata

Per configurare un dispositivo Arduino e aggiornare l’hostname si consiglia di utilizzare il seguente script.

/* DynDNS
 
 created 2011
 by Boris Landoni

 Modified 2015
 Impulso srl
 
 This example code is in the public domain.
 

 */
 
//http://username:password@update.dyndns.it/nic/update?hostname=yourhostname&myip=ipaddress
 
#include <Ethernet.h>
//#include <EthernetDNS.h>
#include <WString.h>
#include <EEPROM.h>
 
#define UPDATE_INTERVAL            30000    // if the connection is good wait 30 seconds before updating again - should not be less than 5
 
int ledR =  8;
int ledG =  9;
 
unsigned long pubblica=0;
 
byte mac[] = { 0x54,0x55,0x58,0x10,0x00,0x24 };
byte ip[] = { 192, 168, 0, 98 };
 
byte domainaddrip[]= { 208, 78, 70, 70 }; //http://checkip.dyndns.com/
byte ipAddr[4];
 
byte domaindydns[]= { 81, 29, 198, 110 }; // update.dyndns.org
char hostname[ ]   = "xxxxxxx.homepc.it";
char userpwdb64[ ] = "xxxxxxxxxxxxxxxxxx";  //http://www.functions-online.com/base64_encode.html    use->   username:password
 
String ipadsl     = String(20);
String ipadslold  = String(20);
String inString   = String(51);
 
//Client client(server, 80);
const char* ip_to_str(const uint8_t*);
//void nameFound(const char* name, const byte ipAddr[4]);
 
Client client(domainaddrip, 80);
Client clientdyn(domaindydns, 80);
 
void setup()
{
  pinMode(ledR, OUTPUT); 
  pinMode(ledG, OUTPUT); 
  Ethernet.begin(mac, ip);
 
  //EthernetDNS.setDNSServer(dnsServerIp); 
  Serial.begin(9600);
 
  Serial.println("*****************************************Start***************************************************"); 
  delay(1000);
 
  //risolviip();
  //delay(1000);
}
 
void loop()
{
 
  if (millis() < pubblica) pubblica = millis(); if ((millis() - pubblica) > UPDATE_INTERVAL){
          //Serial.print("Passati "); 
          //Serial.print(UPDATE_INTERVAL);
          //Serial.println(" ms"); 
          Serial.print("tempo trascorso dall'accensione ");          
          Serial.println(millis());
          Serial.println(pubblica);          
          pubblica = millis();  
 
          acquisisciip();          
      }
 
}
 
void acquisisciip()
{
 
  int timeout=0; 
  int skip=0;
  ipadsl="";
  inString="";
  digitalWrite(ledG, HIGH);
 
  Serial.print("connecting to ");
  //Serial.print(domain);
  //Serial.print(" = ip ");
  //Serial.println(ip_to_str(domainaddrip));
 
  if (client.connect()) {
 
    Serial.println("connected");
    client.println("GET / HTTP/1.0");
    //client.println("GET / HTTP/1.0");
    client.print("HOST: ");
    client.println("www.dyndns.it");
    //client.println(ip_to_str(domainaddrip));
    client.println();
  } else {
    Serial.println("connection failed");
  }
 
  while (!client.available() && timeout<50) { timeout++; Serial.print("Time out "); Serial.println(timeout); delay(100); } while (client.available()) { //Serial.println("client.available"); //if (client.available()) //{ char c = client.read(); //Serial.print(c); skip++; if (skip>220)
        {
          if ((inString.length())<50) inString.append(c); } //} } client.flush(); if ((inString.length())>5)   
      {
          //Serial.print("inString: ");
          //Serial.println(inString); 
          if (inString.contains("Address"))
            {    
              int from=(inString.indexOf("Address")+9);
              int lunghe=inString.length();
              int to=(lunghe-16);
              /*Serial.print("Lunghezza instring    = ");
              Serial.println(lunghe);  
              Serial.print("Posizione address + 9 = ");
              Serial.println(from);  
              Serial.print("Posizione fine   - 16 = ");
              Serial.println(to);  
              */
              //strcpy(ipadsl,(inString.substring((inString.indexOf("Address")+9),(inString.length()-16))));
              ipadsl=inString.substring(from,to); 
              //Serial.print("Lunghezza ipadsl      = ");
              //Serial.println(ipadsl.length()); 
              Serial.print("IP rilevato dal sito: >");
              Serial.print(ipadsl);          
              Serial.println("<"); } } if (!client.connected()) { Serial.println("disconnecting."); client.stop(); delay (1000); Serial.print("lunghezza IP "); //Serial.println(strlen(ipadsl)); Serial.println(ipadsl.length()); if ((strlen(ipadsl))!=0) { Serial.print("IP nuovo : >");
              Serial.print(ipadsl);          
              Serial.println("<");
 
              for (int i=0; i<(ipadsl.length()); i++) { //salva in memoria l'indirizzo acquisito ipadslold[i] = EEPROM.read(i); //Serial.print("carattere : >");
                //Serial.print(ipadslold[i]);          
                //Serial.println("<"); } Serial.print("IP vecchio: >");
              Serial.print(ipadslold);          
              Serial.println("<"); if (strcmp(ipadsl,ipadslold)) { Serial.println("IP diverso PUBBLICO"); digitalWrite(ledR, HIGH); pubblicaip(); digitalWrite(ledR, LOW); } else { Serial.println("IP uguale"); } digitalWrite(ledG, LOW); //ipadslold=""; //ipadslold.append(ipadsl); //ipadslold=""; //Serial.print("IP vecchio azzerato: >");
              //Serial.print(ipadslold);          
              //Serial.println("<");
              //strcpy(ipadslold,ipadsl);
              for (int i=0; i<(ipadsl.length()); i++) {    //salva in memoria l'indirizzo acquisito
                EEPROM.write(i, ipadsl[i]); 
              } 
 
        }
 
   }
 
}
 
void pubblicaip()
{
  int timeout=0;
  Serial.print("connecting to ");
  Serial.println(ip_to_str(domaindydns));
 
  Serial.print("IP da pubblicare ");
  Serial.println(ipadsl);  
 
if (clientdyn.connect()) {
    Serial.println("connected");
    clientdyn.print("GET /nic/update?hostname=");
    clientdyn.print(hostname);
    clientdyn.print("&myip=");
    clientdyn.print(ipadsl);
    clientdyn.println(" HTTP/1.0 ");
    //clientdyn.println("Host: update.dyndns.it ");
 
    clientdyn.print("Host: ");
    clientdyn.println(ip_to_str(domaindydns));
 
    clientdyn.print("Authorization: Basic ");
    clientdyn.println(userpwdb64);
 
    clientdyn.println("User-Agent: impulso - arduinodydns - 1.2");
    clientdyn.println();
  } else {
    Serial.println("connection failed");
  }
 
 //   delay(3000);
 
  while (!clientdyn.available() && timeout<50) 
  {
    timeout++;
    Serial.print("Time out ");
    Serial.println(timeout);
    delay(100);
  }
 
  while (clientdyn.available()) 
  {
      if (clientdyn.available()) 
      {
        char c = clientdyn.read();
        Serial.print(c);
      }
  }
 
  if (!clientdyn.connected()) 
  {
        Serial.println();
        Serial.println("disconnecting.");
        clientdyn.stop();
  }
 
}
 
// This is just a little utility function to format an IP address as a string.
const char* ip_to_str(const uint8_t* ipAddr)
{
  static char buf[16];
  sprintf(buf, "%d.%d.%d.%d\0", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
  return buf;
}

Tutti i marchi e le immagini sono dei rispettivi proprietari che ne detengono tutti i diritti per legge.

Prerequisiti

Prima di procedere con la configurazione è necessario:

CONFIGURAZIONE
CONNESSIONE .IT NATIVA
Abbonamento consigliato
Standard dynDNS.it
Prossimi Step
  • Configura il Port Forwarding per instradare la connessione al dispositivo che desideri raggiungere;
  • Accedi alla Gestione Host per visualizzare il primo aggiornamento ricevuto.
Problemi con la configurazione?

Invia un’email al servizio di supporto.

Contattaci

dynDNS.it - DNS dinamico gratuito