Lo shield che si trova tra gli esempi dell ide funziona tranquillamente prova con quello, o almeno dacci un po' più di informazioni su quello che hai caricato tu, direi che servono maggiori info....
Un po' tutto il resto? :))))
Versione IDE usata, arduino usato, tipo di eth shield usata wiz od altro.
Volendo anche sistema operativo
Inoltre è sempre buona cosa postare lo sketch che hai effettivamente uploadato, in modo da rispondere automaticamente a diverse domande.
E.g. hai usato gli sketch di esempio ma hai cambiato i parametri per la tua rete?
IP, Gateway ecc?
L'eth è connessa con un cavo cross? ed a che cosa? Al pc o direttamente al router?
Alcuni router non consentono di vedere arduino come webserver, c'è un workaround per questo, ma prima aspettiamo qualche info in più
Se il tuo sketch è REALMENTE uguale a quello del link... direi che il problema è che non hai configurato l'arduino per accedere alla tua rete.
Non hai detto se usi DHCP od una configurazione di IP statici.
Io consiglio la seconda, in questo caso devi cambiare i parametri sia su arduino sia sulla tua rete domestica.
Allora cominciamo.
L'ide usato è la versione 1.0
Uso Arduino UNO ma non so come spiegarti il tipo di eth shield usata.
Il sistema operativo è Linux Ubuntu 12.04.
Lo sketch è esattamente quello e non ho dovuto cambiare le impostazioni di rete in quanto l'ip (statico) è sulla mia stessa rete (ping funziona).
L'eth è connessa ad uno switch.
erpomata:
Non ho ancora provato a collegalo al pc perchè non ho il cavo cross dovrò aspettare Lunedì.
Al pc puoi provare a collegarla anche con un cavo normale, in diverse discussioni si è detto che la scheda ethernet del pc si occupa di crossare
In ogni caso un tentativo puoi farlo per toglierti il dubbio.
E' un clone cinese che monta il chip wiz.
Assumendo che il clone cinese sia effettivamente quello che dice di essere dovrebbe equivalere alla shield ufficiale.
Ergo, lo switch rimane il sospettato numero 1
Ok il problema del cavo cross non esiste era un cavo fallato (meglio buttarlo).
Però c'è sempre il problema che non funziona il webserver, neanche collegandolo direttamente al pc.
Ho messo delle Serial.println("client" + c); e vedo scorrere parecchi caratteri ma è come se al client (il browser) non arrivasse mai nessuna risposta.
Collega l'Arduino con la Ethernet Shield allo switch o al router e prova questo sketch:
/*
Udp NTP Client
Get the time from a Network Time Protocol (NTP) time server
Demonstrates use of UDP sendPacket and ReceivePacket
For more on NTP time servers and the messages needed to communicate with them,
see http://en.wikipedia.org/wiki/Network_Time_Protocol
created 4 Sep 2010
by Michael Margolis
modified 17 Sep 2010
by Tom Igoe
This code is in the public domain.
*/
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA };
unsigned int localPort = 8888; // local port to listen for UDP packets
IPAddress timeServer(192, 43, 244, 18); // time.nist.gov NTP server
const int NTP_PACKET_SIZE= 48; // NTP time stamp is in the first 48 bytes of the message
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;
void setup()
{
Serial.begin(9600);
Serial.println("Arduino start!");
// start Ethernet
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
else
{
Serial.println("Ethernet configured using DHCP");
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());
}
if (Udp.begin(localPort) == 0) {
Serial.println("No UDP sockets available");
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
else
{
Serial.println("UDP sockets ON");
}
}
void loop()
{
Serial.println("Send Packet");
sendNTPpacket(timeServer); // send an NTP packet to a time server
// wait to see if a reply is available
delay(1000);
if ( Udp.parsePacket() ) {
// We've received a packet, read the data from it
Udp.read(packetBuffer,NTP_PACKET_SIZE); // read the packet into the buffer
//the timestamp starts at byte 40 of the received packet and is four bytes,
// or two words, long. First, esxtract the two words:
unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
// combine the four bytes (two words) into a long integer
// this is NTP time (seconds since Jan 1 1900):
unsigned long secsSince1900 = highWord << 16 | lowWord;
Serial.print("Seconds since Jan 1 1900 = " );
Serial.println(secsSince1900);
// now convert NTP time into everyday time:
Serial.print("Unix time = ");
// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
const unsigned long seventyYears = 2208988800UL;
// subtract seventy years:
unsigned long epoch = secsSince1900 - seventyYears;
// print Unix time:
Serial.println(epoch);
// print the hour, minute and second:
Serial.print("The UTC time is "); // UTC is the time at Greenwich Meridian (GMT)
Serial.print((epoch % 86400L) / 3600); // print the hour (86400 equals secs per day)
Serial.print(':');
if ( ((epoch % 3600) / 60) < 10 ) {
// In the first 10 minutes of each hour, we'll want a leading '0'
Serial.print('0');
}
Serial.print((epoch % 3600) / 60); // print the minute (3600 equals secs per minute)
Serial.print(':');
if ( (epoch % 60) < 10 ) {
// In the first 10 seconds of each minute, we'll want a leading '0'
Serial.print('0');
}
Serial.println(epoch %60); // print the second
}
// wait ten seconds before asking for the time again
delay(10000);
}
// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address)
{
// set all bytes in the buffer to 0
memset(packetBuffer, 0, NTP_PACKET_SIZE);
// Initialize values needed to form NTP request
// (see URL above for details on the packets)
packetBuffer[0] = 0b11100011; // LI, Version, Mode
packetBuffer[1] = 0; // Stratum, or type of clock
packetBuffer[2] = 6; // Polling Interval
packetBuffer[3] = 0xEC; // Peer Clock Precision
// 8 bytes of zero for Root Delay & Root Dispersion
packetBuffer[12] = 49;
packetBuffer[13] = 0x4E;
packetBuffer[14] = 49;
packetBuffer[15] = 52;
// all NTP fields have been given values, now
// you can send a packet requesting a timestamp:
Udp.beginPacket(address, 123); //NTP requests are to port 123
Udp.write(packetBuffer,NTP_PACKET_SIZE);
Udp.endPacket();
}
E' quello relativo al client NTP.
Lo puoi usare per controllare il funzionamento della scheda.
Se questo funziona... ci si può dedicare a scoprire l'errore nel codice del Web Server.
visto che usi ubuntu ed hai pure una nuovissima release (la 12.04 è ancora in beta?) verifica che versione di gcc-avr hai.
Se hai una 4.5.x allora portesti aver qualche problema di compilazione e molto probabilmente ti troverà un errore nel file "IPAddress.h". Abitlita la modalità verbose e cerca nell'output se ci sono degli errori che menzionano questo file (facili da trovare...gli errori sono in rosso e non saranno tanti).
erpomata:
Ho paura di aver preso una fregatura. smiley-cry smiley-evil
suvvia, comprando un clone cinese, low-cost, sicuramente avevi già preso in considerazione l'eventualità!
Arduino start!
Local IP: 192.168.1.177
SubnetMask: 255.255.255.0
Gateway: 192.168.1.1
DNS Server: 192.168.1.1
UDP sockets ON
Send Packet
Seconds since Jan 1 1900 = 666952228
Unix time = 2752930724
The UTC time is 14:58:44
Send Packet
Seconds since Jan 1 1900 = 2196128072
Unix time = 4282106568
The UTC time is 10:02:48
Send Packet
Seconds since Jan 1 1900 = 440272875
Unix time = 2526251371
The UTC time is 0:29:31
Send Packet
Seconds since Jan 1 1900 = 2624122937
Unix time = 415134137
The UTC time is 19:02:17
Send Packet
Seconds since Jan 1 1900 = 1241634307
Unix time = 3327612803
The UTC time is 0:53:23
Send Packet
Seconds since Jan 1 1900 = 3702448175
Unix time = 1493459375
The UTC time is 9:49:35
Send Packet
Seconds since Jan 1 1900 = 1956860176
Unix time = 4042838672
The UTC time is 2:44:32
Send Packet
Seconds since Jan 1 1900 = 3321892416
Unix time = 1112903616
The UTC time is 19:53:36
Send Packet
Seconds since Jan 1 1900 = 1684396416
Unix time = 3770374912
The UTC time is 14:21:52
Send Packet
Seconds since Jan 1 1900 = 2383393361
Unix time = 174404561
The UTC time is 13:42:41
Send Packet
Seconds since Jan 1 1900 = 4014228534
Unix time = 1805239734
The UTC time is 23:28:54
Ho avuto problemi col DHCP (non prendeva l'indirizzo IP), ho dovuto impostarlo a mano ma poco male.
Dovrebbe aver funzionato. O no?
Per quanto riguarda Ubuntu ho la 11.10 mi sono confuso con la versione che uso per gli esperimenti in ufficio. 8)
Per quanto riguarda la gcc ho la 4.6.
Ho compilato lo sketch con la IDE 1.0 e col mio Arduino su Ethernet Shield Ufficiale funziona.
Hai detto che il PC pinga l'Arduino, quindi non è un problema di indirizzi; anche se hai avuto un problema col DHCP (ma può essere che sia disattivato sul Router).
Hai disattivato eventuali firewall, antivirus o impostazioni che potrebbero bloccare il browser?