Tutorial.PachubeClientString History

Hide minor edits - Show changes to output

November 08, 2013, at 04:24 PM by Scott Fitzgerald -
Changed lines 1-210 from:
''Examples > Ethernet Library''

!!!Pachube Client using Strings
This example shows you how to answer a HTTP request using an Ethernet shield. Specifically, it connects to [[(http://www.)pachube.com]], a free datalogging site. The example requires that you set up a pachube.com account, as well as a pachube feed (for more information on setting up an input feed, please [[http://community.pachube.com/using_the_website#inputs | click here]]). Your Ethernet shield will then connect to that feed and upload sensor data every 10 seconds.

Additionally, this example shows how to send sensor data as a string.

(:div class=BOM :)
!!!Hardware Required
* Arduino Ethernet Shield or Arduino Ethernet board
* Shield-compatible Arduino board
* Two analog sensors to attached to the Ethernet Shield

'''Software Required'''

*[[(http://www.)pachube.com account]]
* [[http://community.pachube.com/using_the_website#inputs | pachube.com feed ]] that accepts one data item
(:divend:)

!!!Circuit
(:div class=circuit :)

The Ethernet shield allows you to connect a WizNet Ethernet controller to the Arduino via the SPI bus. It uses pins 10, 11, 12, and 13 for the SPI connection to the WizNet. Later models of the Ethernet shield also have an SD Card on board. Digital pin 4 is used to control the slave select pin on the SD card.

The shield should be connected to a network with an ethernet cable. You will need to change the network settings in the program to correspond to your network.


%height=300px%[[Attach:PachubeClientString_bb.png | Attach:PachubeClientString_bb.png]]

[-image developed using [[http://www.fritzing.org |Fritzing]]. For more circuit examples, see the [[http://fritzing.org/projects/|Fritzing project page]] -]

'''''In the above image, your Arduino would be stacked below the Ethernet shield. Or you could use an Arduino Ethernet board.'''''

(:divend:)


!!!Schematic
(:div class=circuit :)
%height=300px%[[Attach:PachubeClientString_sch.png | Attach:PachubeClientString_sch.png]]
(:divend:)

'''''Pictured: One CDS photocells with a 10k ohm pull down resistor on analog pin 0.'''''


!!!Code

(:div class=code :)
(:source lang=arduino tabwidth=4:)
/*
Pachube sensor client with Strings

This sketch connects an analog sensor to Pachube (http://www.pachube.com)
using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
the Adafruit Ethernet shield, either one will work, as long as it's got
a Wiznet Ethernet module on board.

This example has been updated to use version 2.0 of the pachube.com API.
To make it work, create a feed with two datastreams, and give them the IDs
sensor1 and sensor2. Or change the code below to match your feed.

This example uses the String library, which is part of the Arduino core from
version 0019.

Circuit:
* Analog sensor attached to analog in 0
* Ethernet shield attached to pins 10, 11, 12, 13

created 15 March 2010
modified 9 Apr 2012
by Tom Igoe with input from Usman Haque and Joe Saavedra
modified 8 September 2012
by Scott Fitzgerald

http://arduino.cc/en/Tutorial/PachubeClientString
This code is in the public domain.

*/

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


/#define APIKEY "YOUR API KEY GOES HERE" // replace your Pachube api key here
#define FEEDID 00000 // replace your feed ID
#define USERAGENT "My Project" // user agent is the project name


// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(10,0,1,20);

// initialize the library instance:
EthernetClient client;

// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(216,52,233,121); // numeric IP for api.pachube.com
//char server[] = "api.pachube.com"; // name address for pachube API

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 = 10*1000; //delay between updates to pachube.com

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}


// give the ethernet module time to boot up:
delay(1000);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// DHCP failed, so use a fixed IP address:
Ethernet.begin(mac, ip);
}
}

void loop() {
// read the analog sensor:
int sensorReading = analogRead(A0);
// convert the data to a String to send it:

String dataString = "sensor1,";
dataString += sensorReading;

// you can append multiple readings to this String if your
// pachube feed is set up to handle multiple values:
int otherSensorReading = analogRead(A1);
dataString += "\nsensor2,";
dataString += otherSensorReading;

// if there's incoming data from the net connection.
// send it out the serial port. This is for debugging
// purposes only:
if (client.available()) {
char c = client.read();
Serial.print(c);
}

// 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)) {
sendData(dataString);
}
// 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 sendData(String thisData) {
// if there's a successful connection:
if (client.connect(server, 80)) {
Serial.println("connecting...");
// send the HTTP PUT request:
client.print("PUT /v2/feeds/");
client.print(FEEDID);
client.println(".csv HTTP/1.1");
client.println("Host: api.pachube.com");
client.print("X-pachubeApiKey: ");
client.println(APIKEY);
client.print("User-Agent: ");
client.println(USERAGENT);
client.print("Content-Length: ");
client.println(thisData.length());

// last pieces of the HTTP PUT request:
client.println("Content-Type: text/csv");
client.println("Connection: close");
client.println();

// here's the actual content of the PUT request:
client.println(thisData);
}
else {
// if you couldn't make a connection:
Serial.println("connection failed");
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
// note the time that the connection was made or attempted:
lastConnectionTime = millis();
}
(:sourceend:)
(:divend:)


!!!See Also:
* [[http://www.tigoe.net/pcomp/code/category/arduinowiring/873|Example project]] using Pachube and the Ethernet shield (the code above is more recent, however)
(:include EthernetSeeAlsoIncludes :)

to:
(:redirect XivelyClientString:)
September 10, 2012, at 09:11 PM by Scott Fitzgerald -
Deleted line 0:
Changed lines 48-202 from:
(:source http://arduino.cc/en/pub/code/master/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino lang=arduino tabwidth=4:)
to:
(:source lang=arduino tabwidth=4:)
/*
Pachube sensor client with Strings

This sketch connects an analog sensor to Pachube (http://www.pachube.com)
using a Wiznet Ethernet shield. You can use the Arduino Ethernet shield, or
the Adafruit Ethernet shield, either one will work, as long as it's got
a Wiznet Ethernet module on board.

This example has been updated to use version 2.0 of the pachube.com API.
To make it work, create a feed with two datastreams, and give them the IDs
sensor1 and sensor2. Or change the code below to match your feed.

This example uses the String library, which is part of the Arduino core from
version 0019.

Circuit:
* Analog sensor attached to analog in 0
* Ethernet shield attached to pins 10, 11, 12, 13

created 15 March 2010
modified 9 Apr 2012
by Tom Igoe with input from Usman Haque and Joe Saavedra
modified 8 September 2012
by Scott Fitzgerald

http://arduino.cc/en/Tutorial/PachubeClientString
This code is in the public domain.

*/

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


/#define APIKEY "YOUR API KEY GOES HERE" // replace your Pachube api key here
#define FEEDID 00000 // replace your feed ID
#define USERAGENT "My Project" // user agent is the project name


// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(10,0,1,20);

// initialize the library instance:
EthernetClient client;

// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
IPAddress server(216,52,233,121); // numeric IP for api.pachube.com
//char server[] = "api.pachube.com"; // name address for pachube API

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 = 10*1000; //delay between updates to pachube.com

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}


// give the ethernet module time to boot up:
delay(1000);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// DHCP failed, so use a fixed IP address:
Ethernet.begin(mac, ip);
}
}

void loop() {
// read the analog sensor:
int sensorReading = analogRead(A0);
// convert the data to a String to send it:

String dataString = "sensor1,";
dataString += sensorReading;

// you can append multiple readings to this String if your
// pachube feed is set up to handle multiple values:
int otherSensorReading = analogRead(A1);
dataString += "\nsensor2,";
dataString += otherSensorReading;

// if there's incoming data from the net connection.
// send it out the serial port. This is for debugging
// purposes only:
if (client.available()) {
char c = client.read();
Serial.print(c);
}

// 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)) {
sendData(dataString);
}
// 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 sendData(String thisData) {
// if there's a successful connection:
if (client.connect(server, 80)) {
Serial.println("connecting...");
// send the HTTP PUT request:
client.print("PUT /v2/feeds/");
client.print(FEEDID);
client.println(".csv HTTP/1.1");
client.println("Host: api.pachube.com");
client.print("X-pachubeApiKey: ");
client.println(APIKEY);
client.print("User-Agent: ");
client.println(USERAGENT);
client.print("Content-Length: ");
client.println(thisData.length());

// last pieces of the HTTP PUT request:
client.println("Content-Type: text/csv");
client.println("Connection: close");
client.println();

// here's the actual content of the PUT request:
client.println(thisData);
}
else {
// if you couldn't make a connection:
Serial.println("connection failed");
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
// note the time that the connection was made or attempted:
lastConnectionTime = millis();
}
(:sourceend:)
September 08, 2012, at 09:40 PM by Scott Fitzgerald -
Changed lines 1-2 from:
(:redirect CosmClientString:)
to:
May 14, 2012, at 10:28 PM by Tom Igoe -
Added lines 1-2:
(:redirect CosmClientString:)
February 27, 2012, at 06:16 PM by Tom Igoe -
Changed lines 28-29 from:
%height=300px%[[Attach:PachubeString_bb.png | Attach:PachubeString_bb.png]]
to:
%height=300px%[[Attach:PachubeClientString_bb.png | Attach:PachubeClientString_bb.png]]
Changed line 39 from:
%height=300px%[[Attach:PachubeString_sch.png | Attach:PachubeString_sch.png]]
to:
%height=300px%[[Attach:PachubeClientString_sch.png | Attach:PachubeClientString_sch.png]]
February 27, 2012, at 05:47 PM by Tom Igoe -
Changed lines 28-29 from:
%height=300px%[[Attach:PachubeClientString_bb.png | Attach:PachubeClientString_bb.png]]
to:
%height=300px%[[Attach:PachubeString_bb.png | Attach:PachubeString_bb.png]]
February 27, 2012, at 05:46 PM by Tom Igoe -
Changed lines 28-29 from:
%height=300px%[[Attach:PachubeClient_bb.png | Attach:PachubeClient_bb.png]]
to:
%height=300px%[[Attach:PachubeClientString_bb.png | Attach:PachubeClientString_bb.png]]
Changed lines 32-33 from:
'''''In the above image, your Arduino would be stacked below the Ethernet shield.'''''
to:
'''''In the above image, your Arduino would be stacked below the Ethernet shield. Or you could use an Arduino Ethernet board.'''''
February 27, 2012, at 05:43 PM by Tom Igoe -
Changed line 3 from:
!!!Pachube Client
to:
!!!Pachube Client using Strings
February 27, 2012, at 05:42 PM by Tom Igoe -
Changed line 10 from:
* Arduino Ethernet Shield
to:
* Arduino Ethernet Shield or Arduino Ethernet board
Changed lines 12-13 from:
* Two analog sensors to attach to the Ethernet Shield
to:
* Two analog sensors to attached to the Ethernet Shield
Changed lines 28-33 from:
to:
%height=300px%[[Attach:PachubeClient_bb.png | Attach:PachubeClient_bb.png]]

[-image developed using [[http://www.fritzing.org |Fritzing]]. For more circuit examples, see the [[http://fritzing.org/projects/|Fritzing project page]] -]

'''''In the above image, your Arduino would be stacked below the Ethernet shield.'''''
February 27, 2012, at 05:40 PM by Tom Igoe -
Changed lines 12-13 from:
* One analog sensor to attach to the Ethernet Shield
to:
* Two analog sensors to attach to the Ethernet Shield
Changed lines 27-32 from:
%height=300px%[[Attach:PachubeString_bb.png | Attach:PachubeString_bb.png]]

[-image developed using [[http://www.fritzing.org |Fritzing]]. For more circuit examples, see the [[http://fritzing.org/projects/|Fritzing project page]] -]

'''''In the above image, your Arduino would be stacked below the Ethernet shield.'''''
to:

November 16, 2011, at 04:28 AM by Scott Fitzgerald -
Changed line 47 from:
(:source http://arduino.cc/en/pub/code/master/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.pde lang=arduino tabwidth=4:)
to:
(:source http://arduino.cc/en/pub/code/master/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino lang=arduino tabwidth=4:)
November 01, 2011, at 06:10 PM by Scott Fitzgerald -
Changed lines 27-28 from:
%height=300px%[[Attach:PachubeClient_bb.png | Attach:PachubeClient_bb.png]]
to:
%height=300px%[[Attach:PachubeString_bb.png | Attach:PachubeString_bb.png]]
Changed line 38 from:
%height=300px%[[Attach:PachubeClient_sch.png | Attach:PachubeClient_sch.png]]
to:
%height=300px%[[Attach:PachubeString_sch.png | Attach:PachubeString_sch.png]]
November 01, 2011, at 06:03 PM by Scott Fitzgerald - Page Created
Added lines 1-55:
''Examples > Ethernet Library''

!!!Pachube Client
This example shows you how to answer a HTTP request using an Ethernet shield. Specifically, it connects to [[(http://www.)pachube.com]], a free datalogging site. The example requires that you set up a pachube.com account, as well as a pachube feed (for more information on setting up an input feed, please [[http://community.pachube.com/using_the_website#inputs | click here]]). Your Ethernet shield will then connect to that feed and upload sensor data every 10 seconds.

Additionally, this example shows how to send sensor data as a string.

(:div class=BOM :)
!!!Hardware Required
* Arduino Ethernet Shield
* Shield-compatible Arduino board
* One analog sensor to attach to the Ethernet Shield

'''Software Required'''

*[[(http://www.)pachube.com account]]
* [[http://community.pachube.com/using_the_website#inputs | pachube.com feed ]] that accepts one data item
(:divend:)

!!!Circuit
(:div class=circuit :)

The Ethernet shield allows you to connect a WizNet Ethernet controller to the Arduino via the SPI bus. It uses pins 10, 11, 12, and 13 for the SPI connection to the WizNet. Later models of the Ethernet shield also have an SD Card on board. Digital pin 4 is used to control the slave select pin on the SD card.

The shield should be connected to a network with an ethernet cable. You will need to change the network settings in the program to correspond to your network.

%height=300px%[[Attach:PachubeClient_bb.png | Attach:PachubeClient_bb.png]]

[-image developed using [[http://www.fritzing.org |Fritzing]]. For more circuit examples, see the [[http://fritzing.org/projects/|Fritzing project page]] -]

'''''In the above image, your Arduino would be stacked below the Ethernet shield.'''''

(:divend:)


!!!Schematic
(:div class=circuit :)
%height=300px%[[Attach:PachubeClient_sch.png | Attach:PachubeClient_sch.png]]
(:divend:)

'''''Pictured: One CDS photocells with a 10k ohm pull down resistor on analog pin 0.'''''


!!!Code

(:div class=code :)
(:source http://arduino.cc/en/pub/code/master/libraries/Ethernet/examples/PachubeClientString/PachubeClientString.pde lang=arduino tabwidth=4:)
(:divend:)


!!!See Also:
* [[http://www.tigoe.net/pcomp/code/category/arduinowiring/873|Example project]] using Pachube and the Ethernet shield (the code above is more recent, however)
(:include EthernetSeeAlsoIncludes :)

Share