Problema con EthernetShield !!

Salve a tutti! sto cercando di realizzare un sistema che acquisisca la temperatura e la pubblichi su un sito internet.

ho a disposizione una index.php che ha il compito di creare la pagina html con i dati ricevuti e un file temp.php che genera un file temp.cvs quando il dato viene ricevuto da arduino. Adesso andando per esclusione, ieri sono riuscito a farlo funzionare poi non sò per quale motivo non ha più funzionato, quindi penso sia un problema software di arduino e non dei file php. Qualcuno gentilmente potrebbe dare un'occhiata al software?

#include <SPI.h> 
#include <Ethernet.h> 
 
int sensor = A0; 
// Pin analogico 0 di Arduino 
int temp = 0.0 ; 


 
byte mac [] = { 0x70, 0xF1, 0xA1, 0x04, 0x79, 0x49 } ; 
// Indirizzo MAC da assegnare ad Arduino 
byte ip [] = { 192, 168, 1, 2 } ; 
// Indirizzo IP da assegnare ad Arduino 
byte server [] = { 62, 149, 142,00 } ; 
// Indirizzo del sito Server a cui collegarsi per lo script PHP  
byte gateway [] = { 192, 168, 1, 1 } ; 
// Indirizzo del Gateway della propria rete 
byte subnet [] = { 255, 255, 255, 0 } ; 
// Subnet mask della propria rete 
 
void setup
() 
{ 
 
Serial.begin ( 9600 ) ; 
// Inizializzazione per l'utilizzo della seriale 
 
Ethernet.begin ( mac, ip, gateway, subnet ); 
// Inizializzazione per l'utilizzo della rete 
} 
 
void loop () 
{ 
  
temp= analogRead (sensor)*500/1024.0;

delay
 ( 15000 ) ; 
// Attesa di 15 secondi 
 invia_dati () ; 
// Funzione per l'nvio dei dati allo script PHP 
} 
 
void invia_dati() 
{ 
 EthernetClient client  ; 
Serial.print
 ( " Connecting..." ) ; 
// L'oggetto Serial serve solo a monitorale cosa accade 
 

// Inizia la connessione al server 
 
 
if ( client.connect (server, 80 ) ) 
 { 
 
Serial.println( " Connected. " ) ; 
 
Serial.println ( temp ) ; 
// Le seguenti istruzion inviano il dato allo script PHP: 
 client.print ( "GET http://www.********.it/arduino/temp.php?temp= " ) ; 
 client.print (temp) ; 
 client.println (" HTTP/1.1" ) ; 
 client.println ( "Host: http://www.***********.it" ) ; 
 client.println () ; 
 
Serial.println( "disconnecting." ) ;  client.stop(); 
 } 
 
 
// if the server's disconnected, stop the client: 
 
else 
 { 
 
Serial.println(); 
 
Serial.println( "disconnecting." ) ; 
 client.stop(); 
 
while
 ( client.status() != 0 ) 
delay ( 5 ) ; 
 } 
}

Dunque facciamo un punto della situazione:

qui scrvi che la scheda è cinese e dovrebbe essere compatibile Ethernet shield compatibile non funziona - #5 by system - Hardware - Arduino Forum ma ti da problemi, tutti ti danno consigli ma alla fine tu non rispondi e non si sa che fine hanno fatto i tentativi, in poche parole "prendi" e non dici più nulla.

ora apri 2 nuovi treadh identici uno su software e uno su hardware
questo che stiamo leggendo e questo http://forum.arduino.cc/index.php?topic=240076.msg1722337#msg1722337

Adesso andando per esclusione, ieri sono riuscito a farlo funzionare

Esclusione di cosa? dall'altra parte stanno ancora aspettando se i consigli dati hanno avuto successo.

Ci dovresti spiegare perchè hai comprato cinese ..... e non mi dire che è per risparmiare soldi, perchè li stai spendendo in salute, in tempo perso e diventare scemo tu e noi a seguirti di qua e di la :). La ethernet made in Italy è già complicata da usare e spesso da problemi, figurati una cinesata dove omettono alcuni componenti per spendere meno in produzione.

Comunque a parte questo sono stanco di vedere su questo furum persone che chiedono aiuto e non si degnano di rispondere quando hanno risolto, e soprattutto descrivere come hanno fatto a risolvere (che potrebbe essere di aiuto ad altri), ma si ripresentano solo quando hanno un altro problema.

ciao

Rispondo a tutte le domande:
1° : non è stata scelta mia comprare "cinese" anche se cinese non è
2°: è un progetto scolastico e io sto dando una mano
3°: non ho avuto nessun successo e quindi non ho pubblicato niente per quel motivo ovvero non sono riuscito a risolvere
4°: ho acquistato "italiano" shield originale e quindi ho risolto quel problema.
5°: sono nuovo da queste parti, sono cose nuove per me e non ho ancora capito bene come funziona questo forum
5° : adesso sto cercando di risolvere questo problema se qualcuno è così gentile da dare una mano bene !

gsmpeppe:
5°: sono nuovo da queste parti, sono cose nuove per me e non ho ancora capito bene come funziona questo forum

Questo NON ti esime dal leggere il regolamento e dal rispettarlo !

Il crossposting è proibito da regolamento (punto 13.) quindi .. una delle tue discussioni verrà presto chiusa da un moderatore.

Guglielmo

gsmpeppe:
dimenticavo..io non devo dare spiegazioni a nessuno se ho comprato cinese sono fatti miei

... oh ... perfetto ... questo è l'atteggiamento ideale per ottenere delle risposte !!! Complimenti !

Guglielmo

Chiedo scusa ma quando è troppo è troppo! il regolamento l'ho già letto comunque grazie lo stesso!

Questo è il modo NON giusto di porsi in un forum. Proprio perché sei nuovo mi limito solo a ricordarti che nel regolamento che hai letto c'è espressamente scritto che Si deve rispondere a quanto ti viene chiesto e non pensare che non ci sia altro da dire e non pensare che una risposta la puoi non dare. Inoltre qui nessuno è pagato per dare aiuto, lo si fa "per cortesia", se questo è il tuo modo di porti mi sa che non otterrai nulla.

Ha perfettamente ragione ma visto che non avevo risolto non ho chiuso il precedente post. Poi ne ho fatto un altro perchè ho cambiato shield e funzionava. L'ho fatto in sezione software e nessuno mi ha risposto e ho pensato che forse la sezione non era quella adatta e ho rifatto tutto qui. Adesso che viene qualcuno a dirmi non hai chiuso il post, mi da fastidio chi cerca solo aiuto (anche se non so fino a che punto sia di aiuto specificando che non ho risolto) e devi darmi spiegazioni sull'acquisto della "cinesata" non so se è "normale". Comunque chiedo scusa! come non detto :wink:

gsmpeppe:
Poi ne ho fatto un altro perchè ho cambiato shield e funzionava

Capisci però che se non lo dici, chi ti ha seguito ed aiutato non capisce più una mazza :grin:
Rimane convinto che hai una certa shield e poi invece ne usi un'altra.

Ma a me interessava fare funzionare quella. Era ovvio che al posto di scervellarmi acquistavo una shield originale. Ma visto che avevo a disposizione quella mi interessava fare funzionare quella

Conclusione del discorso, per trovare qualcuno che gentilmente e per favore, mi possa aiutare in questo problema cosa devo fare?

Ma le varie Serial.println() del programma che stampano su Serial Monitor ?
Non funziona più è un pò generico.

Ho cercato di aggiustarlo un pò, forse così è più chiaro. Sono partito dall'esempio presente sul IDE e ho cercato di adattarlo per inviare la richiesta al server. Il problema non è sicuramente il file php che riceve il dato perchè ho provato su browser a fare la richiesta manualmente e quindi scrivendo www.spazdiprova.altervista.org/temp.php?temp= 2 assegnando quindi un valore alla variabile. In questo modo viene creato un file CVS e iniziano a comparire i dati sulla index. Il problema non è la shield ne arduino perchè ho provato con altri sketch webclient come ad esempio il twitterwebclient e tutto funziona. IL problema sta proprio nel codice ma non riesco a capire dove!

#include <SPI.h> 
#include <Ethernet.h> 
 
const int sensor = A0; 
// Pin analogico 0 di Arduino 
int temp; 


 
byte
 mac [] = { 0x70, 0xF1, 0xA1, 0x04, 0x79, 0x49 } ; 
// Indirizzo MAC da assegnare ad Arduino 
byte
 ip [] = { 192, 168, 1, 2 } ; 
// Indirizzo IP da assegnare ad Arduino 
byte
 server [] = { 144, 76, 107, 78 } ; 

byte
 gateway [] = { 192, 168, 1, 1 } ; 
// Indirizzo del Gateway della propria rete 
byte
 subnet [] = { 255, 255, 255, 0 } ; 
