|
- /*
- Xively sensor client with Strings
-
- This sketch connects an analog sensor to Xively (http://www.xively.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 xively.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/XivelyClientString
- This code is in the public domain.
-
- */
-
- #include <SPI.h>
- #include <Ethernet.h>
-
-
- #define APIKEY "YOUR API KEY GOES HERE" // replace your Xively 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.xively.com
- //char server[] = "api.xively.com"; // name address for xively 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 xively.com
-
- void setup() {
- // You can use Ethernet.init(pin) to configure the CS pin
- //Ethernet.init(10); // Most Arduino shields
- //Ethernet.init(5); // MKR ETH shield
- //Ethernet.init(0); // Teensy 2.0
- //Ethernet.init(20); // Teensy++ 2.0
- //Ethernet.init(15); // ESP8266 with Adafruit Featherwing Ethernet
- //Ethernet.init(33); // ESP32 with Adafruit Featherwing Ethernet
-
- // Open serial communications and wait for port to open:
- Serial.begin(9600);
- while (!Serial) {
- ; // wait for serial port to connect. Needed for native USB port 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
- // xively 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.xively.com");
- client.print("X-xivelyApiKey: ");
- 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();
- }
|