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 ) ;
}
}
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.
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 !
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
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
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
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!
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.