I’ve got a climate datalogger in my house here in West Auckland. Its based on an Etherten from Freetronics, which is an ethernet-enabled Arduino Uno compatible board. On that is sat a wing screw shield for easy connection of wires and on top of that is sat an Adafruit LCD shield showing the readings.
Here’s the Arduino sketch, if anyone’s interest.
#include <SPI.h>
#include <Ethernet.h>
#include <HttpClient.h>
#include <Cosm.h>
// ! ! USB DEBUG OPTION ! !
int debug = 0;
// Sensor setup
#include “Wire.h”
#include “Adafruit_BMP085.h”
#include “DHT.h”
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Adafruit_MCP23017.h>
#include <Adafruit_RGBLCDShield.h>
// MAC address for your Ethernet shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip (192,168,1,65); // Available Static IP address on your Network. See Instructions
// Your Cosm key to let you upload data
char cosmKey[] = “@@@@@ your key goes between the quotes here @@@@@@@”;
#define FEED_ID 76854;
unsigned long feedID = FEED_ID;
// Define the strings for our datastream IDs
char sensorID0[] = “BMPp”;
char sensorID1[] = “DHTh”;
char sensorID2[] = “DSt”;
char sensorID3[] = “light”;
char sensorID4[] = “BMPt”;
char sensorID5[] = “DHTt”;
CosmDatastream datastreams[] = {
CosmDatastream(sensorID0, strlen(sensorID0), DATASTREAM_FLOAT),
CosmDatastream(sensorID1, strlen(sensorID1), DATASTREAM_FLOAT),
CosmDatastream(sensorID2, strlen(sensorID2), DATASTREAM_FLOAT),
CosmDatastream(sensorID3, strlen(sensorID3), DATASTREAM_FLOAT),
CosmDatastream(sensorID4, strlen(sensorID4), DATASTREAM_FLOAT),
CosmDatastream(sensorID5, strlen(sensorID5), DATASTREAM_FLOAT),
};
// Finally, wrap the datastreams into a feed
CosmFeed feed(feedID, datastreams, 6 /* number of datastreams */);
EthernetClient client;
CosmClient cosmclient(client);
// LCD shield
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
#define WHITE 0x7
Adafruit_BMP085 bmp;
//
//// Data wire is plugged into which pin on the Arduino?
#define ONE_WIRE_BUS 6
//
//// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
//
//// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
#define DHTPIN 3 // what pin we’re connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
float light;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setBacklight(WHITE);
lcd.print(“initialising”);
Serial.println(“Starting single datastream upload to Cosm…”);
Serial.println();
if (debug < 1 ) {
while (Ethernet.begin(mac) != 1)
{
Serial.println(“Error getting IP address via DHCP, trying again…”);
Serial.println(millis());
// lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Error getting IP”);
lcd.setCursor(0,1);
lcd.print(millis()/1000);
delay(5000);
}
}
// set pin modes to power sensors
pinMode(7, OUTPUT);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(2, OUTPUT);
digitalWrite(7, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(2, HIGH);
// initialise sensors
bmp.begin();
dht.begin();
sensors.begin();
delay(100);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(millis()/1000);
// Get sensor readings
// BMP085
float BMPt = bmp.readTemperature();
float BMPp = bmp.readPressure() / 100.0;
// DHT22
float DHTh = dht.readHumidity();
float DHTt = dht.readTemperature();
// DS18B20
sensors.requestTemperatures(); // Send the command to get temperatures
float DSt = (sensors.getTempCByIndex(0));
// get light
light = analogRead(0)/ 10.23;
datastreams[0].setFloat(BMPp);
datastreams[1].setFloat(DHTh);
datastreams[2].setFloat(DSt);
datastreams[3].setFloat(light);
datastreams[4].setFloat(BMPt);
datastreams[5].setFloat(DHTt);
if (debug > 0) {
/*———–( Show the values inside the streams for test/debug )—–*/
Serial.println(“—–[ Test: Check values inside the Streams ]—–”);
Serial.print(“BMPp: ”);
Serial.println(datastreams[0].getFloat()); // Print datastream to serial monitor
Serial.print(“DHTh: ”);
Serial.println(datastreams[1].getFloat()); // Print datastream to serial monitor
Serial.print(“DSt: ”);
Serial.println(datastreams[2].getFloat()); // Print datastream to serial monitor
Serial.print(“light: ”);
Serial.println(datastreams[3].getFloat()); // Print datastream to serial monitor
Serial.print(“BMPt: ”);
Serial.println(datastreams[4].getFloat()); // Print datastream to serial monitor
Serial.print(“DHTt: ”);
Serial.println(datastreams[5].getFloat()); // Print datastream to serial monitor
delay(2500);
}
if (debug < 1) {
Serial.println(“Uploading to Cosm”);
lcd.clear();
lcd.setCursor(0,1);
lcd.print(“sending to COSM”);
int ret = cosmclient.put(feed, cosmKey);
Serial.print(“COSM client returns: ”); // Get return result code, similar to HTTP code
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“COSM client”);
lcd.setCursor(0,1);
lcd.print(“returned: ”);
Serial.println(ret);
lcd.print(ret);
Serial.println();
delay(500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“BMPp: ”);
lcd.print(BMPp);
lcd.setCursor(0,1);
lcd.print(“BMPt: ”);
lcd.print(BMPt);
delay(3500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“DHTh: ”);
lcd.print(DHTh);
lcd.setCursor(0,1);
lcd.print(“DHTt: ”);
lcd.print(DHTt);
delay(3500);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“light: ”);
lcd.print(light);
lcd.setCursor(0,1);
lcd.print(“DSt: ”);
lcd.print(DSt);
delay(3500);
}
}