Problema con Ethernet shield e il MAC su Vodafone station

@pitusso , non ho scritto roba segreta nel MP, lo ho solo invitato sulla chat di un'altro sito (indovinate quale), per dargli una mano più rapidamente e poter fare prove realtime, fino a che non ho capito che altervista funziona con i virtualserver e dns interno, tutto qui :) io per fare una cosa simile ho usato un host gratuito che dà sia il db mysql che il supporto per php e qualche riga di json. per adesso sono fermo (anche con questo progetto per mancanza di tempo), ma ero arrivato a buon punto: http://brainbooster.byethost7.com/ non guardate le date e l'ora, le ho mandate io Hpocchia :P così come l'ultimo parametro che è null perchè devo proseguire con gli esperimenti. sulla pagina si possono passare quanti parametri si vogliono e verranno visualizzati così come si vede, i valori sulla pagia vengono aggiornati in quasirealtime (1 volta al secondo) così come anche i grafici che vengono generati automaticamente e aggiornati con lo stesso refresh. idea strippata e adattata da open energy monitor ;) . Ma ero solo all'inizio delle prove...

pitusso: Ciao,

Dove potrei hostare possibilmente senza spendere danari ed ottenendo un risultato "Potabile" ?

io penseri piuttosto a risolvere il problema, a futuro beneficio di tutti :D

In ogni caso, tophost è uno dei più economici in assoluto, con 12 eur/anno porti a casa anche spazio web con supporto php e altro ancora. Non è pro come servizio, ma fa il suo dovere...

Appena potrò farò delle prove :D

ehmm che brocco che sono, anche su tophost son virtual server :blush:

io per fare una cosa simile ho usato un host gratuito che dà sia il db mysql che il supporto per php e qualche riga di json

ok, ma pure il servizio che stai utilizzando tu, viene erogato allo stesso modo. Come passi i dati? Oppure li recuperi con script php che fan una chiamata ad Arduino (in modalità server)?

@ratto, @brain ho sviscerato la questione, la soluzione era tutto sommato semplice.

Qui il post con la descrizione lunga: http://arduino.cc/forum/index.php/topic,90575.msg680326.html#msg680326

Rieccomi qui piantato -

Ora uso il codice fornito da Pitusso:

#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[] = {0x90,0xA2,0xDA,0x00,0x74,0x99};
byte ip[] = {192,168,1,2};
byte gateway[] = {192, 168, 1, 1};
byte subnet[] = {255, 255, 255, 0};
byte server[] = { 176, 9, 63, 22}; //altervista ip, risultato del ping ratto93.altervista.org

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac,ip,gateway,subnet);
  // start the serial library:
  Serial.begin(115200);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect()) {
    Serial.println("connected");
    // Make a HTTP request:

    client.println("GET /index.php?temperatura=22&umidita=22 HTTP/1.0");    //GET da effettuare
    client.println("Host: ratto93.altervista.org");                                           //parametro Host per gestione virtual server
    client.println();                                                                                  //riga vuota

  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}

Ma invece di visualizzare la pagina nel browser me la fa vedere nel serial monitor !?!
come mai ?

connecting...
connected
HTTP/1.1 200 OK
Content-Length: 211      
Date: Mon, 06 Feb 2012 14:23:43 GMT
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html
Connection: close

<HTML>
<HEAD>
<TITLE>Accesso al servizio</TITLE>
</HEAD>
<BODY>
<H2>Gestione accessi</H2>
<HR>
La temperatura attuale è di 22 °.
L'umidità è pari al  % 
alle ore15:23:43del giorno06-02-2012</BODY>
</HTML>

disconnecting.

ratto93, sul sito remoto non vedrai MAI niente, perchè il risultato della stringa che passa Arduino, lo vede solo Arduino stesso (e stampato in seriale, pure tu)!!! Questo concetto ti sfugge ma è fondamentale per proseguire il tuo progettino!

Devi prepararti uno script in PHP che salvi i dati che passa Arduino con la sua GET, e te li faccia poi vedere!

Es, per l'inserimento (con un database MySQL dietro, altervista te lo fornisce): http://www.w3schools.com/php/php_mysql_insert.asp qui nella tabella inserirai i valori che ti arrivano con la GET

Qui un esempio di visualizzazione dei dati presenti su db: http://www.w3schools.com/php/php_mysql_select.asp

In questo caso, ti basterà fare un controllo sulla URL: se non son presenti valori da inserire, mostra la tabella, altrimenti fai un inserimento.

Ok, ora è più chiaro, mi guarderò il materiale che mi hai passato, grazie

Stupendo, ce l'ho fatta :) Mi son fatto gli interpreti php che leggono e scrivono il database, arduino tramite get mi spedisce correttamente i dati e gli script ovviamente me li salvano nel db Grazie a tutti XD

ottimo, bravo!

Mi trovo di fronte ad un problema che è di unà mostruosa, solo che non ne vengo a banalità assura, solo che non ne vengo a capo...

inviando i dati al mio script, devo far si che la stringa che viene inviata cambi, usando la seguente sintassi: client.println("GET /script/Scrittore.php?id='12&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0"); funziona e si connette al server, se uso questa :

