Arduino Webserver non risponde

Scusate la mia ignoranza...
sto usando per la prima volta la funzione WebServer utilizzando un Arduino Uno + Ethernet Shield

Carico il classico script di esempio che c'è in File > Example > Ethernet > WebServer
a) Immetto come indirizzo IP compatibile con la mia rete locale 192.168.0.177
b) il router Netgear DNG3500 lo vede correttamente come device collegata
c) pingo l'indirizzo 192.168.0.177 che mi risponde correttamente
d) ma se dal browser mi collego alla pagina http://192.168.0.177... non la trova! :frowning:

Perchè???
Sbaglio qualcosa?

Che IDE usi? E poi cosa speri di trovare? Mi pare che quella sia una pagina-scheletro vuota.

Devi metterci una pagina HTML se vuoi vedere... una pagina HTML!

Ho appena aperto l'esempio: come immaginavo.

C'è un nulla mischiato a niente!

non credo...
lo script è questo e dovrebbe dare come output il valore delle porte analogiche attive (io ho messo un LM35 sulla A0)... dovrebbe dare ou output come questo... http://www.logicaprogrammabile.it/come-controllare-arduino-da-internet/

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0, 177);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup()
{
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();

// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(analogRead(analogChannel));
client.println("
");
}
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

L'esempio che ho io è diverso, è solo l'impalcatura del Web server.

Adesso compilo il tuo codice e ti dico cosa vedo.

Ma che libreria Ethernet è?

Ci sono degli errori nel codice che non danno luogo alla compilazione. Ora li ho corretti, ma pur compilando, non dà nessun Output.

Tra l'altro hai dichiarato l' IP Adress in una maniera errata:

IPAddress ip(192,168,0, 177);

Questa è quella corretta:

byte ip[] = { 192,168,0, 177 };

Questo è il codice corretto:

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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0, 177 };

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
Server server(80);

void setup()
{
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
// listen for incoming clients
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();

// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(analogRead(analogChannel));
client.println("
");
}
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

Ok, adesso che è corretto mi funziona.

Non ho collegato nulla agli ingressi Analogici, quindi mi dà valori a babbo. Questo è l'Output:

analog input 0 is 651
analog input 1 is 494
analog input 2 is 426
analog input 3 is 363
analog input 4 is 326
analog input 5 is 313

Fammi sapere

c'è qualcosa che non mi torna...

a me mi da erori di compilazione dicendomi che devo sostituire
Server server(80); ---> con EthernetServer server(80);
EthernetClient client ---> con EthernetClient

dopo la correzione compila correttamente ma poi il browser non trova la pagina all'indirizzo 192.168.0.177... menter viene ingato correttamente

sto usando un Arduino Uno con la Ethernet shield originale con il W5100, da cosa può dipendere?

Cambia libreria. Ti passo la mia che va bene sulla 0022 e 0023.

Dammi la mail e scarica l'allegato che ti mando.

La decomprimi e la metti nella cartella delle Librerie: C:\arduino-0023\libraries (o dove hai installato l'IDE).

comunque se guardi la documentazione ufficiale http://arduino.cc/it/Reference/Ethernet
i comandi sono corretti..

EthernetServer
EthernetClient
IPaddress

per la cronaca avevo scaricato dal sito ufficiale e quindi sto utilizzando la versione 1.0... probabilmente il problema è generato da questo

adesso proverò con la 0023

Ecco, infatti avevo messo come prima richiesta: che IDE usi?

Evidentemente la Libreria è stata modificata nelle dichiarazioni.

ho appena scaricato e installato la 0023... ho fatto girare il tuo script ..tale e e quale... ma nulla di fatto

alla pagina 192.168.0.177 non risponde il server web nemmeno se preciso il gateway, il subnet e la porta

Scusa la domanda idiota: ma hai montata la scheda Ethernet Shield? E se si, la hai collegata con un cavo Ethernet al Router con un cavo non cross-link (non incrociato, ma diretto)?

si ovviamente, peerché altrimenti non lo trovrei pingandolo!
Ho anche cambiato cavo ethernet ma nulla da fare.
Nn è un problema hardware, ma di servizio, è come se il servizio di webserver non rispondesse alla porta 80... o fosse inibito.
non vorrei fosse un problema di configurazione del router, ho un NETGEAR DNG3500 ma non vedo dove potrebbe essere il problema
ho anche provato ad attivare un servizio personalizzato tipo come si fa con emule... per l'indirizzo 192.168.0.177 alla porta 80

ho anche provato a cambiare router... e addirittura a collegare PC e Arduino ad un semplice switch... ovviamente è possibile pingarlo ma non risponde alla pagina web :frowning:

per stasera è anche troppo.... a domani.

Il configurare il Porting del Router ti serve solo se devi "vedere" il tuo Arduino da fuori (internet).

Hai provato a usare un Browser diverso? Il cavo è cross-link? Hai provato a cambiarlo?

Non è che hai già qualcosa all'indirizzo IP che hai dato all'Arduino? Prova a cambiare il 177 finale.

Sei sicuro che la subnet sia 192.168.0 (ZERO).177 e non 192.168.1 (UNO). 177?

Non è che hai collegato qualcosa ai pin dove Arduino comunica con lo Shield Eth?

Ho cambiato 2 router e due cavi (entrambi patch cord cat5).
Non è un problema hardware perché pingando... il PC lo trova all'indirizzo 192.168.0.177 o qualsiasi altro della stessa sottorete.
La sottorete è quella del router 192.168.0.xxx, non è un problema di router o di sottorete perchè ho anche provato a collegare solo PC e Arduino ad un semplice switch 5 porte, si pinga ma come al solito il webserver non risponde.
Ho provato con IE8, Firefox e Chrome.
Ho disattivato Ad-Aware.
Ho anche provato a staccare tutti i collegamenti con il sensore di temperatura e a collegare solo Arduino+Ethernet shield... ma niente da fare.

Stamattina, colto dalla disperazione prima di partire per il lavoro mi sono detto... facciamo un ultimo tentativo:

  • ho acceso il PC
  • ho alimentato via USB l'Arduino + Ethernet shield
  • ho avviato IE8 e chiamato il 192.168.0.177
    ...e miracolosamente ha risposto!!!

Ho riprovato altre due volte a ridigitare l'indirizzo.... ma la festa è finita!!! ...non risponde più :frowning:
Così anche riprovando con Firefox e Chrome.
Temendo fosse un problema di PC ho anche provato a collegarmi con il notebook... ma nulla da fare!

La cosa si fa ancora più misteriosa...

HEEELLLPPP! =(

Ciao Zuzzuro,
quando specifichi il gateway e la subnetmask, il comando di inizializzazione delle scheda non è "Ethernet.begin(mac, ip);" ma diventa "Ethernet.begin(mac, ip, gateway, subnet);". :stuck_out_tongue:
Controlla di averlo modificato. :wink:

Guarda questo post http://arduino.cc/forum/index.php/topic,83878.0.html , i router sono della stessa generazione

Ciao