Uno dei motivi del successo di Arduino è la grande disponibilità di librerie che rendono lo sviluppo semplice e veloce. Realizzare un Web Server, un Web Client o inviare un Tweet, grazie alla libreria dell’ethernet shield, non è affatto complicato. 
Provate a fare la stessa applicazione con Stack TCP / IP Microchip …. Non è impossibile, ma per niente facile. 
Invece con lo shield Ethernet o WiFi si può connettere Arduino al mondo di internet, avere informazioni, inviare e-mail, pubblicare dati… 

Pubblicare dati? Ma dove?

Qualche sito si presta ad ospitare i vostri dati, alcuni mettono a disposizione anche elementi grafici come Pachube
Ma in qualche caso potrebbe essere utile avere i dati in un foglio di calcolo, in modo da poter poi fare operazioni e gestire i vari dati. 

In questo post voglio spiegare la soluzione trovata da RobertMParker per inviare i dati sul foglio di calcolo di Google. Un ringraziamento ad Andrea Fainozzi che ha adattato il codice. 
Il modo migliore per accedere al foglio di calcolo di Google non è l’accesso al foglio di calcolo di Google … 
Non ho trovato un modo per accedere direttamente al foglio di calcolo (magari qualcuno può darci una dritta), ma possiamo comunque inviare i dati al nostro foglio utilizzando un modulo (form). 
Tutti i risultati di un modulo vengono importati nel foglio corrispondente …. quindi … i dati sono su Google Spreadsheet. 

Il metodo passo dopo passo per inviare dati da Arduino a Google Spreadsheet 

1) Si deve creare un modulo dalla pagina di Google Documenti (è necessario essere registrati): 

 2) Selezionare “Crea nuovo” -> “Form” dal menu Google Documenti: 


 

3) Creare il form con campo di testo. È possibile inserire quanti campi volete. Date un nome al form e alle domande (i nomi delle domande saranno i nomi delle colonne): 

4) Clicca su “Done”. È stato creato il modulo. Nell’URL è possibile vedere la formkey. Nel mio caso è dDBMdUx3TmQ5Y2xvX2Z0V183UVp2U0E6MQ Prendere nota di questa chiave. La useremo nello sketch di Arduino. 

5) Normalmente le caselle di testo (Data 1 e Data 2 in questo esempio) sono chiamate entry.0.single e entry.1.single …. ecc, ma il nome può cambiare se si modifica la struttura di base. Quindi il modo migliore è esplorare il codice HTML per verificare effettivamente i nomi. 

6) Io uso Google Chrome, ma la procedura è simile con Firefox o IE. Il codice  mostra il nome esatto delle due caselle di testo. Prendete nota di questi nomi. 

7) Nel mio caso i nomi sono entry.0.single per Data 1 e entry.2.single per Data 2. Per inviare i dati al modulo dobbiamo usare questa sintassi: 
https://spreadsheets.google.com/formResponse?formkey=YOUR FORM KEY &ifq& YOUR ENTRY =THE VALUE TO STORE &submit=Submit
Per esempio: 
https://spreadsheets.google.com/formResponse?formkey=dDBMdUx3TmQ5Y2xvX2Z0V183UVp2U0E6MQ&ifq&entry.0.single=Boris&entry.2.single=Landoni&submit=Submit

Questo il risultato: 

8 ) I dati vengono copiati nel foglio di calcolo di Google. Questo è il mio foglio con i vari dati:

9) Ora dobbiamo inviare i dati con Arduino. Usiamo il metodo POST per inviare i dati al modulo. Il codice è molto semplice. 

/* Arduino to Google Docs
 created 2011

This example code is in the public domain.

http://www.open-electronics.org
http://www.futurashop.it

https://spreadsheets.google.com/formResponse?formkey=dDBMdUx3TmQ5Y2xvX2Z0V183UVp2U0E6MQ &ifq&entry.0.single=Boris&entry.2.single=Landoni&submit=Submit
Original from http://goodsite.cocolog-nifty.com/uessay/2010/07/arduinogoogle-d.html
Modified by John Missikos 11/6/11
Modified by Andrea Fainozzi 30/6/11
Modified by Boris Landoni 8/7/11

*/

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

char formkey[] = "dDBMdUx3TmQ5Y2xvX2Z0V183UVp2U0E6MQ"; //Replace with your Key
byte mac[] = { 0x90,0xA2,0xDA,0x00,0x55,0x8D};  //Replace with your Ethernet shield MAC
byte ip[] = { 192,168,0,109};  //The Arduino device IP address
byte subnet[] = { 255,255,255,0};
byte gateway[] = { 192,168,0,254};
byte server[] = { 209,85,229,101 }; // Google IP
Client client(server, 80);

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac, ip , gateway , subnet);
  delay(1000);
  Serial.println("connecting...");
}

void loop(){
  String data;
  data+="";
  data+="entry.0.single=";
  data+=analogRead(A0);
  data+="&entry.2.single=";
  data+=analogRead(A1);
  data+="&submit=Submit";

  if (client.connect()) {
    Serial.println("connected");

    client.print("POST /formResponse?formkey=");
    client.print(formkey);
    client.println("&ifq HTTP/1.1");
    client.println("Host: spreadsheets.google.com");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Connection: close");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println();
    client.print(data);
    client.println();

    Serial.print("POST /formResponse?formkey=");
    Serial.print(formkey);
    Serial.println("&ifq HTTP/1.1");
    Serial.println("Host: spreadsheets.google.com");
    Serial.println("Content-Type: application/x-www-form-urlencoded");
    Serial.println("Connection: close");
    Serial.print("Content-Length: ");
    Serial.println(data.length());
    Serial.println();
    Serial.print(data);
    Serial.println();

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

  delay(10000);

}

Questo codice pubblica sul foglio di calcolo di Google il valore di ingresso analogico A0 e A1.
L’applicazione potrebbe essere differente. Si potrebbero inviare temperature, stato degli ingressi, tutto quello che si vuole. Una volta che i dati sono su Google è possibile realizzare grafici, scaricare i dati sul PC, condividerli con amici … 
Se avete qualche idea …. Inviatemi i vostri progetti e cercherò di soddisfare le vostre esigenze.