Verzend data vanuit Arduino naar Googleforms en spreadsheet

Arduino specifieke Software
Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Verzend data vanuit Arduino naar Googleforms en spreadsheet

Berichtdoor nicoverduin » 12 Okt 2013, 14:15

SVP nog ff geen commentaar toevoegen tot ik klaar ben. Thx
Zoals beloofd hier een toelichting om data vanuit de Arduino over te hevelen naar Google docs om zodoende de data in bijvoorbeeld een spreadsheet te krijgen die continu wordt bijgewerkt. In dit voorbeeld doen we even een(1) veld. Later kunnen we altijd nog meerdere velden toevoegen.

Stap 1 creëer een formulier op googledocs
je hebt hiervoor een google account nodig en een google drive (zie: drive.google.com). Dit is je eigen harde schijf op google waar de formulieren opgelagen worden.
click nu op Maken(ik werk met de NL versie van Google)
je krijgt dan het volgende scherm:
Afbeelding

Kies hierbij het maken van een nieuwe formulier waarna je het volgende scherm krijgt.
Afbeelding

Stap 2 creëer veld
In dit voorbeeld eerst ff een veld creëren. (een stap tegelijk).

Nu moet je bij de velden voor tekst velden kiezen (zie bovernste ovaal). Als je daarop klikt, kun je voor tekst kiezen,
Geef de vraag (=veld) een naam. Dit is de naam die we later ook terug zien in de excel sheet. in ons voorbeeld noemen wij die "temperatuur".

Afbeelding

Stap 3 Titel en afronden
We kunnen altijd nog de titel aanpassen in ons geval in "Arduino Meting".
Na het indrukken van Gereed krijg je tenslotte onderstaand scherm

Afbeelding

Stap 4 publiceren
We zijn nu klaar om te publiceren. Druk op Formulier verzenden en krijg je de volgende popup te zien.

Afbeelding

kopieer de link naar het formulier. die hebben we straks later nodig.
In dit voorbeeld is het : https://docs.google.com/forms/d/1t2JOuX ... c/viewform.

Stap 5 Keuze spreadsheet voor de resultaten
De volgende popup is om aan te geven waar de data wordt opgeslagen.
Hier kies je dus in dit voorbeeld voor "Nieuwe spreadsheet" en druk op maken

Afbeelding

Als je nu naar de Google drive gaat, zie je nog steeds een naamloos formulier. Via het menu kun je de naam veranderen. Dat wijst zichzelf.

PushingBox
Ga naar http://www.pushingbox.com en log in met je google account. Ga daarna naar my services in het menu.

Stap 6 creer een service
Click eerst op Add a service. Je krijgt dan een overzicht te zien van alle services die mogelijk zijn. Kies in dit geval voor customurl.

Afbeelding

Wat je hier doet is de link straks bekend maken naar het formulier dat wij eerder hebben gecreëerd. Hier vul je de naam in van de dienst. In ons geval Arduino Meting en de link invullen die wij eerder hebben bewaard. Echter wij moeten iets aanpassen. aan het einde van de link staat view en dat moet vervangen worden door formResponse en tenslotte de method veranderen van GET in POST

Afbeelding
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Verzend data vanuit Arduino naar Googleforms en spreadsh

Berichtdoor nicoverduin » 12 Okt 2013, 15:47

De service is nu bekend en weet PushingBox het juiste formulier te vinden. Je krijgt de service dan ook keurig in de lijst services te zien.

Afbeelding

De volgende stap is het creëren van de link naar de velden in het formulier. Click op My scenarios
Je kan dan nieuwe scenarios toevoegen of bestaande wijzigen. Waarom het scenario heet. Geen idee maar het werkt.
Je kan nu een nieuwe naam invullen voor een scenario. In ons geval noemen wij die hArduinoMeting. Waarom die "h" ervoor? Geen idee zij geven het aan maar zou best kunnen dat het overbodig is. En click op ADD

Afbeelding

Stap 7 Voeg acties toe

Je krijgt eerst het volgende scherm te zien

Afbeelding

