Skip to main content
3 of 5
added 1 character in body

DHT22 and SI114X.h com

It looks like i cannot combine the Grove Sunlight sensor and the Grove DHT22 Temperature and Humidity sensor. I can't figure out why.

I've the following setup: Seeeduino CLOUD (Arduino YUN clone) Grove Shield Grove Sunlight sensor connected to a I2C port Grove DHT22 Temperature and Humidity sensor connected to port A0

I'm sending the data to Initialstate.com

// Process.h gives us access to the Process class, which lets
// us communicate with the shell
#include "DHT.h"        //Temp Hum sensor
#include <Bridge.h>
#include <Process.h>
#include <Wire.h>
#include "SI114X.h"     //Sunlight sensor

SI114X SI1145 = SI114X();

////////////////////////////////////////////

//Temperature and Humidity sensor data start
#define DHTPIN A0     // what sensor is connected to, in this case A0

//#define DHTTYPE DHT11   // DHT 11 
#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

//Temparature and Humidity sensor data end

////////////////////////////////////////////

 
////////////////////////////
// Initial State Streamer //
////////////////////////////
// URL to IS Bucket API
String ISBucketURL = "https://groker.initialstate.com/api/buckets";
// URL to IS Event API
String ISEventURL = "https://groker.initialstate.com/api/events";
// Access key (the one you find in your account settings):
String accessKey = "KRYLC3tvJUiyTVqTJr5nRqgkKQI2FiDh";
String bucketKey = "Test_Klimaat2";
// Bucket name (name your data will be associated with in Initial State):
String bucketName = "Test klimaat 2";
// Bucket key (hidden reference to your bucket that allows appending):
//String bucketKey = "arduino_stream";
// Bucket name (name your data will be associated with in Initial State):
//String bucketName = "Arduino Stream";
// How many signals are in your stream? You can have as few or as many as you want
const int NUM_SIGNALS = 5;
// What are the names of your signals (i.e. "Temperature", "Humidity", etc.)
String signalName[NUM_SIGNALS] = {"Humidity", "Temperatur", "Visable", "Infrared", "UV"};
// This array is to store our signal data later
String signalData[NUM_SIGNALS];

// This only runs once at the very beginning
void setup() 
{
  Serial.begin(9600);
  Bridge.begin();
  Wire.begin(); 
  SI1145.Begin();
  dht.begin(); //Initialize temparature and humidity sensor
 
 
  while (!Serial);
    // Post Bucket
    Serial.println("Posting Bucket!");
    // The postBucket() function creates a bucket 
    // (unnecessary if the bucket already exists)
    postBucket();
}
 
// This repeats
void loop()
{  
  // Gather Data
  // Read from a port for input or output or generate your own values/messages
  // These signals are random numbers for the sake of example
  
  String VIS;
  String IR;
  String UV;
  String TEMP;
  String HUM;
  
  //Code reading DHT22
  HUM = String((float)dht.readHumidity());
  TEMP = String((float)dht.readTemperature());
  
  //code reading Sunlight data
  VIS = String(SI1145.ReadVisible());
  IR = String(SI1145.ReadIR());
  UV = String((float)SI1145.ReadUV()/100);
        
  signalData[0] = HUM;
  signalData[1] = TEMP;
  signalData[2] = VIS;
  signalData[3] = IR;
  signalData[4] = UV;

 
  // Post Data
  Serial.println("Posting Data!");
  // The postData() function streams our events
  postData(); 
  // Wait for 5 seconds before collecting and sending the next batch
  delay(5000);
}
 
 
 
// Here are the data bucket creation and posting functions
// They do not need to be edited - everything you would need to change for 
// your situation can be found above
 
void postBucket()
{
  // Initialize the process
  Process isbucket;
 
  isbucket.begin("curl");
  isbucket.addParameter("-k");
  isbucket.addParameter("-v");
  isbucket.addParameter("-X");
  isbucket.addParameter("POST");
  isbucket.addParameter("-H");
  isbucket.addParameter("Content-Type:application/json");
  isbucket.addParameter("-H");
  isbucket.addParameter("Accept-Version:0.0.1");
 
  // IS Access Key Header
  isbucket.addParameter("-H");
  isbucket.addParameter("X-IS-AccessKey:" + accessKey);
 
  // IS Bucket Key Header
  isbucket.addParameter("-d");
  isbucket.addParameter("{\"bucketKey\": \"" + bucketKey + "\", \"bucketName\": \"" + bucketName + "\"}");
  
  isbucket.addParameter("https://groker.initialstate.com/api/buckets");
  
  // Run the process
  isbucket.run();
 
  Serial.flush();
}
 
void postData()
{
  // Initialize the process
  Process isstreamer;
 
  isstreamer.begin("curl");
  isstreamer.addParameter("-k");
  isstreamer.addParameter("-v");
  isstreamer.addParameter("-X");
  isstreamer.addParameter("POST");
  isstreamer.addParameter("-H");
  isstreamer.addParameter("Content-Type:application/json");
  isstreamer.addParameter("-H");
  isstreamer.addParameter("Accept-Version:0.0.1");
 
  // IS Access Key Header
  isstreamer.addParameter("-H");
  isstreamer.addParameter("X-IS-AccessKey:" + accessKey);
 
  // IS Bucket Key Header
  // Note that bucketName is not needed here
  isstreamer.addParameter("-H");
  isstreamer.addParameter("X-IS-BucketKey:" + bucketKey);
 
  isstreamer.addParameter("-d");
 
  // Initialize a string to hold our signal data
  String jsonData;
 
  jsonData = "[";
 
  for (int i=0; i<NUM_SIGNALS; i++)
  {
    jsonData += "{\"key\": \"" + signalName[i] + "\", \"value\": \"" + signalData[i] + "\"}";
 
    if (i != NUM_SIGNALS - 1)
    {
      jsonData += ",";
    }
  }
 
  jsonData += "]";
 
  isstreamer.addParameter(jsonData);
 
  isstreamer.addParameter("https://groker.initialstate.com/api/events");
 
  // Print posted data for debug
  Serial.print("Sending data: ");
  Serial.println(jsonData);
 
  // Run the process
  isstreamer.run();
 
  Serial.flush();
}

This is my code:

When I run this code the Serial monitor will correctly display the data string I want to send with all values. However the data is NOT send. Only when I comment out one of these lines in the Loop declaration the data is send to Initial state successfully. Obviously without the data commented out:

  //Code reading DHT22
  HUM = String((float)dht.readHumidity());
  TEMP = String((float)dht.readTemperature());
  
  //code reading Sunlight data
  VIS = String(SI1145.ReadVisible());
  IR = String(SI1145.ReadIR());
  UV = String((float)SI1145.ReadUV()/100);

Any ideas are appreciated.