Arduino uno + Ethernet shield + Fastweb

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. =(

No l'applicazione no perchè è testata e ho visto dei video in cui funziona. Solo che ora anche se faccio http://192.168.1.150/?out=all mi dice che è impossibile trovare la pagina mentre prima mi scriveva una stringa tipo questa {“ip” : “192.168.10.23?, “devices” : [{ "type" : "light", "name" : "led", "out" : "5"}]}

Rettifico quanto detto ora ottengo

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
Client presente
GET /?out=all HTTP/1.1

OUT ALL
Client presente
GET /favicon.ico HTTP/1.1

l'unico problema è che quando provo ad accenderlo dall'applicazione mi dice di controllare la connessione con arduino

Gateway 255.255.255.0 ??

dall'Ide 1.0 la sintassi e' la seguente

Ethernet.begin(mac, ip, subnet, gateway);

brunello:
Gateway 255.255.255.0 ??

dall'Ide 1.0 la sintassi e' la seguente

Ethernet.begin(mac, ip, subnet, gateway);

Bravo Brunello, non mi ero proprio accorto di quell'errore.

Ho provato anche a sostituire la stringa ma non cambia nulla. Secondo il cellulare arduino non è connesso ad internet.

Come posso fare per verificare se è un problema di Fastweb o di impostazioni errate?

Dovresti andare a casa di qualcuno con un'altro operatore telefonico e provare li.