Pages: [1]   Go Down
Author Topic: Question about the Arduino Ethernet with PoE module  (Read 1768 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I bought the Arduino Uno and the Arduino Ethernet with PoE module, they haven't arrived yet, but I'm already studying their functionalities. This will be my first experience with Arduino, although I know very much about microcontrollers, specially the 16F and 18F series from Microchip, aswell other areas in the electronics.

I read about the pachube.com and how it can be used for free to monitor data from anywhere with Internet and got this sample code.

Code:
/*
  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
 updated 16 Mar 2012
 by Tom Igoe with input from Usman Haque and Joe Saavedra
 
 http://arduino.cc/en/Tutorial/PachubeClientString
 This code is in the public domain.
 
 */

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


#define APIKEY         "0mHaYIze8rsoLDw3VWZ2XSSTZ3-SAKw1QXpXNFh2TW9tVT0g" // replaced with my pachube api key
#define FEEDID        52753 // replaces with my 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[] = {
  0x14, 0xDA, 0xE9, 0x0F, 0x67, 0x2B};//Physical address according to "ipconfig /all" on cmd.exe
// fill in an available IP address on your network here,
// for manual configuration:
IPAddress ip(192,168,1,20);//Available IP address on my lan

// 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,122);      // 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() {
  // start serial port:
  Serial.begin(9600);
  // 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();
}


The question is:

Supposing I have made all the connection correctly and have, let's say an LM35 on the Analog Input, will my Pachube feed look something like this:



Of course not exactly this because I haven't processed the voltage value from the LM35 to correspond the respective temperature, but I mean, will a graph be draw by Pachube API and be refreshed on the site?

Thank you.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
there's no place like 127.0.0.1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
...will a graph be draw by Pachube API and be refreshed on the site?

Short answer: Yes  smiley

Although I have never personally used Pachube.


From my experience with ThingSpeak, it works flawlessly, and I imagine that it is equally easy with Pachube.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Very nice, I've never heard about ThingSpeak, until now. Do you mind elaborating if it has some complications and/or limitations? Aswell providing your working code and a source of samples, since I couldn't found on Arduino's site?

Thank you for your help.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 65
there's no place like 127.0.0.1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The free version of Thingspeak has a limitation of maximum one post (logging) per 15 seconds per channel.
Each channel can contain up to 8 fields.
Currently, you can only show 1 field (plot) in each chart (would be nice if it was possible to show eg. indoor and outdoor temperature in the same chart).

Have a look here for examples and tutorials:
http://community.thingspeak.com/tutorials/

Direct link to GitHub with the current arduino example:
https://github.com/iobridge/ThingSpeak-Arduino-Examples/blob/master/Ethernet/Arduino_to_ThingSpeak.ino

Link to my test channel, containing outdoor temperature readings:
https://thingspeak.com/channels/757
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 41
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

In my project I will have multiple feeds being refreshed with only one Arduino, so the value being uploaded to the feed is not actually an Analog value, it's a number, which I want the Arduino to receive through the serial port.

On the code posted on the first post I have the following lines:

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

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

As you can see I changed "analogRead(A0)" to "Serial.read()".

So lets suppose I have the number 144 being send in a loop by another microcontroller serial port to the Arduino. Should mu Pachube feed draw a line?

Thank you.
Logged

Pages: [1]   Go Up
Jump to: