Updated XivelyClient example

This commit is contained in:
Cristian Maglie 2013-05-31 13:27:01 +02:00
parent 6b058a3032
commit 6cff36ac5e
1 changed files with 47 additions and 49 deletions

View File

@ -1,16 +1,13 @@
/*
Xively sensor client with Strings
This sketch connects an analog sensor to Xively,
using an Arduino Yun.
using an Arduino Yún.
created 15 March 2010
created 15 March 2010
updated 27 May 2013
by Tom Igoe
NOT CURRENTLY WORKING as of Arduino 1.5.3 27 May 2013
*/
// include all Libraries needed:
@ -25,88 +22,89 @@
#define APIKEY "foo" // replace your pachube api key here
#define FEEDID 0000 // replace your feed ID
#define USERAGENT "my-project" // user agent is the project name
*/
*/
// set up net client info:
boolean lastConnected = false; // state of the connection last time through the main loop
const unsigned long postingInterval = 60000; //delay between updates to Pachube.com
const unsigned long postingInterval = 60000; //delay between updates to xively.com
unsigned long lastRequest = 0; // when you last made a request
String dataString = "";
Process xively;
void setup() {
// start serial port:
Serial.begin(9600);
Bridge.begin();
delay(2000);
Console.begin();
while(!Serial); // wait for Serial Monitor to open
Serial.println("Xively client");
while(!Console); // wait for Network Console to open
Console.println("Xively client");
// reserve space for dataString:
dataString.reserve(100);
// Do a first update immediatly
updateData();
sendData();
lastRequest = millis();
}
void loop() {
// get a timestamp so you can calculate reading and sending intervals:
long now = millis();
// convert the readings to a String to send it:
dataString = "temp,";
dataString += random(10) + 20;
// add pressure:
dataString += "\nPressure,";
dataString += random(5) + 100;
// if there's incoming data from the net connection,
// send it out the serial port:
if (xively.available()>0) {
char c = xively.read();
Serial.write(c);
}
// if you're not connected, and the sending interval has passed since
// your last connection, then connect again and send data:
if(now - lastRequest >= postingInterval) {
// if the sending interval has passed since your
// last connection, then connect again and send data:
if (now - lastRequest >= postingInterval) {
updateData();
sendData();
lastRequest = now;
}
}
void updateData() {
// convert the readings to a String to send it:
dataString = "Temperature,";
dataString += random(10) + 20;
// add pressure:
dataString += "\nPressure,";
dataString += random(5) + 100;
}
// this method makes a HTTP connection to the server:
void sendData() {
Serial.println("Sending data");
dataString = "--data \'" + dataString;
dataString += "\'";
// form the string for the API header parameter:
String apiString = "--header \"X-ApiKey: ";
String apiString = "X-ApiKey: ";
apiString += APIKEY;
apiString += "\"";
// form the string for the URL parameter:
String url = " \"https://api.xively.com/v2/feeds/";
String url = "https://api.xively.com/v2/feeds/";
url += FEEDID;
url += ".csv\"";
// send the HTTP PUT request:
url += ".csv";
// Send the HTTP PUT request
// Is better to declare the Process here, so when the
// sendData function finishes the resources are immediatly
// released. Declaring it global works too, BTW.
Process xively;
Console.print("\n\nSending data... ");
xively.begin("curl");
xively.addParameter("-k");
xively.addParameter("--request PUT");
xively.addParameter("--request");
xively.addParameter("PUT");
xively.addParameter("--data");
xively.addParameter(dataString);
xively.addParameter("--header");
xively.addParameter(apiString);
xively.addParameter(url);
xively.run();
Console.println("done!");
// If there's incoming data from the net connection,
// send it out the Console:
while (xively.available()>0) {
char c = xively.read();
Console.write(c);
}
}