Met de actions ga je de mapping uitvoeren die nodig is voor het veld. Dus Pushingbox zal de specifieke velden voor jou in het formulier invullen en een submit simuleren.
Dus druk op Add an Action.

Je krijgt het volgende scherm te zien (we zijn er bijna :)) en kies voor Arduino Meting

Afbeelding

Echter nu moet je wel weten hoe het veld heet in de code van het formulier. Ik doe dat door bij het formulier de "live" versie te kiezen en de broncode te bekijken. Daar kom je het veld tegen dat begint met entry.. Die heb je nodig om het veld te kunnen vullen (ik heb het ook niet verzonnen). In deze tutorial is dat : entry.433477295. Dit veld vullen we in als eerste in het volgende scherm:

Afbeelding

Hierin staat achter het entry veld de text =$temp$. Wat hier eigenlijk gebeurt is dat er straks in de uitvoering een variable genaamd temp wordt ingevuld in het entry veld. temp is straks de variabele in ons programma. Druk nu op Submitwe zijn klaar.

De code voor de Arduino ziet er in de basis als volgt uit:
Code: Alles selecteren
/* 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=SubmitOriginal 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>
#include <WiFly.h>
#include "Credentials.h"

char serverName[]    = "api.pushingbox.com";      // pushing box server
char devid[]       = "vCB41B101C735361";      // device id

WiFlyClient client(serverName, 80);            // create wifi client

void setup() {
   Serial.begin(9600);
   Serial.println("connecting...");
   WiFly.begin();                        // start wifi connections
   //
   // join my network
   //
   if (!WiFly.join(ssid, passphrase)) {
      Serial.println("Association failed.");
      while (1) {
        // Hang on failure.
      }
   }
} //setup

void loop() {
   String data;                        // contains all the data fields
   data   ="";                           
   data   +="temp=";                     // add temp fieldname
   data   +=analogRead(A0);               // add analog port
   client.stop();                        // probably redundant
   if (client.connect()) {                  // connect to the servier
       while (client.available()) {         // print any return data
          char c = client.read();
          Serial.print(c);
       }
       //
       // this is the POST command. DO NOT CHANGE or it will not work
       //
       client.print("POST /pushingbox?devid=");// setup POST command
       client.print(devid);               
       client.println(" HTTP/1.1");
       client.print("Host: ");
       client.println(serverName);
       client.println("User-Agent: Arduino");
       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();
      //
      // redundant info
      //
      Serial.print("GET /pushingbox?devid=");
       Serial.print(devid);
       Serial.println(" HTTP/1.1");
       Serial.print("Host: ");
       Serial.println(serverName);
       Serial.println("User-Agent: Arduino");
       Serial.println("Content-Type: application/x-www-form-urlencoded");
      Serial.print("Content-Length: ");
      Serial.println(data.length());
      Serial.println();
      Serial.print(data);
      Serial.println();

      Serial.println("Sending data");
   } else {
      Serial.println("connection failed");
   }
   //
   // print any return info
   //
    while (client.available()) {
       char c = client.read();
       Serial.print(c);
    }
    Serial.println("");

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


Downloaden en draaien.
Als je nu naar de spreadsheet gaat zie je data binnenkomen

Tijdstempel temperatuur
12-10-2013 15:46:13 548
12-10-2013 15:46:30 362
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Verzend data vanuit Arduino naar Googleforms en spreadsh

Berichtdoor nicoverduin » 12 Okt 2013, 17:45

Ik heb nog ff getest voor meerdere velden. Vrij recht toe recht aan:
a) creëer extra veld op formulier
b) breidt het scenario uit door eerst een "&" teken te zetten en dan de volgende variabele. Dus in mijn geval zo:

entry.433477295=$temp$&entry.1847033797=$afzender$

c) pas in het programma data aan door bijvoorbeeld als volgt:
Code: Alles selecteren
   data   ="";
   data   +="temp=";                     // add temp fieldname
   data   +=analogRead(A0);               // add analog port
   data   +="&afzender=";                  // add temp fieldname
   data   += "Nico Verduin";               // add analog port

En zo kan je in feite eindeloos doorgaan.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 38 gasten