Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. Multiple DHT22 in one sensor for greenhouse (newbee question)

Multiple DHT22 in one sensor for greenhouse (newbee question)

Scheduled Pinned Locked Moved Troubleshooting
multiple dht22
11 Posts 5 Posters 5.2k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • DickD Offline
    DickD Offline
    Dick
    wrote on last edited by sundberg84
    #1

    I try to find out how to create a sensor with 2 DHT22 and, because I am a beginner I do something wrong. Can anybody help me so I can continue with my fisrst MYSENSORS steps.
    Here the script:

    #include <SPI.h>
    #include <MySensor.h>  
    #include <DHT.h>  
    
    #define CHILD_ID_HUM 0
    #define CHILD_ID_TEMP 1
    #define HUMIDITY_SENSOR_DIGITAL_PIN 3
    #define CHILD_ID_HUM 10
    #define CHILD_ID_TEMP 11
    #define HUMIDITY_SENSOR_DIGITAL_PIN 4
    unsigned long SLEEP_TIME = 3000; // Sleep time between reads (in milliseconds)
    
    MySensor gw;
    DHT dht;
    float lastTemp;
    float lastHum;
    boolean metric = true; 
    MyMessage msgHum(CHILD_ID_HUM, V_HUM);
    MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
    
    
    void setup()  
    { 
      gw.begin();
      dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
    
      // Send the Sketch Version Information to the Gateway
      gw.sendSketchInfo("Humidity", "1.0");
    
      // Register all sensors to gw (they will be created as child devices)
      gw.present(CHILD_ID_HUM, S_HUM);
      gw.present(CHILD_ID_TEMP, S_TEMP);
      
      metric = gw.getConfig().isMetric;
    }
    
    void loop()      
    {  
      delay(dht.getMinimumSamplingPeriod());
    
      float temperature = dht.getTemperature();
      if (isnan(temperature)) {
          Serial.println("Failed reading temperature from DHT");
      } else if (temperature != lastTemp) {
        lastTemp = temperature;
        if (!metric) {
          temperature = dht.toFahrenheit(temperature);
        }
        gw.send(msgTemp.set(temperature, 1));
        Serial.print("T: ");
        Serial.println(temperature);
      }
      
      float humidity = dht.getHumidity();
      if (isnan(humidity)) {
          Serial.println("Failed reading humidity from DHT");
      } else if (humidity != lastHum) {
          lastHum = humidity;
          gw.send(msgHum.set(humidity, 1));
          Serial.print("H: ");
          Serial.println(humidity);
      }
    
      gw.sleep(SLEEP_TIME); //sleep a bit
    }
    
    DickD 1 Reply Last reply
    0
    • DickD Dick

      I try to find out how to create a sensor with 2 DHT22 and, because I am a beginner I do something wrong. Can anybody help me so I can continue with my fisrst MYSENSORS steps.
      Here the script:

      #include <SPI.h>
      #include <MySensor.h>  
      #include <DHT.h>  
      
      #define CHILD_ID_HUM 0
      #define CHILD_ID_TEMP 1
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      #define CHILD_ID_HUM 10
      #define CHILD_ID_TEMP 11
      #define HUMIDITY_SENSOR_DIGITAL_PIN 4
      unsigned long SLEEP_TIME = 3000; // Sleep time between reads (in milliseconds)
      
      MySensor gw;
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true; 
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      
      void setup()  
      { 
        gw.begin();
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
        // Send the Sketch Version Information to the Gateway
        gw.sendSketchInfo("Humidity", "1.0");
      
        // Register all sensors to gw (they will be created as child devices)
        gw.present(CHILD_ID_HUM, S_HUM);
        gw.present(CHILD_ID_TEMP, S_TEMP);
        
        metric = gw.getConfig().isMetric;
      }
      
      void loop()      
      {  
        delay(dht.getMinimumSamplingPeriod());
      
        float temperature = dht.getTemperature();
        if (isnan(temperature)) {
            Serial.println("Failed reading temperature from DHT");
        } else if (temperature != lastTemp) {
          lastTemp = temperature;
          if (!metric) {
            temperature = dht.toFahrenheit(temperature);
          }
          gw.send(msgTemp.set(temperature, 1));
          Serial.print("T: ");
          Serial.println(temperature);
        }
        
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
            Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum) {
            lastHum = humidity;
            gw.send(msgHum.set(humidity, 1));
            Serial.print("H: ");
            Serial.println(humidity);
        }
      
        gw.sleep(SLEEP_TIME); //sleep a bit
      }
      
      DickD Offline
      DickD Offline
      Dick
      wrote on last edited by
      #2

      @Dick said:

      I try to find out how to create a sensor with 2 DHT22 and, because I am a beginner I do something wrong. Can anybody help me so I can continue with my fisrst MYSENSORS steps.
      the problem is that I can only see one temp and one humid.
      it is something in the code .

      Here the script:

      #include <SPI.h>
      #include <MySensor.h>
      #include <DHT.h>

      #define CHILD_ID_HUM 0
      #define CHILD_ID_TEMP 1
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      #define CHILD_ID_HUM 10
      #define CHILD_ID_TEMP 11
      #define HUMIDITY_SENSOR_DIGITAL_PIN 4
      unsigned long SLEEP_TIME = 3000; // Sleep time between reads (in milliseconds)

      MySensor gw;
      DHT dht;
      float lastTemp;
      float lastHum;
      boolean metric = true;
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);

      void setup()
      {
      gw.begin();
      dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);

      // Send the Sketch Version Information to the Gateway
      gw.sendSketchInfo("Humidity", "1.0");

      // Register all sensors to gw (they will be created as child devices)
      gw.present(CHILD_ID_HUM, S_HUM);
      gw.present(CHILD_ID_TEMP, S_TEMP);

      metric = gw.getConfig().isMetric;
      }

      void loop()
      {
      delay(dht.getMinimumSamplingPeriod());

      float temperature = dht.getTemperature();
      if (isnan(temperature)) {
      Serial.println("Failed reading temperature from DHT");
      } else if (temperature != lastTemp) {
      lastTemp = temperature;
      if (!metric) {
      temperature = dht.toFahrenheit(temperature);
      }
      gw.send(msgTemp.set(temperature, 1));
      Serial.print("T: ");
      Serial.println(temperature);
      }

      float humidity = dht.getHumidity();
      if (isnan(humidity)) {
      Serial.println("Failed reading humidity from DHT");
      } else if (humidity != lastHum) {
      lastHum = humidity;
      gw.send(msgHum.set(humidity, 1));
      Serial.print("H: ");
      Serial.println(humidity);
      }

      gw.sleep(SLEEP_TIME); //sleep a bit
      }

      BulldogLowellB 1 Reply Last reply
      0
      • DickD Dick

        @Dick said:

        I try to find out how to create a sensor with 2 DHT22 and, because I am a beginner I do something wrong. Can anybody help me so I can continue with my fisrst MYSENSORS steps.
        the problem is that I can only see one temp and one humid.
        it is something in the code .

        Here the script:

        #include <SPI.h>
        #include <MySensor.h>
        #include <DHT.h>

        #define CHILD_ID_HUM 0
        #define CHILD_ID_TEMP 1
        #define HUMIDITY_SENSOR_DIGITAL_PIN 3
        #define CHILD_ID_HUM 10
        #define CHILD_ID_TEMP 11
        #define HUMIDITY_SENSOR_DIGITAL_PIN 4
        unsigned long SLEEP_TIME = 3000; // Sleep time between reads (in milliseconds)

        MySensor gw;
        DHT dht;
        float lastTemp;
        float lastHum;
        boolean metric = true;
        MyMessage msgHum(CHILD_ID_HUM, V_HUM);
        MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);

        void setup()
        {
        gw.begin();
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);

        // Send the Sketch Version Information to the Gateway
        gw.sendSketchInfo("Humidity", "1.0");

        // Register all sensors to gw (they will be created as child devices)
        gw.present(CHILD_ID_HUM, S_HUM);
        gw.present(CHILD_ID_TEMP, S_TEMP);

        metric = gw.getConfig().isMetric;
        }

        void loop()
        {
        delay(dht.getMinimumSamplingPeriod());

        float temperature = dht.getTemperature();
        if (isnan(temperature)) {
        Serial.println("Failed reading temperature from DHT");
        } else if (temperature != lastTemp) {
        lastTemp = temperature;
        if (!metric) {
        temperature = dht.toFahrenheit(temperature);
        }
        gw.send(msgTemp.set(temperature, 1));
        Serial.print("T: ");
        Serial.println(temperature);
        }

        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
        Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum) {
        lastHum = humidity;
        gw.send(msgHum.set(humidity, 1));
        Serial.print("H: ");
        Serial.println(humidity);
        }

        gw.sleep(SLEEP_TIME); //sleep a bit
        }

        BulldogLowellB Offline
        BulldogLowellB Offline
        BulldogLowell
        Contest Winner
        wrote on last edited by
        #3

        @Dick

        This (untested) should work to check the temp and humidity:

        #include <SPI.h>
        #include <MySensor.h>
        #include <DHT.h>
        
        #define CHILD_ID_HUM1 0
        #define CHILD_ID_HUM2 1
        #define CHILD_ID_TEMP1 3
        #define CHILD_ID_TEMP2 4
        
        unsigned long SLEEP_TIME = 3000; // Sleep time between reads (in milliseconds)
        
        MySensor gw;
        DHT*  dht[2];
        byte sensorPin[2] = {3, 4};
        float lastTemp[2] = {0.0, 0.0};
        float lastHum[2] = {0.0, 0.0};
        
        boolean metric = true;
        //MyMessage msgHum(CHILD_ID_HUM1, V_HUM);
        //MyMessage msgTemp(CHILD_ID_TEMP1, V_TEMP);
        
        void setup()
        {
          gw.begin();
          for (int i = 0; i < 2; i++)
          {
            dht[i] = new DHT;
            dht[i]->setup(sensorPin[i]);
          }
        
          gw.sendSketchInfo("Humidity", "1.0");
        
          gw.present(CHILD_ID_HUM1, S_HUM);
          gw.present(CHILD_ID_HUM2, S_HUM);
          gw.present(CHILD_ID_TEMP1, S_TEMP);
          gw.present(CHILD_ID_TEMP1, S_TEMP);
        
          metric = gw.getConfig().isMetric;
        }
        
        void loop()
        {
          for (int i = 0; i < 2; i++)
          {
            delay(dht[i]->getMinimumSamplingPeriod());
            float temperature = dht[i]->getTemperature();
            if (isnan(temperature))
            {
              Serial.print(F("Failed reading temperature from DHT"));
              Serial.println(i);
            }
            else if (temperature != lastTemp[i])
            {
              lastTemp[i] = temperature;
              if (!metric)
              {
                temperature = dht[i]->toFahrenheit(temperature);
              }
              //gw.send(msgTemp.set(temperature, i));
              Serial.print(F("T"));
              Serial.print(i);
              Serial.print(F("= "));
              Serial.println(temperature);
            }
            float humidity = dht[i]->getHumidity();
            if (isnan(humidity)) 
            {
              Serial.print("Failed reading humidity from DHT");
              Serial.println(i);
            } 
            else if (humidity != lastHum[i]) 
            {
              lastHum[i] = humidity;
              //gw.send(msgHum.set(humidity, 1));
              Serial.print(F("H"));
              Serial.print(i);
              Serial.print(F("= "));
              Serial.println(humidity);
            }
          }
          gw.sleep(SLEEP_TIME); //sleep a bit
        }
        

        if you can test it using the Serial Monitor, we can then get the radio commands working (not complete yet)

        DickD 1 Reply Last reply
        0
        • BulldogLowellB BulldogLowell

          @Dick

          This (untested) should work to check the temp and humidity:

          #include <SPI.h>
          #include <MySensor.h>
          #include <DHT.h>
          
          #define CHILD_ID_HUM1 0
          #define CHILD_ID_HUM2 1
          #define CHILD_ID_TEMP1 3
          #define CHILD_ID_TEMP2 4
          
          unsigned long SLEEP_TIME = 3000; // Sleep time between reads (in milliseconds)
          
          MySensor gw;
          DHT*  dht[2];
          byte sensorPin[2] = {3, 4};
          float lastTemp[2] = {0.0, 0.0};
          float lastHum[2] = {0.0, 0.0};
          
          boolean metric = true;
          //MyMessage msgHum(CHILD_ID_HUM1, V_HUM);
          //MyMessage msgTemp(CHILD_ID_TEMP1, V_TEMP);
          
          void setup()
          {
            gw.begin();
            for (int i = 0; i < 2; i++)
            {
              dht[i] = new DHT;
              dht[i]->setup(sensorPin[i]);
            }
          
            gw.sendSketchInfo("Humidity", "1.0");
          
            gw.present(CHILD_ID_HUM1, S_HUM);
            gw.present(CHILD_ID_HUM2, S_HUM);
            gw.present(CHILD_ID_TEMP1, S_TEMP);
            gw.present(CHILD_ID_TEMP1, S_TEMP);
          
            metric = gw.getConfig().isMetric;
          }
          
          void loop()
          {
            for (int i = 0; i < 2; i++)
            {
              delay(dht[i]->getMinimumSamplingPeriod());
              float temperature = dht[i]->getTemperature();
              if (isnan(temperature))
              {
                Serial.print(F("Failed reading temperature from DHT"));
                Serial.println(i);
              }
              else if (temperature != lastTemp[i])
              {
                lastTemp[i] = temperature;
                if (!metric)
                {
                  temperature = dht[i]->toFahrenheit(temperature);
                }
                //gw.send(msgTemp.set(temperature, i));
                Serial.print(F("T"));
                Serial.print(i);
                Serial.print(F("= "));
                Serial.println(temperature);
              }
              float humidity = dht[i]->getHumidity();
              if (isnan(humidity)) 
              {
                Serial.print("Failed reading humidity from DHT");
                Serial.println(i);
              } 
              else if (humidity != lastHum[i]) 
              {
                lastHum[i] = humidity;
                //gw.send(msgHum.set(humidity, 1));
                Serial.print(F("H"));
                Serial.print(i);
                Serial.print(F("= "));
                Serial.println(humidity);
              }
            }
            gw.sleep(SLEEP_TIME); //sleep a bit
          }
          

          if you can test it using the Serial Monitor, we can then get the radio commands working (not complete yet)

          DickD Offline
          DickD Offline
          Dick
          wrote on last edited by
          #4

          @BulldogLowell
          thats fast, I have a lot to learn when I read your code. I tested the code and on the serial it looks fine. As you mentioned already it cannot connect to the gateway. Can you also show me how that goos? I also want to know why you use [i] in your script? can you also advise me where to start to learn the programming language you used? hoop th hear from you soon.languagerhere.

          BulldogLowellB 1 Reply Last reply
          0
          • DickD Dick

            @BulldogLowell
            thats fast, I have a lot to learn when I read your code. I tested the code and on the serial it looks fine. As you mentioned already it cannot connect to the gateway. Can you also show me how that goos? I also want to know why you use [i] in your script? can you also advise me where to start to learn the programming language you used? hoop th hear from you soon.languagerhere.

            BulldogLowellB Offline
            BulldogLowellB Offline
            BulldogLowell
            Contest Winner
            wrote on last edited by BulldogLowell
            #5

            @Dick

            Sorry for the late response...

            I created two instances of the DHT object, using pointers, so that's a little beyond a beginner (but also not hard to do). The [i] is the for-loop index, I put the two sensors into an array to simplify the code (but a little harder for new person to understand).

            My advice is to go through the Arduino learning sections on their websites and search for C++ tutorials on the web, there are many good ones.

            Try this and see if it 1) sets up the two temperature and two humidity devices on your controller and 2) does it transmit the temperatures?

            #include <SPI.h>
            #include <MySensor.h>
            #include <DHT.h>
            
            #define NUM_SENSORS 2
            
            unsigned long SLEEP_TIME = 3000UL; // Sleep time between reads (in milliseconds)
            
            MySensor gw;
            MyMessage tempMssg(0, V_TEMP);
            MyMessage humMssg(NUM_SENSORS, V_HUM);
            
            byte tempID[NUM_SENSORS] = {0,1};
            byte humID[NUM_SENSORS] = {2,3};
            
            
            DHT* dht[NUM_SENSORS];
            byte sensorPin[NUM_SENSORS] = {3, 4};
            float lastTemp[NUM_SENSORS] = {0.0, 0.0};
            float lastHum[NUM_SENSORS] = {0.0, 0.0};
            
            boolean metric = true;
            
            void setup()
            {
              Serial.begin(9600);
              gw.begin();
              for (int i = 0; i < NUM_SENSORS; i++)
              {
                dht[i] = new DHT;
                dht[i]->setup(sensorPin[i]);
              }
            
              gw.sendSketchInfo("Humidity", "1.0");
              
              for (int i = 0; i < NUM_SENSORS; i++)
              {
                gw.present(tempID[i], S_TEMP);
                gw.present(humID[i], S_HUM);
              }
              
              metric = gw.getConfig().isMetric;
              Serial.println(F("Setup Complete."));
            }
            
            void loop()
            {
              for (int i = 0; i < NUM_SENSORS; i++)
              {
                delay(dht[i]->getMinimumSamplingPeriod());
                float temperature = dht[i]->getTemperature();
                if (isnan(temperature))
                {
                  Serial.print(F("Failed reading temperature from DHT"));
                  Serial.println(i);
                }
                else if (temperature != lastTemp[i])
                {
                  lastTemp[i] = temperature;
                  if (!metric)
                  {
                    temperature = dht[i]->toFahrenheit(temperature);
                  }
                  gw.send(tempMssg.setSensor(i).set(temperature, false));  // no ack
                  Serial.print(F("T"));
                  Serial.print(i);
                  Serial.print(F("= "));
                  Serial.println(temperature);
                }
                float humidity = dht[i]->getHumidity();
                if (isnan(humidity)) 
                {
                  Serial.print("Failed reading humidity from DHT");
                  Serial.println(i);
                } 
                else if (humidity != lastHum[i]) 
                {
                  lastHum[i] = humidity;
                  gw.send(humMssg.setSensor(i).set(humidity, false));  // no ack
                  Serial.print(F("H"));
                  Serial.print(i);
                  Serial.print(F("= "));
                  Serial.println(humidity);
                }
              }
              gw.sleep(SLEEP_TIME); //sleep a bit
            }
            

            I cannot test it but hopefully we can get it working for you.

            DickD turborickT 2 Replies Last reply
            0
            • BulldogLowellB BulldogLowell

              @Dick

              Sorry for the late response...

              I created two instances of the DHT object, using pointers, so that's a little beyond a beginner (but also not hard to do). The [i] is the for-loop index, I put the two sensors into an array to simplify the code (but a little harder for new person to understand).

              My advice is to go through the Arduino learning sections on their websites and search for C++ tutorials on the web, there are many good ones.

              Try this and see if it 1) sets up the two temperature and two humidity devices on your controller and 2) does it transmit the temperatures?

              #include <SPI.h>
              #include <MySensor.h>
              #include <DHT.h>
              
              #define NUM_SENSORS 2
              
              unsigned long SLEEP_TIME = 3000UL; // Sleep time between reads (in milliseconds)
              
              MySensor gw;
              MyMessage tempMssg(0, V_TEMP);
              MyMessage humMssg(NUM_SENSORS, V_HUM);
              
              byte tempID[NUM_SENSORS] = {0,1};
              byte humID[NUM_SENSORS] = {2,3};
              
              
              DHT* dht[NUM_SENSORS];
              byte sensorPin[NUM_SENSORS] = {3, 4};
              float lastTemp[NUM_SENSORS] = {0.0, 0.0};
              float lastHum[NUM_SENSORS] = {0.0, 0.0};
              
              boolean metric = true;
              
              void setup()
              {
                Serial.begin(9600);
                gw.begin();
                for (int i = 0; i < NUM_SENSORS; i++)
                {
                  dht[i] = new DHT;
                  dht[i]->setup(sensorPin[i]);
                }
              
                gw.sendSketchInfo("Humidity", "1.0");
                
                for (int i = 0; i < NUM_SENSORS; i++)
                {
                  gw.present(tempID[i], S_TEMP);
                  gw.present(humID[i], S_HUM);
                }
                
                metric = gw.getConfig().isMetric;
                Serial.println(F("Setup Complete."));
              }
              
              void loop()
              {
                for (int i = 0; i < NUM_SENSORS; i++)
                {
                  delay(dht[i]->getMinimumSamplingPeriod());
                  float temperature = dht[i]->getTemperature();
                  if (isnan(temperature))
                  {
                    Serial.print(F("Failed reading temperature from DHT"));
                    Serial.println(i);
                  }
                  else if (temperature != lastTemp[i])
                  {
                    lastTemp[i] = temperature;
                    if (!metric)
                    {
                      temperature = dht[i]->toFahrenheit(temperature);
                    }
                    gw.send(tempMssg.setSensor(i).set(temperature, false));  // no ack
                    Serial.print(F("T"));
                    Serial.print(i);
                    Serial.print(F("= "));
                    Serial.println(temperature);
                  }
                  float humidity = dht[i]->getHumidity();
                  if (isnan(humidity)) 
                  {
                    Serial.print("Failed reading humidity from DHT");
                    Serial.println(i);
                  } 
                  else if (humidity != lastHum[i]) 
                  {
                    lastHum[i] = humidity;
                    gw.send(humMssg.setSensor(i).set(humidity, false));  // no ack
                    Serial.print(F("H"));
                    Serial.print(i);
                    Serial.print(F("= "));
                    Serial.println(humidity);
                  }
                }
                gw.sleep(SLEEP_TIME); //sleep a bit
              }
              

              I cannot test it but hopefully we can get it working for you.

              DickD Offline
              DickD Offline
              Dick
              wrote on last edited by
              #6

              @BulldogLowell
              Pls do not sorry for the late response. I found it fast! I am glad that somebody wants to help others. At the moment I am not in the position to test it but believe me Tomorrow evening, after work, it is the first thing I gonna do, ha ha.
              Also thanks for the tips where to start. I have knowlegse of SQL and SQLplus, not of C++ but enough info can be found on the internet. First of all I start with the basics of Arduino. Good begin.
              I let you know about the test results tomorrow.
              Thans again.
              to be continued. Have a nice evening.
              BR.
              Dick

              1 Reply Last reply
              0
              • DickD Offline
                DickD Offline
                Dick
                wrote on last edited by
                #7

                At least I was able to test it. The solution worked perfect. Thanks for the support and I continue to finsh my project by implementing it at home. have a nice day. Bests
                Dick

                1 Reply Last reply
                1
                • BulldogLowellB BulldogLowell

                  @Dick

                  Sorry for the late response...

                  I created two instances of the DHT object, using pointers, so that's a little beyond a beginner (but also not hard to do). The [i] is the for-loop index, I put the two sensors into an array to simplify the code (but a little harder for new person to understand).

                  My advice is to go through the Arduino learning sections on their websites and search for C++ tutorials on the web, there are many good ones.

                  Try this and see if it 1) sets up the two temperature and two humidity devices on your controller and 2) does it transmit the temperatures?

                  #include <SPI.h>
                  #include <MySensor.h>
                  #include <DHT.h>
                  
                  #define NUM_SENSORS 2
                  
                  unsigned long SLEEP_TIME = 3000UL; // Sleep time between reads (in milliseconds)
                  
                  MySensor gw;
                  MyMessage tempMssg(0, V_TEMP);
                  MyMessage humMssg(NUM_SENSORS, V_HUM);
                  
                  byte tempID[NUM_SENSORS] = {0,1};
                  byte humID[NUM_SENSORS] = {2,3};
                  
                  
                  DHT* dht[NUM_SENSORS];
                  byte sensorPin[NUM_SENSORS] = {3, 4};
                  float lastTemp[NUM_SENSORS] = {0.0, 0.0};
                  float lastHum[NUM_SENSORS] = {0.0, 0.0};
                  
                  boolean metric = true;
                  
                  void setup()
                  {
                    Serial.begin(9600);
                    gw.begin();
                    for (int i = 0; i < NUM_SENSORS; i++)
                    {
                      dht[i] = new DHT;
                      dht[i]->setup(sensorPin[i]);
                    }
                  
                    gw.sendSketchInfo("Humidity", "1.0");
                    
                    for (int i = 0; i < NUM_SENSORS; i++)
                    {
                      gw.present(tempID[i], S_TEMP);
                      gw.present(humID[i], S_HUM);
                    }
                    
                    metric = gw.getConfig().isMetric;
                    Serial.println(F("Setup Complete."));
                  }
                  
                  void loop()
                  {
                    for (int i = 0; i < NUM_SENSORS; i++)
                    {
                      delay(dht[i]->getMinimumSamplingPeriod());
                      float temperature = dht[i]->getTemperature();
                      if (isnan(temperature))
                      {
                        Serial.print(F("Failed reading temperature from DHT"));
                        Serial.println(i);
                      }
                      else if (temperature != lastTemp[i])
                      {
                        lastTemp[i] = temperature;
                        if (!metric)
                        {
                          temperature = dht[i]->toFahrenheit(temperature);
                        }
                        gw.send(tempMssg.setSensor(i).set(temperature, false));  // no ack
                        Serial.print(F("T"));
                        Serial.print(i);
                        Serial.print(F("= "));
                        Serial.println(temperature);
                      }
                      float humidity = dht[i]->getHumidity();
                      if (isnan(humidity)) 
                      {
                        Serial.print("Failed reading humidity from DHT");
                        Serial.println(i);
                      } 
                      else if (humidity != lastHum[i]) 
                      {
                        lastHum[i] = humidity;
                        gw.send(humMssg.setSensor(i).set(humidity, false));  // no ack
                        Serial.print(F("H"));
                        Serial.print(i);
                        Serial.print(F("= "));
                        Serial.println(humidity);
                      }
                    }
                    gw.sleep(SLEEP_TIME); //sleep a bit
                  }
                  

                  I cannot test it but hopefully we can get it working for you.

                  turborickT Offline
                  turborickT Offline
                  turborick
                  wrote on last edited by
                  #8

                  @BulldogLowell Can this sketch be converted to 2.0.0 ?

                  BulldogLowellB 1 Reply Last reply
                  0
                  • turborickT turborick

                    @BulldogLowell Can this sketch be converted to 2.0.0 ?

                    BulldogLowellB Offline
                    BulldogLowellB Offline
                    BulldogLowell
                    Contest Winner
                    wrote on last edited by
                    #9

                    @turborick

                    Sorry, I've yet to upgrade to latest version of MySensors libraries.

                    1 Reply Last reply
                    0
                    • R Offline
                      R Offline
                      Rene046
                      wrote on last edited by
                      #10
                      This post is deleted!
                      1 Reply Last reply
                      0
                      • P Offline
                        P Offline
                        palmerfarmer
                        wrote on last edited by palmerfarmer
                        #11

                        Is there a way i could display the temp and hum for each sensor on an lcd screen?
                        I know how to do this for data that is not using pointers.
                        below is my sketch that flips between 2 sensors on the LCD

                        /* test modified from a v1 basic mutliple multi dht22 sketch
                        
                            Gives correct temp and humidity readings for each dht22 in domoticz (ie not crossed between 1 and 2)
                        
                            Not displaying properly on the LCD yet
                        
                            Domoticz ver 4.11558 beta
                            Gateway 3.2.1
                            node 3.2.1
                            09/12/2019
                        
                             Arduino Mega
                             1.8 inch TFT LCD Display 128x160 8/16Bit ST7735S
                             x2 DHT22
                             NRF24
                        */
                        
                        #define MY_DEBUG
                        #define MY_RADIO_NRF24    //Mega Pins 49 CE, 53 CSN/CS, 52 SCK, 51  MOSI, 50  MISO
                        #define MY_RF24_CE_PIN 49
                        #define MY_RF24_CS_PIN 53
                        #define MY_RF24_PA_LEVEL (RF24_PA_MIN)
                        #define MY_NODE_ID 103
                        
                        
                        #include <UTFT.h>          //LCD 1.8
                        #include <SPI.h>
                        #include <MySensors.h>
                        #include <DHT.h>
                        
                        #define RELAY1 44
                        #define RELAY2 45
                        
                        
                        //static const uint8_t FORCE_UPDATE_N_READS = 10;
                        extern uint8_t BigFont[];
                        extern uint8_t SmallFont[];
                        
                        #define NUM_SENSORS 2
                        
                        unsigned long SLEEP_TIME = 6000; // Sleep time between reads (in milliseconds)
                        
                        //MySensor gw;
                        MyMessage tempMssg(0, V_TEMP);
                        MyMessage humMssg(NUM_SENSORS, V_HUM);
                        
                        byte tempID[NUM_SENSORS] = {0, 1};
                        byte humID[NUM_SENSORS] = {2, 3};
                        
                        DHT* dht[NUM_SENSORS];
                        byte sensorPin[NUM_SENSORS] = {40, 42};
                        float lastTemp[NUM_SENSORS] = {0.0, 0.0};
                        float lastHum[NUM_SENSORS] = {0.0, 0.0};
                        
                        boolean metric = true;
                        
                        
                        //LCD setup
                        UTFT myGLCD(ITDB18SP, 11, 12, 8, 9, 10); // lcd pins 3,2,6,5,4
                        
                        
                        
                        void setup()
                        {
                        
                          myGLCD.InitLCD(LANDSCAPE);// or PORTRAIT
                          myGLCD.clrScr();
                          myGLCD.setColor(200, 255, 255);
                          myGLCD.setBackColor(0, 0, 0);
                          myGLCD.setFont(SmallFont);
                          myGLCD.print("Version & Sketch", LEFT, 3);
                          myGLCD.print("V.2 TEST5", LEFT, 16);
                          delay(1000);
                          myGLCD.clrScr();
                          myGLCD.setFont(SmallFont);
                          myGLCD.setColor(255, 255, 255);
                        
                          myGLCD.print("TH1 OUTSIDE", 2, 2);
                          myGLCD.print("o", 67, 12);
                          myGLCD.print("C", 74, 15);
                          myGLCD.print("%", 150, 15);
                        
                          myGLCD.print("TH2 INSIDE", 2, 36);
                          myGLCD.print("o", 67, 46);
                          myGLCD.print("C", 74, 49);
                          myGLCD.print("%", 150, 49);
                        
                        
                        
                          Serial.begin(9600);
                          // begin();
                          for (int i = 0; i < NUM_SENSORS; i++)
                          {
                            dht[i] = new DHT;
                            dht[i]->setup(sensorPin[i]);
                          }
                        
                          sendSketchInfo("DHT22 Humidity test5", "2.0");
                        
                          for (int i = 0; i < NUM_SENSORS; i++)
                          {
                            present(tempID[i], S_TEMP);
                            present(humID[i], S_HUM);
                          }
                          metric = getControllerConfig().isMetric;
                        
                          Serial.println(F("Setup Complete."));
                        }
                        
                        void loop()
                        {
                          for (int i = 0; i < NUM_SENSORS; i++)
                          {
                            delay(dht[i]->getMinimumSamplingPeriod());
                            float temperature = dht[i]->getTemperature();
                            if (isnan(temperature))
                            {
                              Serial.print(F("Failed reading temperature from DHT"));
                              Serial.println(i);
                            }
                            else if (temperature != lastTemp[i])
                            {
                              lastTemp[i] = temperature;
                              if (!metric)
                              {
                                temperature = dht[i]->toFahrenheit(temperature);
                              }
                              send(tempMssg.setSensor(i).set(temperature, false));  // no ack
                              Serial.print(F("T"));
                              Serial.print(i);
                              Serial.print(F("= "));
                              Serial.println(temperature);
                            }
                            myGLCD.setFont(BigFont);
                            myGLCD.setColor(100, 255, 255);
                            myGLCD.printNumF(temperature, 1, 1, 15);  // this where something needs to be changed to get it to display each temp separately
                        
                        
                        
                            float humidity = dht[i]->getHumidity();
                            if (isnan(humidity))
                            {
                              Serial.print("Failed reading humidity from DHT");
                              Serial.println(i);
                            }
                            else if (humidity != lastHum[i])
                            {
                              lastHum[i] = humidity;
                              send(humMssg.setSensor(i).set(humidity, false));  // no ack
                              Serial.print(F("H"));
                              Serial.print(i);
                              Serial.print(F("= "));
                              Serial.println(humidity); // this where something needs to be changed to get it to display each hum separately
                        
                              myGLCD.setFont(BigFont);
                              myGLCD.setColor(100, 255, 255);
                              myGLCD.printNumF(humidity, 1, 85, 15);
                        
                            }
                          }
                          sleep(SLEEP_TIME); //sleep a bit
                        }```
                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        12

                        Online

                        11.7k

                        Users

                        11.2k

                        Topics

                        113.1k

                        Posts


                        Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • MySensors
                        • OpenHardware.io
                        • Categories
                        • Recent
                        • Tags
                        • Popular