Buonasera a tutti.
Ho un problema con l'hardware in oggetto.. Non riesco a collegare Arduino in rete.
Ho comperato di recente la Ethernet Shied (....purtroppo mi è arrivata non quella ufficiale Arduino ma quella SeeedStudio che mi pare non sia w5100 come quella Arduino ma W5200) e vorrei inserirla su arduino uno
Ho cercato info in rete ma niente.. ho provato mille sketch ma niente..
mi sapreste aiutare? il mio intento è che collegandomi all'IP dell'arduino riesca a vedere alcuni ingressi analogici e poter comandare 4 uscite ma , come dicevo, non riesco nemmeno a collegarlo in rete.. sulla shield non è presente nessun adesivo che mi indichi il mac address della scheda ethernet..
Mi sapreste indicare se serve caricare qualche libreria in particolare per questa shiled o va bene la <Ethernet.h> ?
Grazie in anticipo per l'aiuto.
.. perfetto.... ora funziona... ho caricato un esempio di quelli proposti e funziona...
ed il bello è che ero andato a cercare sul sito del produttore della scheda..
ma d'altronde lo avevo detto... "di Inglese ci capisco poco o niente..e questo mi penalizza"..
Un altro aiutino.. ora non ho capito bene ma non ho capito se questa scheda "mi occupa alcuni Pin I/O dell'Arduino che quindi non posso utilizzare .. o ho capito male?
Se io poi volessi modificare la pagina internet che mi appare è possibile farlo?
ora vedo se riesco ad integrare il comando di alcune uscite..
Grazie dell'aiuto e confido ancora in voi per le altre integrazioni..
bye
LongiarDuino:
Un altro aiutino.. ora non ho capito bene ma non ho capito se questa scheda "mi occupa alcuni Pin I/O dell'Arduino che quindi non posso utilizzare .. o ho capito male?
Esatto, hai capito bene ... come descritto nella pagina wiki dedicata, la scheda usa i seguenti pin :
Perfetto... grazie per la conferma... da gnorry pensavo si collegava tramite il protocollo ICSP..
Stavo già per cantar vittoria troppo presto..
ho trovato un problemino..
Dunque.. tutto funziona se nel IDE Arduino (anche con sketch vuoto) apro il monitor seriale.. altrimenti niente.. Riassumendo:
Ho caricato su Arduino questo Sketc :
#include <SPI.h>
#include <EthernetV2_0.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);
#define W5200_CS 10
#define SDCARD_CS 4
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(SDCARD_CS,OUTPUT);
digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
// 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("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// add a meta refresh tag, so the browser pulls again every 5 seconds:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
// output the value of each analog input pin
client.println("<body bgcolor='gray'>");
client.println ("<div class='dim'><h1>- LongiArduino - </h1>");
client.println("
");
client.println(" Prova di visione sensori a distanza");
client.println("
");
client.println("- - - - - - - - - - - - - - - - - - - - - -");
client.println("
");
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(" Canale analogico ");
client.print(analogChannel);
client.print(" Misura ");
client.print(sensorReading);
client.println("
");
}
client.println("</html>");
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 disonnected");
}
}
se poi apro Monitor seriale, lasciando quindi collegato il cavo USB, e successivamente su Internet Explorer vado all'indirizzo 192.168.1.177 mi trovo questa pagina che si aggiorna dopo 5 sec. (vedere allegato "WEB").
Poi ho provato a disconnettere Arduino, lo collego ad un altra alimentazione 12V DC, vado su un PC e ridigito lo stesso indirizzo web..non va..
Allora ho provato a ricollegare Arduino allo stesso PC su dal quale l'ho programmato senza però aprire il Software di programmazione, vado all'indirizzo Web.. ma niente..
Allora ho provato ad aprire il software..ma ancora niente..
Apro allora il Monitor seriale...e... funziona..anche interrogandolo da altri PC o cellulari..mi compaiono le misure..
Ho riprovato per conferma ristaccandolo dall'USB, chiudo il software, lo ricolllego all' USB, lo interrogo da cellulare ma niente, apro il software ma niente, apro il monitor seriale e mi compare sulla seriale " server is at 192.168.1.177" e da lì in avanti funziona..
Sembra quasi che per connettersi aspetti qualcosa sulla sua seriale..
dove potrebbe essere il problema..
Se poi esco da Monitor seriale e chiudo il software..continua a funzionare.. logicamente non posso togliere il cavo USB altrimenti si spegne essendo alimentato da lì.. ogni tanto "va in palla" se lo interrogo contemporaneamente da più PC ma questo è il "male minore"..
Ah dimenticavo.. nella scheda SD non ho inserito nessuna SD per ora..
Mmmm ... hai molte chiamate Serial.xxxxx() che, appunto, si aspettano un collegamento seriale funzionante (il tuo monitor seriale aperto) ... non vorrei che qualcuna, non trovando con chi parlare ... creasse il problema ...
Fai una rapida prova, commenta le righe in cui trovi Serial.xxxxx() e riprova (... tanto, se non hai il monitor seriale aperto ... il debug via seriale non serve a nulla)
Guglielmo
P.S. : Cortesemente, edita il tuo post ... il codice NON si racchiude tra i tag QUOTE, ma tra i tag CODE (è il bottone # a fianco di quello che hai usato per mettere il tag QUOTE). Grazie.
Ok grazie, provo a modificare il Post. Avevo usato direttamente la funzione del software di programmazione "Copia per il forum".
Per ora non riesco a recuperare una SD (più avanti la prenderò perché poi implementerei una funzione tipo DataLogger se riesco a capire come farla.. :P), magari per ora provo a "commentare" come suggeritomi..magari direttamente anche il Serial Begin provo a commentare .
Se non va magari interrompo quella pista. .... aia aia aia... filo e saldatore alla mano...
Grazie ancora
LongiarDuino:
Per ora non riesco a recuperare una SD (più avanti la prenderò perché poi implementerei una funzione tipo DataLogger se riesco a capire come farla..
Non credo che con il problema che stai incontrando la SD o le piste da tagliare c'entrino qualche cosa ...
LongiarDuino:
magari per ora provo a "commentare" come suggeritomi..magari direttamente anche il Serial Begin provo a commentare .
NON solo il Serial.begin(), ma TUTTE le chiamate a Serial ( Serial.print(), Serial.println(), Serial.write() ) ... ne hai un bel po' nel codice !
Ciao Guglielmo, si intendevo tutte quelle che fanno riferimento al Serial, ma nulla da fare ugualmente.
La pista indicata nel Wiki era già stata tagliata (probabilmente il rivenditore), ora prova con un'altra shield identica (anche lei tagliata).. poi se no va..bho.. strano che nessun'altro ha mai riscontrato il mio stesso problema.. sarà qualcosa che mi sfugge..
Potresti pubblicare il codice in cui hai eliminato la Serial (copia e incolla ... così siamo sicuri) ... così cerchiamo di ricontrollarlo assieme ... perché è veramente strano come comportamento ...
Ciao, ho provato a cambiare shield ma ho avuto lo stesso risultato.. da un lato mi tranquillizza ..2 schede su 2 guaste mi pare strano..più probabile sia un altro il problema..si però quale..? :~
#include <SPI.h>
#include <EthernetV2_0.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);
#define W5200_CS 10
#define SDCARD_CS 4
void setup() {
// Open serial communications and wait for port to open:
// Serial.begin(9600);
// Serial.read();
pinMode(SDCARD_CS,OUTPUT);
digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
// 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("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// add a meta refresh tag, so the browser pulls again every 5 seconds:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
// output the value of each analog input pin
client.println("<body bgcolor='gray'>");
client.println ("<div class='dim'><h1>- LongiArduino - </h1>");
client.println("
");
client.println(" Prova di visione sensori a distanza");
client.println("
");
client.println("- - - - - - - - - - - - - - - - - - - - - -");
client.println("
");
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(" Canale analogico ");
client.print(analogChannel);
client.print(" Misura ");
client.print(sensorReading);
client.println("
");
}
client.println("</html>");
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 disonnected");
}
}
.. ho un amico con Arduino2... quasi quasi me lo faccio portare e potrei provare anche con quello...
EDIT : il 2 non "digerisce" la libreria Ethernet di questo modello di shield... bho.. devo risolver con il mio.. come non so..
Non sono d'accordo, SeedStudio ha sicuramente tutta una serie di ottimi prodotti ... questo personalmente non l'ho mai provato, ma ne ho usati con soddisfazione molti altri
Hai provato la cosa che ti ho detto al post precedente ? Risultati ?
Allora, mi sembra di capre che stai usando il loro esempio "WebServer", giusto ?
Mi confermi che, anche alimentato in tutto tramite USB, non funziona nulla se non apri il monitor seriale ?
Se SI, puoi fare una prova ? Alimenta tramite USB, poi, senza scollegarla, pigia il tasto di "reset" di Arduino, aspetta qualche secondo e prova ...
L'apertura del monitor seriale effettua un reset ... visto mai c'entri qualche cosa ... smiley-roll
Certo che è uno strano comportamento ...
Guglielmo
siiiiiiiii…Grazie grazie grazie... ho provato a fare il reset e funziona... ho provato 4 o 5 volte per sicurezza.. farlo solo una pensavo potesse essere un caso che andasse.. :).. allora a sto punto mi servirebbe inserire un reset automatico al momento in cui riceve alimentazione ..sempre che sia fattibile.. magari nel codice..se entro tot secondi non si connette deve resettarsi....
Buonasera a tutti, ho provato con il seguente codice .
#include <SPI.h>
#include <EthernetV2_0.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);
#define W5200_CS 10
#define SDCARD_CS 4
void setup() {
// Open serial communications and wait for port to open:
// Serial.begin(9600);
// Serial.read();
pinMode(SDCARD_CS,OUTPUT);
digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
// start the Ethernet connection and the server:
delay(1000);
Ethernet.begin(mac, ip);
delay(2000);
server.begin();
delay(2000);
// Serial.print("server is at ");
// Serial.println(Ethernet.localIP());
}
void loop() {
// listen for incoming clients
delay(500);
EthernetClient client = server.available();
delay(500);
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("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// add a meta refresh tag, so the browser pulls again every 5 seconds:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
// output the value of each analog input pin
client.println("<body bgcolor='gray'>");
client.println ("<div class='dim'><h1>- LongiArduino - </h1>");
client.println("
");
client.println(" Prova di visione sensori a distanza");
client.println("
");
client.println("- - - - - - - - - - - - - - - - - - - - - -");
client.println("
");
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print(" Canale analogico ");
client.print(analogChannel);
client.print(" Misura ");
client.print(sensorReading);
client.println("
");
}
client.println("</html>");
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 disonnected");
}
}
Ciao,
dato che, una volta alimentato, se fai reset a mano funziona, è probabilmente un problema di tempi che occorrono a quello shield per andare "up" ...
Dato che il colloquio con la shield inizia qui :
delay(1000);
Ethernet.begin(mac, ip);
... io farei una veloce prova ad aumentare quel delay, a 3, 4 secondi ... anche 5 e vedere come si comporta. Se anche così non va ... è un bel problema ...