Go Down

Topic: Arduino+ETH Shield e Google Spreadsheet (Read 3 times) previous topic - next topic

DevonMiles

Buongiorno a tutti,
sono nuovo del forum e mi chiamo Francesco. Ho da poco tempo acquistato un Arduino UNO e un Ethernet Shield e ho già fatto vari programmini servendomi degli aiuti del forum e degli esempi sul sito.
Venendo al punto, vorrei sapere se come da titolo è possibile scrivere dati su google spreadsheet mediante l' invio di questi con ETH shield. Ho trovato il seguente topic, ma non sono riuscito a fare in modo di ottenere qualcosa di scritto sul foglio di calcolo. Qualcuno di voi ci è riuscito?
Grazie a tutti.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241360897

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

DevonMiles

Io ho semplicemente copiato il codice che ho trovato nel link postato sopra cambiando la KEY del documento.
Ecco qui:
Code: [Select]
/*
        * A simple sketch that uses Ethernet Shield to send some values (via POST) to GoogleDocs
        * Based on code by RobertMParker for the WiShield <http://asynclabs.com/forums/viewtopic.php?f=16&t=489>
*/

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

#define DEBUG_PRINT // comment to disable Serial.print

long unsigned int time =0;

//Wireless configuration parameters ----------------------------------------
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {
  192,168,0,3};   // IP address of Ethernet Shield
byte gateway[] = {
  192,168,0,1};   // router or gateway IP address
byte subnet[]    = {
  255,255,255,0}; // subnet mask for the local network

// IP Address for spreadsheets.google.com
byte ipGoogle[] = {
  74,125,67,102};
char hostname[] = "spreadsheets.google.com";
char url[] = "/formResponse?formkey=<ENTER_YOUR_KEY_HERE>";



// create a client that connects to Google
Client clientGoogle(ipGoogle,80);

void setup()

  // Enable Serial output and ask WiServer to generate log messages (optional)
#ifdef DEBUG_PRINT
  Serial.begin(115200);
#endif //DEBUG_PRINT
  Ethernet.begin(mac, ip, gateway, subnet);

  // give the Ethernet shield a second to initialize
  delay(1000);
  int time = millis();
  clientGoogle.connect();
}


void loop()
{
  float temperature = (float) random(1000)/10.; // create some random values to test
  float humidity = 45 + (millis()%1000)/100.;
  if ( millis() > time + 10000 && clientGoogle.connected()){ // update sheet each 10 s
    String feedData = "entry.0.single=" + String((int)temperature) + "," + String(int(temperature*100)%100) + "&entry.1.single=" + String(int(humidity)) + "," + String(int(humidity*100)%100) + "&pageNumber=0&backupCache=&submit=Envoyer";
    //Serial.println(feedData);
    postRequest(clientGoogle, ipGoogle, 80, hostname, url, feedData);
    time = millis();
  }
  delay(10);
}

void postRequest(Client client, byte *ip, unsigned int port, char *hostName, char *url, String feedData){
  String buf = "POST " + String(url) + " HTTP/1.1";

#ifdef DEBUG_PRINT
  Serial.println(buf);
  Serial.println("Host: " + String(hostName));
  Serial.println("Content-Type: application/x-www-form-urlencoded");
  Serial.println("Content-Length: " + String(feedData.length()));
  Serial.println("");
  Serial.println(feedData);
  Serial.println("");
  Serial.println("");
#endif

  client.println(buf);
  client.println("Host: " + String(hostName));
  client.println("Content-Type: application/x-www-form-urlencoded");
  client.println("Content-Length: " + String(feedData.length()));
  client.println("");
  client.println(feedData);
  client.println("");
  client.println(""); // POST request as GET ends with 2 line breaks and carriage returns (\n\r);
}


DevonMiles

Ogni 10 secondi dovrebbe uploadare dei numeri a caso ma questo non accade. Non so cosa c' è che non va.

lesto

ad occhio il codice sembra corretto, però ho fatto un ping
Code: [Select]

ping spreadsheets.google.com
PING spreadsheets.l.google.com (74.125.79.102) 56(84) bytes of data.

