Arduino si Google Docs

on Luni, 28 Ianuarie 2013. Posted in Ethernet

Daca vrei sa ai informatii online in timp real de la proiectul tau realizat cu Arduino, una din cele mai la indemana solutii este postarea acestora intr-un spreadsheet pe Google Docs.

Recent a fost introdusa obligativitatea HTTPS in conectarea la Google Drive, asa ca Arduino nu se va mai putea conecta direct la serverele Google.

Una dintre cele mai usoare metode de a ocoli acest impediment este folosirea unui serviciu care sa faca postarea in locul nostru. Noi am ales PushingBox si vom realiza postarea astfel:

1.  Trebuie sa ai un cont de Gmail. Fiind logat, creeaza un Form nou in Google Drive

 

2. Denumeste Form-ul. Denumirea data de noi este Arduino. Poti adauga oricate Question. Acestea trebuie sa fie de tip Text. Denumirea Question-ului va fi denumirea coloanei in tabel. Noi am creat doua coloane (Senzor 1 si Senzor 2). Cand ai terminat apasa Done.

 

 

3. Pentru a vedea Spreadsheet-ul unde vor fi publicate datele, alege Choose response destination, 

 denumeste documentul si apasa Create

4. Vizualizeaza spreadsheet-ul si form-ul.

 

 

5. Urmatorul pas este sa stabilim unde trebuie sa trimita Arduino informatiile. Pentru acesta trebuie sa aflam ID-ul form-ului si ID-urile campurilor unde vom trimite informatiile noastre.

ID-ul form-ului il gasim in bara browser-ului,

este sirul de caractere dupa /d/ in cazul nostru 19ifU4gMm4fYQ69Y2CrAmYHwVQkl8L8gcp1nQ7B2tG0U

 

ID-urile campurilor le gasim astfel: Click dreapta pe casuta campului si alegem Inspect element (aceasta optiune poate diferi de la browser la browser)


In partea de jos a ecranului va aparea codul respectivului element astfel:

Repeta acest pas pentru fiecare camp in parte. In cazul nostru ID-urile pentru cele doua campuri ale noastre sunt:

entry.80966345

entry.745327103

 6. E timpul sa trecem la PushingBox. Aici te poti loga tot cu contul tau de Google

In meniul My services click Add a service si selecteaza Custom URL

 In fereastra CustomURL Service da un nume serviciului. Noi l-am denumit generic Google Docs.

In campul RootURL completeaza astfel:

https://docs.google.com//forms/d/19ifU4gMm4fYQ69Y2CrAmYHwVQkl8L8gcp1nQ7B2tG0U/formResponse

in locul ID-ului nostru punand ID-ul tau pe care l-ai salvat la pct 5.

La Method selecteaza POST si salveaza.

8. Trecem mai departe la fereastra My Scenarios si adauga un nou scenariu.

In fereastra urmatoare trebuie retinut DeviceID . In cazul nostru este  vFC0E36641BD82E9. Acest ID va fi necesar in codul Arduino.

Apasa Add an Action si completeaza campul Data cu

entry.80966345=$temp$&entry.745327103=$lumina$&&submit=Submit


unde in loc de entry.80966345 si entry.745327103 veti pune ID-urile campurilor formularului salvate la pct 5.

$temp$ si $lumina$ sunt doua variabile aleatoare care vor lua valorile senzorilor legati la Arduino. Retineti aceste variabile pentru ca va fi nevoie de ele in codul Arduino.

9. In codul Arduino care urmeaza trebuie schimbata variabila API cu DeviceID-ul salvat mai sus si cele doua variabile temp si lumina cu variabilele pe care le-ai pus tu la punctul anterior (Codul este bazat pe exemplul WebClientRepeating care vine cu Arduino IDE si se foloseste cu un shield sau modul ethernet bazat pe chip-ul WizNet).

 

#include <SPI.h>
#include <Ethernet.h>
 
// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
 
// initialize the library instance:
EthernetClient client;
 
char server[] = "api.pushingbox.com";
String API ="vFC0E36641BD82E9";
 
unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
boolean lastConnected = false;                 // state of the connection last time through the main loop
const unsigned long postingInterval = 60*1000;  // delay between updates, in milliseconds
 
void setup() {
  // start serial port:
  Serial.begin(9600);
  // give the ethernet module time to boot up:
  delay(1000);
  // start the Ethernet connection using a fixed IP address and DNS server:
  Ethernet.begin(mac);
  // print the Ethernet board/shield's IP address:
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());
}
 
void loop() {
 
  // if there's no net connection, but there was one last time
  // through the loop, then stop the client:
  if (!client.connected() && lastConnected) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
 
  // if you're not connected, and ten seconds have passed since
  // your last connection, then connect again and send data:
  if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
    httpRequest();
  }
  // store the state of the connection for next time through
  // the loop:
  lastConnected = client.connected();
}
 
// this method makes a HTTP connection to the server:
void httpRequest() {
  
  data="";
  
  data+="";
  data+="&temp=";  
  data+=temp;
  
      
  data+="&lumina=";
  data+=lum;
  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP PUT request:
    client.print("POST /pushingbox/pushingbox?devid=
    client.print(API)
    client.println(" HTTP/1.1");
    client.println("Host: api.pushingbox.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();
    delay(100);
    client.stop();
    
 
    // note the time that the connection was made:
    lastConnectionTime = millis();
  } 
  else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
    Serial.println("disconnecting.");
    client.stop();
  }
}

 

 

 

 

Comentarii (0)

Lasa un comentariu