// Subnet mask della propria rete 
EthernetClient client;

 
void setup() 
{ 
 
  Ethernet.begin( mac, ip, gateway, subnet ); 
// Inizializzazione per l'utilizzo della rete 
 Serial.begin (9600);
} 
 
void loop() 
{ 

temp=analogRead(sensor)*500/1024.0;

delay(15000);


// Converte il valore di 10 bit ADC rilevati sul pin A0 in volt 
invia_dati () ; 

}


void
 invia_dati() 
{ 
 
Serial.print (" Connecting..." ) ; 
// L'oggetto Serial serve solo a monitorale cosa accade 
 
EthernetClient client  ; 
// Inizia la connessione al server 
 
 
if( client.connect (server,80) ) 
 { 
 
Serial.println( " Connected. " ) ; 
 
Serial.println ( temp ) ; 
// Le seguenti istruzion inviano il dato allo script PHP: 
 client.print ( "GET http://spazdiprova.altervista.org/temp.php?temp=" ) ; 
 client.print ( temp ) ; 
 client.println(" HTTP/1.1" ) ; 
 client.println ( "Host: http://spazdiprova.altervista.org" ) ; 
 client.println () ; 
 
Serial.println ( "disconnecting..." ) ; 
 client.stop(); 
 } 
 
 
// if the server's disconnected, stop the client: 
 
else 
 { 
 
Serial.println (); 
 
Serial.println ( "disconnecting." ) ; 
 client.stop(); 
 
while ( client.status() != 0 ) 
delay ( 5 ) ; 
 } 
}

Ripeto la domanda. Il programma ha una serie di Serial.print (" Connecting..." ) ;
Sul monitor seriale dell'IDE appaiono queste scritte ?

si ma subito dopo compare disconnecting

Forse ho trovato.
Prima di tutto quando hai un codice così lungo premi CTRL+T che lo indenta per bene,
poi togli quei 24mila kg di righe vuote che non servono a nulla:

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

const byte sensor = A0;  // Pin analogico 0 di Arduino 
int temp; 
byte mac[]     = { 0x70, 0xF1, 0xA1, 0x04, 0x79, 0x49 };  // Indirizzo MAC da assegnare ad Arduino 
byte ip[]      = { 192, 168, 1, 2 };   // Indirizzo IP da assegnare ad Arduino 
byte server[]  = { 144, 76, 107, 78 };  
byte gateway[] = { 192, 168, 1, 1 };   // Indirizzo del Gateway della propria rete 
byte subnet [] = { 255, 255, 255, 0 }; // Subnet mask della propria rete 

EthernetClient client;

void setup() 
{ // Inizializzazione per l'utilizzo della rete 
  Ethernet.begin( mac, ip, gateway, subnet ); 
  Serial.begin (9600);
} 

void loop() 
{ temp = analogRead(sensor)*500/1024.0;
  delay(15000);
  // Converte il valore di 10 bit ADC rilevati sul pin A0 in volt 
  invia_dati () ; 
}

void invia_dati() 
{ Serial.print (" Connecting..." ) ; 
  // L'oggetto Serial serve solo a monitorale cosa accade 
  EthernetClient client; 
  // Inizia la connessione al server 
  if( client.connect (server,80) ) 
  { Serial.println( " Connected. " ) ; 
    Serial.println ( temp ) ; 
    // Le seguenti istruzion inviano il dato allo script PHP: 
    client.print ( "GET http://spazdiprova.altervista.org/temp.php?temp=" ) ; 
    client.print ( temp ) ; 
    client.println(" HTTP/1.1" ) ; 
    client.println ( "Host: http://spazdiprova.altervista.org" ) ; 
    client.println () ; 
    Serial.println ( "disconnecting..." ) ; 
    client.stop(); 
  } 
  // if the server's disconnected, stop the client: 
  else 
  { Serial.println (); 
    Serial.println ( "disconnecting." ) ; 
    client.stop(); 
    while ( client.status() != 0 ) delay (5) ; 
  } 
}

Ora, nel tuo sketch hai creato una funzione invia_dati(), e fin qui tutto bene.
Però dentro CREI DI NUOVO una variabile EthernetClient client
Quella esiste già, è all'inizio. Se la metti dentro la funzione, appena quella finisce, viene distrutta e perdi la connessione.
Togli quella riga.

Niente ! niente da fare....ho pensato sia un problema di permessi sul server..ho provato di tutto ma non riesce a connettere!