Configurazione Arduino

FreeStandardPlus
XXX
Configurazione Arduino - Configurazione - dynDNS.it - DNS dinamico gratuito
Problemi con la configurazione?
Contattaci

dynDNS.it permette di configurare le schede elettroniche Arduino utilizzando una connessione .it nativa, attivabile con gli abbonamenti FreeStandard o Plus.

Abbonamento consigliato
STANDARD

I passi da seguire per la configurazione sono i seguenti:

  1. Attivare il servizio Free o acquistare il servizio Standard o Plus fornito da dynDNS.it in modo da disporre di una connessione .it nativa che possa essere usata con Arduino.
  2. Accedere alla sezione Gestione Host per creare la propria connessione.
  3. Creare una nuova connessione indicando il nome host, scegliendo il dominio.
  4. Al termine della registrazione, prendere nota del nome host, della user e della password per poter configurare il proprio dispositivo.

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;
}