Arduino uno + Ethernet shield + Fastweb

Salve a tutti, il mio progetto è quello di accendere un led attraverso un cellulare android ma il mio problema è che con Fastweb non riesco a configurare l'indirizzo ip e il gateway o almeno ho letto che ci sono dei problemi qualcuno mi può aiutare?
Grazie in anticipo!

Questo topic andrebbe per correttezza spostato sulla sezione HARDWARE.

ho letto che ci sono dei problemi

Problemi su cosa? Ip pubblico?

Innanzi tutto dovresti specificare che tipo di apparati ha la tua rete, se fastweb è su fibra o adsl, dovresti possedere un router tuo all'interno della rete se vuoi raggiungerlo tramite ip pubblico, se vuoi raggiungerlo tramite rete locale devi impostarlo secondo i parametri del "router" di fastweb.
Inoltre serve sapere il sistema operativo che usi, altrimenti dirti come vedere la tua rete locale e indicarti sui setup è dura

Comunque se il tuo problema si riferisce ad un Ip pubblico con fastweb, il problema esiste con l'adsl, su fibra ottica invece riesci a ottenerlo senza costi aggiuntivi.

Grazie mille della risposta! Allora ho la fibra ottica di Fastweb e uso Windows 7. Ho provato in due modi per ottenere l'indirizzo ip ma nei due casi l'ottengo differente. Nel primo caso ho scritto dal prompt dei comandi ipconfig mentre nel secondo caso sono andato sul sito http://www.mioip.net/. Come è possibile? qual è quello "giusto"??
Grazie

ipconfig ti da quello interno (rete locale) che sarà un 192.168..
il sito mioip ti da quello pubblico che sarà 2...***

cos'è che vuoi fare ancora non lo hai detto :smiley:

Ah scusa hai ragione! è un progetto di domotica e devo accendere un led con un'applicazione di android. Questo è il link ma non riesco a farlo partire DomoticHome - Accendere e spegnere un led con un terminale Android - Androidiani.com

dietro il router hai 4 porte lan
192.168.1.127
192.168.1.128
192.168.1.129
192.168.1.130
che hanno ip fissi (dovrebbero essere questi sopra), collega arduino a una di queste
nella myfastpage devi configurare il router con l'indirizzo della porta utilizzata da arduino, sul sito viene evidenziato in verde l'ip occupato, lo selezioni e compili i campi
Ip di arduino, TCP/IP, scegli una porta

E' una configurazione per utenti esperti.

Io ho fastweb fibra e raggiungo arduino sia in rete locale che da ip pubblico, ma non lo faccio direttamente col router di fastweb ma con in cascata un secondo router programmato ad hoc per gestire tutta la rete, forward, gli accessi, oltre che ad arduino.
Quindi i passaggi sono quelli

ciao

Scusa l'ignoranza ma come devo configurarli?

Devo vedere le impostazioni ethernet sullo sketch .. dove lo hai preso il programma che hai caricato su arduino?

Mi sono registrato su un sito (http://www.domotichome.net/devices) e dovevo inserire ip, gateway, porta, subnet e in automatico mi generava il file.

Il campi da compilare saranno

  • IP ne scegli uno che rientri nel range della tua rete es 192.168.1.150
  • Gateway uno dei 4 IP che hai dietro il router, il gateway è la via che ti permette di uscire su internet.
    Quando connetti arduino al router purtroppo esso non lo vede, quindi sulla myfastpage non vedrai la porta lan occupata da un pc, non lo vede perchè arduino non ha il software adatto a rispondere alla interrogazioni del router, ma questo non vuoldire che non esiste. Arduino verrà inserito nella lista degli apparati collegati al router solo dopo averci interagito.
  • subnet guarda il tuo ip config dovrebbe essere 255.255.255.0

per vedere se si trova sulla porta giusta fai un ping dal prompt dei comandi se ti risponde TTL=128 allora l'ip del gatway è corretto, oppure collega il pc sulla seconda porta (router), fai un ipconfig e segnati quell'ip, riporta il pc nella porta 1 (router) e collega arduino sulla porta 2 (sempre del router), fai un ipconfig di verifica.

Il resto delle impostazioni da fare sul router fastweb te le ho dette prima, quando ti chiede la porta da usare metti pure 80

ciao

Grazie dei chiarimenti. Ho effettuato tutto come mi hai detto te ora dal cellulare vedo arduino collegato ma se vado per accendere il led non si accende, cosa può essere?

davix10:
il led non si accende, cosa può essere?

il led è bruciato
il led è collegato male
il led è collegato sul pin sbagliato
lo sketch comanda il pin sbagliato
manca il comando nello sketch
hai sbagliato a scrivere i comandi per il led
mia nonna ha fatto la zuppa
c'è un black-out
ti sei dimenticato di alimentare arduino
ecc ecc ecc

Questo è lo sketch:
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE };
byte ip[] = { 192 ,168 ,1 ,150 };
byte gateway[] = { 192 ,168 ,1 ,130 };
byte subnet[] = { 255 ,255 ,255 ,0 };
EthernetServer server(80);

String readString = String(30);

void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
delay(1000);
pinMode(5, OUTPUT);
digitalWrite(5, LOW);
Serial.begin(9600);
}