int id = x;
client.println("GET /script/Scrittore.php?id='id'&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");

Mi da errore di connessione. ho provato anche in questo modo : (con lo stesso risultato)

    client.println("GET /script/Scrittore.php?id=");
    client.println(id);
    client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");

come posso risolvere?

Ciao, prova ad usare print invece di println per le prime due righe; il problema dovrebbe essere tutto lì:

client.print("GET /script/Scrittore.php?id=");
client.print(id);
client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");

Prima ho provato anche quello senza risultato però... :~

ciao, sto provando pure io ]:D (troverai un poca di roba inutile)

Non ho alcun problema di connessione. Puoi postare il codice (anche solo la parte che si occupa della connessione)?

P.S. per il debug, anche la generazione di un output dallo script php, dopo la GET, aiuta.

cavolo forse allora è un problema alla mia di connessione, non sono andato avanti molto con il codice perchè ho lavorato al db.

il codice comunque è questo :

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

byte mac[] = {0x90,0xA2,0xDA,0x00,0x74,0x99};
byte ip[] = {192,168,1,2};
byte gateway[] = {192, 168, 1, 1};
byte subnet[] = {255, 255, 255, 0};
byte server[] = { 176, 9, 63, 22}; 
Client client(server, 80);

char id=4;
int temperatura = 50;

void setup() {
  Ethernet.begin(mac,ip,gateway,subnet);
  Serial.begin(115200);
  delay(1000);
  Serial.println("connecting...");
  if (client.connect()) {
    Serial.println("connected");client.print("GET /script/Scrittore.php?id=");
    client.print(id);
    client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");   //GET da effettuare
    client.println("Host: ratto93.altervista.org");                     //parametro Host per gestione virtual server
    client.println();                                                                                  //riga vuota
    

  } 
  else {
     Serial.println("connection failed");
  }
}

void loop()
{
   if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Ciao

 Serial.println("connected");client.print("GET /script/Scrittore.php?id=");
    client.print(id);
    client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");   //GET da effettuare

nella prima riga hai ancora un println. println manda a capo alla fine della riga "stampata". Tu hai bisogno di generare una unica riga per la url, pertanto il println lo dovrai usare solo per la riga con l'ultimo pezzo della url.

scusa non avevo letto bene, essendo la prima client.print accodata ad un'altra riga :grin:

Cmq la connessione (con le modifiche indicate) va a buon fine:

onnected
HTTP/1.1 200 OK
Date: Wed, 08 Feb 2012 20:52:54 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Nada de nada, così è corretto ?

    Serial.print("connected");client.print("GET /script/Scrittore.php?id=");
    client.print(id);
    client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");

Perchè così non funziona.Non si connette

connecting...
connection failed

disconnecting.

...per la leggibilità, corretto sarebbe:

Serial.print("connected");
client.print("GET /script/Scrittore.php?id=");
client.print(id);
client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0")
client.println("Host: ratto93.altervista.org");
client.println();

(le ultime 2 righe aggiunte perchè fan parte della richiesta). Se hai dubbi sulla stringa (che cmq va bene), riprova con la stringa "a mano"

client.println("GET /script/Scrittore.php?id=12&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");

Domanda banale: i led sul connettore lampeggiano? hai cambiato tipo di alimentazione? hai cambiato cavo? vedi lo shield connesso sul router?

Ok il problema, evidentemente non era mio, ora si è connesso di punto in bianco, senza cambiare il codice, forse stavano mettendo mano ai server. Ora provo ancora per vedere cosa può essere successo.

Hihi, ora non funziona più di nuovo :sweat_smile: forse ho problemi con la connessione... domani porto il baracchino a scuola e provo li..

Rieccomi con un altro problema :cold_sweat:
Dopo aver scritto uno script che riceve i dati in GET e li salva in un DB, ho fatto il codice per arduino, solo che mi da un problema, dopo essersi connesso, mi invia i dati una sola volta e logicamente si salva una sola riga nella tabella. il codice di prova è il seguente,

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

byte mac[] = {0x90,0xA2,0xDA,0x00,0x74,0x99};
byte ip[] = {192,168,1,2};
byte gateway[] = {192, 168, 1, 1};
byte subnet[] = {255, 255, 255, 0};
byte server[] = { 176, 9, 63, 22}; 
Client client(server, 80);

char id=4;
int temperatura = 50;

void setup() {
  riavvio:
  Ethernet.begin(mac,ip,gateway,subnet);
  Serial.begin(115200);
  delay(1000);
  Serial.println("connecting...");
  if (client.connect()) {
    Serial.print("connected");   
    for(int i=0;i<15;i++){
    client.print("GET /script/Scrittore.php?id=&");
    client.print(i);
    client.println("&ora=2222&tensione=77777&corrente=222&temperatura=33 HTTP/1.0");   //GET da effettuare
    client.println("Host: ratto93.altervista.org"); 
    client.println();
    Serial.println(i);
    delay(5000);
  }
 } 
  else {
     Serial.println("connection failed");
     goto riavvio;
  }
}

void loop()
{
   if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Francamente speravo le rogne finissero, ma qui se ne aggiungono in continuazione =(