/* Dweet.io GET client for ArduinoHttpClient library Connects to dweet.io once every ten seconds, sends a GET request and a request body. Uses SSL Shows how to use Strings to assemble path and parse content from response. dweet.io expects: https://dweet.io/get/latest/dweet/for/thingName For more on dweet.io, see https://dweet.io/play/ note: WiFi SSID and password are stored in config.h file. If it is not present, add a new tab, call it "config.h" and add the following variables: char ssid[] = "ssid"; // your network SSID (name) char pass[] = "password"; // your network password created 15 Feb 2016 updated 16 Feb 2016 by Tom Igoe this example is in the public domain */ #include #include #include "config.h" const char serverAddress[] = "dweet.io"; // server address int port = 80; String dweetName = "scandalous-cheese-hoarder"; // use your own thing name here WiFiClient wifi; HttpClient client = HttpClient(wifi, serverAddress, port); int status = WL_IDLE_STATUS; int statusCode = 0; String response; void setup() { Serial.begin(9600); while (!Serial); while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to Network named: "); Serial.println(ssid); // print the network name (SSID); // Connect to WPA/WPA2 network: status = WiFi.begin(ssid, pass); } // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); } void loop() { // assemble the path for the GET message: String path = "/get/latest/dweet/for/" + dweetName; // send the GET request Serial.println("making GET request"); client.get(path); // read the status code and body of the response statusCode = client.responseStatusCode(); response = client.responseBody(); Serial.print("Status code: "); Serial.println(statusCode); Serial.print("Response: "); Serial.println(response); /* Typical response is: {"this":"succeeded", "by":"getting", "the":"dweets", "with":[{"thing":"my-thing-name", "created":"2016-02-16T05:10:36.589Z", "content":{"sensorValue":456}}]} You want "content": numberValue */ // now parse the response looking for "content": int labelStart = response.indexOf("content\":"); // find the first { after "content": int contentStart = response.indexOf("{", labelStart); // find the following } and get what's between the braces: int contentEnd = response.indexOf("}", labelStart); String content = response.substring(contentStart + 1, contentEnd); Serial.println(content); // now get the value after the colon, and convert to an int: int valueStart = content.indexOf(":"); String valueString = content.substring(valueStart + 1); int number = valueString.toInt(); Serial.print("Value string: "); Serial.println(valueString); Serial.print("Actual value: "); Serial.println(number); Serial.println("Wait ten seconds\n"); delay(10000); }