void loop(){
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 30)
{
readString = readString + c;
}
if (c == '\n') {
Serial.print(readString);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();

if(readString.startsWith("GET /?out=5&status=1"))
{Serial.print("\n 5 HIGH \n");
digitalWrite(5, HIGH);
client.print("{"status" : "1" , "out" : "");
client.print(5);
client.print(""}");
}
if(readString.startsWith("GET /?out=5&status=0"))
{Serial.print("\n 5 LOW \n");
digitalWrite(5, LOW);
client.print("{"status" : "0" , "out" : "");
client.print(5);
client.print(""}");
}

if(readString.startsWith("GET /?out=all"))
{
Serial.print("\n OUT ALL\n");
client.print("{"ip" : " 192.168.1.150", ");
client.print(""devices" : ");
client.print("[{ "type" : "light", "name" : "Led", "out" : "");
client.print("5");
client.print(""}");
client.print("]}");
}
readString="";
client.stop();
}
}
}
}
}

Il led non è bruciato perchè lo provato e il pin è il numero 5 quindi è giusto, lo sketch non lo so perchè quel sito me lo ha autogenerato e io non l'ho toccato.

Sul cellulare quando vado per accendere mi dice che c'è un errore e di controllare la connessione di arduino. Non capisco però come sia possibile.

Apri il serial monitor dell'ide e controlla l'output di Arduino.
Nel codice sono presenti delle stringhe per il debug.

Scusa ma come devo fare? sono alle prime armi con arduino. Ho aperto il serial monitor e poi cosa devo fare?

davix10:
Scusa ma come devo fare? sono alle prime armi con arduino. Ho aperto il serial monitor e poi cosa devo fare?

Ho leggermente modificato lo sketch inserendo qualche scritta sulla seriale.
Copialo nell'IDE e fai l'upload su Arduino.
Poi, lasciando Arduino collegato con la Usb e con il cavo Ethernet (ovviamente), apri il serial monitor.
Controlla la velocità di collegamento nella finestra del serial monitor. deve essere 9600 come quella dello sketch.

Una volta che vedi le scritte prova a collegarti con Android e controlla se stampa qualcos'altro nel serial monitor.

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE };
byte ip[] = { 
  192 ,168 ,1 ,150 };
byte gateway[] = { 
  192 ,168 ,1 ,130 };
byte subnet[] = { 
  255 ,255 ,255 ,0 };
EthernetServer server(80); 
String readString = String(30);

void setup(){
  delay(2000);
  Ethernet.begin(mac, ip, gateway, subnet);
  delay(1000);
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);
  Serial.begin(9600);
  Serial.print("Serial Start! at ");
  Serial.print(millis());
  Serial.println(" microsecond.");

  // Stampa dati Ethernet
  Serial.print("Local IP: ");
  Serial.println(Ethernet.localIP());
  Serial.print("SubnetMask: ");
  Serial.println(Ethernet.subnetMask());
  Serial.print("Gateway: ");
  Serial.println(Ethernet.gatewayIP()); 
  Serial.print("DNS Server: ");
  Serial.println(Ethernet.dnsServerIP());
} 

void loop(){
  EthernetClient client = server.available();
  if (client) {
    Serial.println("Client presente");
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 30)
        {
          readString = readString + c;
        }
        if (c == '\n') {
          Serial.print(readString);
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          if(readString.startsWith("GET /?out=5&status=1"))
          {
            Serial.print("\n 5 HIGH \n");
            digitalWrite(5, HIGH);
            client.print("{\"status\" : \"1\" , \"out\" : \"");
            client.print(5);
            client.print("\"}");
          }
          if(readString.startsWith("GET /?out=5&status=0"))
          {
            Serial.print("\n 5 LOW \n");
            digitalWrite(5, LOW);
            client.print("{\"status\" : \"0\" , \"out\" : \"");
            client.print(5);
            client.print("\"}");
          }

          if(readString.startsWith("GET /?out=all"))
          {
            Serial.print("\n OUT ALL\n");
            client.print("{\"ip\" : \" 192.168.1.150\", ");
            client.print("\"devices\" : ");
            client.print("[{ \"type\" : \"light\", \"name\" : \"Led\", \"out\" : \"");
            client.print("5");
            client.print("\"}");
            client.print("]}");
          }
          readString="";
          client.stop();
        }
      }
    }
  }
}

Serial Start! at 3300 microsecond.
Local IP: 192.168.1.150
SubnetMask: 255.255.255.0
Gateway: 255.255.255.0
DNS Server: 192.168.1.130
Client presente
30GET /?out=all HTTP/1.1
Client presente
GET /?out=all HTTP/1.1

OUT ALL

questo è ciò che mi stampa solo che da cellulare c'è sempre lo stesso errore di connessione.

Ho provato a rifarlo adesso e mi esce solo la prima parte

Serial Start! at 3300 microsecond.
Local IP: 192.168.1.150
SubnetMask: 255.255.255.0
Gateway: 255.255.255.0
DNS Server: 192.168.1.130

davix10:

Serial Start! at 3300 microsecond.
Local IP: 192.168.1.150
SubnetMask: 255.255.255.0
Gateway: 255.255.255.0
DNS Server: 192.168.1.130
Client presente
30GET /?out=all HTTP/1.1
Client presente
GET /?out=all HTTP/1.1

OUT ALL

questo è ciò che mi stampa solo che da cellulare c'è sempre lo stesso errore di connessione.

Se l'errore è nell'applicazione android non so che dirti. =(