e l'ip è diverso da quello nello sketch...

e poi sei sicuro che il tuo gateway sia 192.168.0.1? prova a scriverlo nella barra del browser, dovrebbe risponderti il router... comunque puoi verificare questo indirizzo, apri un terminale (in windows cerca cmd.exe)
e scrivi "traceroute www.google.it" oppure "tracepath www.google.it", il primo IP che compare nella lista dovrebbe essere il tuo gateway
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

DevonMiles

Ma su "byte ipGoogle[]" ci devo mettere l' ip che mi risulta pingando www.google.com oppure quello che mi risulta pingando spreadsheet.google.com? Ho provato con tutti e due ma comunque non mi funziona.
Se inserisco 192.168.0.1 mi risponde la finestra di login configurazione del router.

DevonMiles

E..un' altra cosa..quando apro il mio foglio di calcolo sulla barra indirizzi trovo scritto:
https://spreadsheets.google.com/ccc?key=0ArTGw8....
e non
https://spreadsheets.google.com/formResponse?formkey=0ArTGw8....
centra qualcosa?

lesto

l'ip va quello spreadshett...
centra qualcosa, devi modificare l'algoritmo per usare ccc?blbla e non l'altro modo (evidentemente l'algoritmo è vecchio)

ed infine tu stai usando HTTPS, mentre l'algoritmo supporta solo HTTP...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

DevonMiles

Pensi dunque non ci sia maniera di andare a scr ivere sul foglio di calcolo con algoritmo https? =(

lesto

non lo so. in HTTPS tutte le comunicazioni sono criptate, bisogna vedere se arduino ha abbastanza potenza di calcolo per criptare i dati, oppure abbastanza memoria per criptare i dati o-line e poi spedirli una volta elaborati.

allora ho fatto qualche prova anch'io. Se non ti logghi in google, spreadsheet usa l'HTTP, però i dati restano salvato solo 24 ore, infatti se noti lo sketch che hai postato NON si autentica.

se vuoi implementare l'HTTPS, ecco tutto ciò che ti serve; la RFC: http://tools.ietf.org/html/rfc5246
per chi non lo sapesse le RFC sono i documenti tecnici che, se approvati, divengono standard di internet.
Ovviamente spiegano per filo e per segno come devono comportarsi i programmi per essere compatibili.
Per esempo lFTP, l'HTTP, e molti altri....

dopo di che puoi seguire questa guida:
http://code.google.com/apis/spreadsheets/data/3.0/developers_guide.html
che in pratica spiega il protocollo al di sopra dell'HTTPS ( e comunque credo che le api, ovvero le funzioni, siano le stesse per l'http)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

DevonMiles

Mi sa che HTTPS è un pò troppo per me.. :( va bhe..grazie comunque per l' interesse e la spiegazione. C' è un tasto Thanks  su questo forum?

lesto

no, ma ci vorrebbe in effetti :)
comunque puoi usare l'http, però devi ricordarti di fare il backup dei dati ogni 24h e che il link al foglio cambia...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

DevonMiles

Volevo comunicare che sono riuscito a scrivere sul foglio di calcolo Google seguendo questa guida:
http://www.open-electronics.org/how-send-data-from-arduino-to-google-docs-spreadsheet/
Probabilmente c' è ancora qualcosa da sistemare perchè dopo qualche inserimento l' ETH shield sembra come incepparsi e conclude la trasmissione. Questa cosa mi serviva per rilevare dei dati di temperatura e umidità per poterli poi rappresentare comodamente su un grafico inserito in un sito Google.

pietro78

Anche io stò facendo la stessa cosa ma ho lo stesso tuo identico problema...dopo 5-6 scritture il sistema si ferma e non scrive più nelle label dello spreadsheet...come hai risolto  Devon ???

acik

Ho letto che l' Ethernet Shield (basato su WizNet5100) si blocca se usato con troppa insistenza.
Ho anche letto che c'e' un trucco per non farlo bloccare.

Cerca con la chiave "Wiznet 5100"

Go Up