Kiilo-ArduinoEthernetShield-Read/Write

From SGMK-SSAM-WIKI
Revision as of 18:47, 12 April 2011 by Kiilo (talk | contribs) (Created page with "arduino + ethernetshield == OUTPUT send sensor data to pachube == <nowiki> /* Pachube sensor client with Strings This sketch connects an analog sensor to Pachube (http://...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

arduino + ethernetshield


OUTPUT send sensor data to pachube

/* 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 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 4 Sep 2010 by Tom Igoe This code is in the public domain. */ #include <SPI.h> #include <Ethernet.h> #include <SHT1x.h> #include <stdlib.h> //dtostrf(FLOAT,WIDTH,PRECSISION,BUFFER); // Specify data and clock connections and instantiate SHT1x object #define dataPin 6 #define clockPin 7 SHT1x sht1x(dataPin, clockPin); // assign a MAC address for the ethernet controller. // fill in your address here: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // assign an IP address for the controller: byte ip[] = { 192,168,49,20 }; byte gateway[] = { 192,168,49,1}; byte subnet[] = { 255, 255, 255, 0 }; // The address of the server you want to connect to (pachube.com): byte server[] = { 173,203,98,29 }; // initialize the library instance: Client client(server, 80); 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 int postingInterval = 10000; //delay between updates to Pachube.com long lastReadingTime = 0; const int readingInterval = 2000; //delay between readings // read the SHT11sensor: float temp_c; float temp_f; float humidity; String dataString = ""; void setup() { // start the ethernet connection and serial port: Ethernet.begin(mac, ip); Serial.begin(9600); // give the ethernet module time to boot up: delay(1000); } void loop() { if (millis() - lastReadingTime > readingInterval) { lastReadingTime = millis(); // Read values from the sensor temp_c = sht1x.readTemperatureC(); //temp_f = sht1x.readTemperatureF(); humidity = sht1x.readHumidity(); // Print the values to the serial port //Serial.print("Temperature: "); //Serial.print(temp_c, DEC); //((Serial.print("C / "); //Serial.print(humidity); //Serial.println("%"); // convert the data to a String to send it: char out[20] = ""; dataString = dtostrf(temp_c, 5, 2, out); dataString += ","; dataString += dtostrf(humidity, 5, 2, out); //Serial.println(dataString); } // 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); Serial.println(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()) { Serial.println("connecting..."); // send the HTTP PUT request. // fill in your feed address here: client.print("PUT /api/2626.csv HTTP/1.1\n"); client.print("Host: www.pachube.com\n"); // fill in your Pachube API key here: client.print("X-PachubeApiKey: 6e10b9a84989101b7135821003473d587edbd714062d1fea8eceb9c3682900d6\n"); client.print("Content-Length: "); client.println(thisData.length(), DEC); // last pieces of the HTTP PUT request: client.print("Content-Type: text/csv\n"); client.println("Connection: close\n"); // here's the actual content of the PUT request: client.println(thisData); // note the time that the connection was made: lastConnectionTime = millis(); } else { // if you couldn't make a connection: Serial.println("connection failed"); } }

INPUT retrieve sensor data from pachube

/* PachubeClientTest Author: Arduinomstr Date: 21-12-2010 Version: 1.1 Sketch to test updating Pachube feed using Official Arduino Ethernet shield - Reset pin on Ethernet Controller needs bending out of header and connecting to pin 8 to provide hardware reset Updates feed with fixed data and displays response on serial monitor Tested on Duemilanove, DFRobot Shield and Arduino 0022 */ #include <SPI.h> #include <Ethernet.h> #include <TextFinder.h> #include <Servo.h> #define DEBUG_OUTPUT false #define PACHUBE_FEED_ID 2626 #define PACHUBE_API_KEY "<YOUR API KEY HERE!>" #define PACHUBE_UPDATE_INTERVAL 10000 /* Delay between updates, milliseconds */ #define RESET_PIN 8 /* Reset Ethernet using Arduino */ #define WAITING 2 /* Waiting state */ #define CONNECTING 3 /* Connecting state */ #define SENDING 4 /* Sending state */ #define FAILING 5 /* Failing state */ #define READING 6 /* Reading state */ #define DISCONNECTING 7 /* Disconnecting state */ #define PARSING 9 #define FIRST_LED WAITING /* First in consecutive LEDs */ #define LAST_LED DISCONNECTING /* Last LED */ byte mac[] = { 0xDE, 0xAD, 0xBA, 0xEF, 0xFA, 0xAD }; byte ip[] = { 192, 168, 49, 24 }; byte gateway[] = { 192, 168, 49, 1 }; byte subnet[] = { 255, 255, 255, 0 }; byte server[] = { 173, 203, 98, 29 }; /* www.pachube.com */ int state = 0; /* System state */ Client client(server, 80); /* Client listening on port 80 */ TextFinder finder( client); Servo Pointer; int pos = 0; //String pachubeString = PACHUBE_TEST_DATA; /* Construct string using test data */ //float PachubeSensor[]= {0, 0, 0, 0, 0, 0 ,0 ,0}; // Set-up Arduino I/O and Ethernet Controller // Includes fix to kick-start Ethernet on power-up / // power-failure by using reset signal from Arduino // to reset-pin on Ethernet Shield void setup() { pinMode(RESET_PIN, OUTPUT); /* Configure I/O pins as outputs */ Pointer.attach(7); // Start fix digitalWrite(RESET_PIN, LOW); /* Take Ethernet reset line low */ delay(200); /* momentarily */ digitalWrite(RESET_PIN, HIGH); /* Bring it up again */ delay(2000); /* Allow Ethernet time to boot */ // End of fix Serial.begin(9600); /* Initialise serial line on Arduino */ Ethernet.begin(mac, ip, gateway, subnet); /* Initialise Ethernet settings */ } // Main function void loop() { Serial.println("WAITING..."); waiting(); /* Provide delay between updates */ if (!client.connected()) { Serial.println("CONNECTING..."); connecting(); /* Connect if no connection */ } if (client.connected()) { Serial.println("SENDING..."); sending(); /* Do PUT if connection is present */ //Serial.print("Data sent: "); //Serial.println(pachubeString); } else { Serial.println("FAILING..."); fail(); /* Otherwise enter failure state */ } if (client.available()) { Serial.println("READING..."); reading(); /* Output response if there is one */ } if (!client.connected()) { Serial.println(); Serial.println("DISCONNECTING..."); disconnecting(); /* Stop client if disconnected */ } } /* End of main loop */ // Set WAITING state and // wait for update interval void waiting() { state = WAITING; /* Set state */ showStatus(); /* Turn on LED */ delay(PACHUBE_UPDATE_INTERVAL); /* Delay until net update */ } // Set CONNECTING state and try to connect void connecting() { state = CONNECTING; /* Set state */ showStatus(); /* Turn on LED */ client.connect(); /* Try to connect */ } // Set SENDING state // build PUT request and send data void sending() { state = SENDING; /* Set state */ showStatus(); /* Turn on LED */ client.print("GET /api/feeds/"); client.print(PACHUBE_FEED_ID); client.println(".csv HTTP/1.0"); /* update using csv format */ client.println("Host: www.pachube.com"); client.print("X-PachubeApiKey: "); client.println(PACHUBE_API_KEY); //client.print("Content-Length: "); //client.println(pachubeString.length(), DEC); /* Calculate length of request */ client.println("Content-Type: text/csv"); client.println("Connection: close"); client.println(); //client.prinn(pachubeString); /* Output test data */ client.println(); } // Set FAILING state and continue void fail() { state = FAILING; /* Set state */ showStatus(); /* Turn on LED */ } // Set READING state and keep reading // bytes from buffer until it is empty // outputting bytes to serial monitor void reading() { state = READING; /* Set state */ showStatus(); //while (client.available()) { /* When buffer has data */ // char c = client.read(); /* Read byte */ // Serial.print(c); while (client.available()) { if( finder.find("HTTP/1.1")) { int response = finder.getValue(); Serial.println(response); } if( finder.find("\r\n\r\n")) { float temp = finder.getFloat(); float hum = finder.getFloat(); Serial.println(temp); Serial.println(hum); Pointer.write((int)(temp * 4.5)); } client.flush(); } } // Set DISCONNECTING state // and stop client void disconnecting() { state = DISCONNECTING; /* Set state */ showStatus(); /* Turn on LED */ client.stop(); /* Stop client */ } // Turn off each LEDs unless it // matches current status void showStatus() { /* Turn off LED is pin does not */ delay(2000); /* Keep LED on for short while */ }