Salve a tutti sono entrato da poco nel mondo di arduino....oggi stavo per mettere mano sulla ethernet shield, infatti subito dopo aver compilato il programma "ethernet-client" presente negli esempi gia forniti dall'ide Arduino ho provato ad avviare da terminale il client telnet di windows e a collegarmi ma mi dice impossibile connettersi all'indirizzo IP 192.168.xxx.xxx porta 27 e a dire il vero non mi fa nemmeno vedere arduino tra l'elenco delle connessioni in basso a destra se qualcuno mi chiarisce questo dubbio ne sarei veramente grato...
Quale Ethernet Shield hai?
Ciao Uwe
Ciao....il modello è "Arduino Ethernet Shield R3"
Se carichi un esempio "client" è normale che l'Arduino non risponda. Non è istruito per farlo.
Devi caricare uno sketch "server".
Inoltre gli esempi sono fatti per dialogare principalmente sulla porta 80, a meno che non si cambi l'impostazione di default nello sketch.
Ho provato anche con l'esempio webserver e non va....quando inserisco l'ip nell'url mi dice errore caricamento pagina
Fai una cosa, metti qui il codice esatto che stai provando (... mi raccomando, come da regolamento, racchiuso tra gli appositi tag CODE) ... che vediamo se c'è qualche cosa che non va.
Guglielmo
Verifica anche che le 2 schede siano incastrate bene l'una sull'altra senza lasciare piedini fuori.
comunque quello nell'immagine è fatto apposta.
/*
Web ServerA simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.Circuit:
- Ethernet shield attached to pins 10, 11, 12, 13
- Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe*/
#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,1,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() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// 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("Connection: close"); // the connection will be closed after completion of the response
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("");
client.println("");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("
");
}
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();
Serial.println("client disconnected");
}
}
... a parte che lo avevo anche specificato ... usa in tag CODE ... ed invece hai usato i tag QUOTE (... che hanno tutt'altro scopo), quindi cortesemente edita e correggi, poi ... lo shield ethernet su che Arduino lo stai montando (... non mi sembra che tu lo abbia detto) ?
Guglielmo
P.S. : Il Mac address lo hai inventato ho hai usato quello che era presente su un eventuale sticker sullo shield ? ... perché mi risulta non valido.
Il tuo PC è nella stessa sottorete 192.168.1.x ?
@Guglielmo.
Il MAC è quello di default degli sketch di Arduino.
Ho un arduino UNO.....comunque ho subnet 255.255.255.0
@ Entrambi : Che nell'esempio sia riportato un MAC address NON valido (... basta che lo verificate QUI) non significa che sia cosa giusta .
Ci sono molti Router che effettuano il controllo sulla validità del MAC e si rifiutano di connettere la scheda se è un MAC ... "inesistente" (... è già accaduto in passato ad un altro utente proprio su questo forum !) !
@ DeFex_94 : Non c'era un MAC address scritto sulla confezione o sulla scheda ? Per escludere qualsiasi problema metticene uno valido, tipo questo : 90-A2-DA-0D-3F-5C ... e poi continuiamo le prove.
E SOSTITUISCI NEL TUO POST IL TAG QUOTE CON IL TAG CODE !!!!!
Guglielmo
Appunto. Con quella subnet se il PC fosse ad esempio su 192.168.2.51 non vedrebbe Arduino.
E per questo che ti richiedo: il PC è sulla stessa sottorete di Arduino?
Ho appena cambiato il MAC address mettendo quello scritto sulla shield di arduino...ma non va comunque
#include <[color=#CC6600]SPI[/color].h>
#include <[color=#CC6600]Ethernet[/color].h>
[color=#7E7E7E]// Enter a MAC address and IP address for your controller below.[/color]
[color=#7E7E7E]// The IP address will be dependent on your local network:[/color]
[color=#CC6600]byte[/color] mac[] = {
0x90,0xA2,0xDA,0x0F,0x49,0x54 };
[color=#CC6600]IPAddress[/color] ip(192,168,1,177);
[color=#7E7E7E]// Initialize the Ethernet server library[/color]
[color=#7E7E7E]// with the IP address and port you want to use [/color]
[color=#7E7E7E]// (port 80 is default for HTTP):[/color]
[color=#CC6600]EthernetServer[/color] server(80);
[color=#CC6600]void[/color] [color=#CC6600][b]setup[/b][/color]() {
[color=#7E7E7E]// Open serial communications and wait for port to open:[/color]
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]begin[/color](9600);
[color=#CC6600]while[/color] (![color=#CC6600][b]Serial[/b][/color]) {
; [color=#7E7E7E]// wait for serial port to connect. Needed for Leonardo only[/color]
}
[color=#7E7E7E]// start the Ethernet connection and the server:[/color]
[color=#CC6600]Ethernet[/color].[color=#CC6600]begin[/color](mac, ip);
server.[color=#CC6600]begin[/color]();
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]print[/color]([color=#006699]"server is at "[/color]);
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#CC6600]Ethernet[/color].[color=#CC6600]localIP[/color]());
}
[color=#CC6600]void[/color] [color=#CC6600][b]loop[/b][/color]() {
[color=#7E7E7E]// listen for incoming clients[/color]
[color=#CC6600]EthernetClient[/color] client = server.[color=#CC6600]available[/color]();
[color=#CC6600]if[/color] (client) {
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"new client"[/color]);
[color=#7E7E7E]// an http request ends with a blank line[/color]
[color=#CC6600]boolean[/color] currentLineIsBlank = [color=#CC6600]true[/color];
[color=#CC6600]while[/color] (client.[color=#CC6600]connected[/color]()) {
[color=#CC6600]if[/color] (client.[color=#CC6600]available[/color]()) {
[color=#CC6600]char[/color] c = client.[color=#CC6600]read[/color]();
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]write[/color](c);
[color=#7E7E7E]// if you've gotten to the end of the line (received a newline[/color]
[color=#7E7E7E]// character) and the line is blank, the http request has ended,[/color]
[color=#7E7E7E]// so you can send a reply[/color]
[color=#CC6600]if[/color] (c == [color=#006699]'\n'[/color] && currentLineIsBlank) {
[color=#7E7E7E]// send a standard http response header[/color]
client.[color=#CC6600]println[/color]([color=#006699]"HTTP/1.1 200 OK"[/color]);
client.[color=#CC6600]println[/color]([color=#006699]"Content-Type: text/html"[/color]);
client.[color=#CC6600]println[/color]([color=#006699]"Connection: close"[/color]); [color=#7E7E7E]// the connection will be closed after completion of the response[/color]
client.[color=#CC6600]println[/color]([color=#006699]"Refresh: 5"[/color]); [color=#7E7E7E]// refresh the page automatically every 5 sec[/color]
client.[color=#CC6600]println[/color]();
client.[color=#CC6600]println[/color]([color=#006699]"<!DOCTYPE HTML>"[/color]);
client.[color=#CC6600]println[/color]([color=#006699]"<html>"[/color]);
[color=#7E7E7E]// output the value of each analog input pin[/color]
[color=#CC6600]for[/color] ([color=#CC6600]int[/color] analogChannel = 0; analogChannel < 6; analogChannel++) {
[color=#CC6600]int[/color] sensorReading = [color=#CC6600]analogRead[/color](analogChannel);
client.[color=#CC6600]print[/color]([color=#006699]"analog input "[/color]);
client.[color=#CC6600]print[/color](analogChannel);
client.[color=#CC6600]print[/color]([color=#006699]" is "[/color]);
client.[color=#CC6600]print[/color](sensorReading);
client.[color=#CC6600]println[/color]([color=#006699]"
"[/color]);
}
client.[color=#CC6600]println[/color]([color=#006699]"</html>"[/color]);
[color=#CC6600]break[/color];
}
[color=#CC6600]if[/color] (c == [color=#006699]'\n'[/color]) {
[color=#7E7E7E]// you're starting a new line[/color]
currentLineIsBlank = [color=#CC6600]true[/color];
}
[color=#CC6600]else[/color] [color=#CC6600]if[/color] (c != [color=#006699]'\r'[/color]) {
[color=#7E7E7E]// you've gotten a character on the current line[/color]
currentLineIsBlank = [color=#CC6600]false[/color];
}
}
}
[color=#7E7E7E]// give the web browser time to receive the data[/color]
[color=#CC6600]delay[/color](1);
[color=#7E7E7E]// close the connection:[/color]
client.[color=#CC6600]stop[/color]();
[color=#CC6600][b]Serial[/b][/color].[color=#CC6600]println[/color]([color=#006699]"client disconnected"[/color]);
}
}
@DeFex_94 ... NON dovevi postarlo di nuovo, bastava che prendevi il tuo vecchio post e lo editavi ! E ... lo devi postare SENZA l'HTML, fai solo un copia e incolla ... come pretendi che lo leggiamo così ??? :o :o :o
A che router colleghi la scheda ? Passi attraverso un HUB ? ... insomma descrivici anche un po' il "contorno" altrimenti ... dobbiamo fare gli Indovini ...
Guglielmo
La scheda è collegata direttamente sulla porta Ethernet del portatile.
Ho risolto solamente collegando arduino allo switch, li dove è collegato anche l'access point e tramite wifi mi son connesso all'indirizzo IP assegnato alla shield (192.168.1.10) e mi è andato direttamente dentro alla pagina quello che ancora non capisco è come mai collegandolo direttamente alla porta ethernet del PC non riesca a vedermelo.....comunque collegarlo alla rete wifi era il mio obbiettivo finale quindi mi va bene anche così ma se qualcuno mi facesse chiarezza sul perchè non funziona nell'altro modo sarebbe comunque utile grazie....
Mmm ... avevi usato un cavo "crossed" ? Perché NON puoi collegare due porte ethernet così ...
... oggi le porte sugli switch e sui dispositivi più moderni sono automatiche e sanno come connettersi, ma non sono sicuro che la porta sullo shield ethernet o sul tuo PC sia in grado di capire la connessione e di effettuare il crossing delle connessioni.
Inoltre, anche se fosse, al tu PC avevi assegnato un IP fisso ? Perché collegato direttamente allo shield ... senza IP fisso non c'era nessuno ad assegnargliene uno ...
Guglielmo
Non è così immediato risponderti, bisogna vedere come il tuo SO ha impostato la scheda di rete, se è in modalità automatica la tua scheda eth del pc cerca i parametri di rete tramite DHCP dal router, se è scollegata dal router è ovvio che non funziona, per fare quello che chiedi devi impostare la scheda ethernet del pc in modo manuale con relativo IP... Gateway... DNS... Submask...sempre che l hardware sia in grado di riconoscere l'esigenza di fare un cross automatico.
Mi sa che ti devi studiare un po le reti LAN, connessioni e protocolli vari se vuoi giocare con queste cose.
Ciao
Ok grazie mille a tutti per il supporto e le risposte esaustive...Ciao!!!