Controllare il cambio di IP Pubblico e salvarne il valore in una stringa

Ciao a tutti,

ho realizzato un grandissimo sketch che sfrutta Arduino e modulo Ethernet.
Localmente non ho problemi ad accedere via rete al mio arduino e pilotarne le varie funzioni programmate.

Da remoto purtroppo non riesco perchè il mio ip è dinamico. Non ho la possibilità di automatizzare con un DynDns.

Voglio realizzare una soluzione nella quale sia l'arduino a rilevare l'ip pubblico della mia connessione e inviarmelo tramite un tweet di tweeter in modo tale che se l'ip della mia connessione cambia io posso sempre e comunque collegarmi.

L'invio tramite tweet già è funzionante e posso inviare qualunque cosa.

Mi manca la funzione che reperisce l'ip pubblico, la mette in una stringa che poi io invio come tweet.
Ho trovato IPIFY per Arduino ma pur mostrandomi l'IP nel monitor seriale (in quanto lo compone a pezzi) non capisco come ottenerlo per intero in una variabile.

Il codice che produce l'ip pubblico è il seguente :

void sendGET() //client function to send/receive GET request data.
{
  EthernetClient client;

 if (millis() - lastIPAttemptTime > requestIPInterval)  // se sono passati almeno x minuti dall'ultimo accesso lettura IP
        {
            lastIPAttemptTime = millis(); // note the time of this connect attempt:
          
                    if (client.connect(serverIPIFY, 80)) {  //starts client connection, checks for connection
                      //Serial.println("connected");
                      client.println("GET / HTTP/1.0"); //download text
                      client.println("Host: api.ipify.org");
                      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
                      Serial.print(c); //prints byte to serial monitor 
                    }

                    //Serial.println();
                    //Serial.println("disconnecting.");
                    //Serial.println("==================");
                    //Serial.println();
                    client.stop(); //stop client

              }
}

Come faccio ad inserire l'IP intero in una variabile ?

Una volta risolto questo problema potrò creare la funzione che controlla ogni tot se l'ip precedentemente letto è variato ed in caso affermativo lo invia come tweet.
Ho quindi bisogno che ci sia una stringa chiamata ip_rilevato ed una chiamata ip_ultima_lettura
in modo tale da poterli confrontare e se diversi inviare ip_ultima_lettura come tweet ed aggiornafre ip_rilevato=ip_ultima_lettura

Qualcuno mi aiuta?

Ma normamente per protezione un Router DSL ha un firewall che blocca tutte le richieste di collegamento da internet ad un apparecchio nella parte ethernet dietro.

Ciao Uwe

Se cerchi di fare tutto assieme non ci riesci, comincia con una cosa semplice …

… prendi l’esempio che si trova nel IDE Ethernet → WebClient. Li riceve un carattere alla volta. Il primo passo è mettere assieme tutti questi caratteri in una stringa (… ovvero in un array di char) ed imparare a trovare in detta stringa ciò che ti serve.

Puoi aiutarti con le funzioni che ti mette a disposizione la AVRlibc (sempre inclusa dall’IDE di Arduino) ed in particolare con le funzioni che trovi in <string.h>.

Il resto è abbastanza semplice, salvata la stringa in una array di appoggio, ogni volta che si riceve un nuovo IP e lo si mette nella stringa, lo si confronta con il vecchio (con la strcmp()) e, se è cambiato … lo si invia :wink:

Ma ripeto, inizia con una cosa semplice … giusto per ricevere l’IP e memorizzarlo, senza starti per ora a preoccupare di tweet o quant’altro !

Guglielmo