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.










32 Commenti