DHT22 sometimes read, sometimes not

Hi,

I have a very simple program, with just a DHT22 conected to 5V and a 10K resistor at the data pin...

Look at my program and the serial print:

#include <DHT.h>

DHT dht(2, DHT22);

void setup() {
  Serial.begin(9600);
  
  dht.begin();
}

void loop() {
  delay(3000);
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
   
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println(F("Failed to read from DHT"));
  }
  else {
    Serial.print(F("Humidity: ")); 
    Serial.print(h);
    Serial.print(F(" %\t"));
    Serial.print(F("Temperature: ")); 
    Serial.print(t);
    Serial.println(F(" C"));
  }

}

The serial print:

Failed to read from DHT
Humidity: 57.90 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT
Failed to read from DHT
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT
Humidity: 58.00 % Temperature: 22.40 C
Failed to read from DHT

Can somebody tell me whats is going on ?

Thanks

Luiz

I have turned DEBUG ON... and this is the print...

Received:
2, 49, 0, E0, 2B =? 12B
Humidity: 58.50 % Temperature: 22.40 C
Received:
2, 4C, 0, E0, 2E =? 12E
Humidity: 58.80 % Temperature: 22.40 C
Received:
2, 4E, 0, E0, 30 =? 130
Humidity: 59.00 % Temperature: 22.40 C
Received:
2, 4D, 0, 60, 2F =? AF
Checksum failure!
Failed to read from DHT
Received:
2, 4C, 0, E0, 2E =? 12E
Humidity: 58.80 % Temperature: 22.40 C
Received:
2, 4B, 0, E0, 2D =? 12D
Humidity: 58.70 % Temperature: 22.40 C
Received:
2, 4B, 0, 60, 2D =? AD
Checksum failure!
Failed to read from DHT
Received:
2, 4A, 0, E0, 2C =? 12C
Humidity: 58.60 % Temperature: 22.40 C
Received:
2, 4A, 0, E0, 2C =? 12C
Humidity: 58.60 % Temperature: 22.40 C
Received:
2, 4A, 0, 60, 2C =? AC
Checksum failure!
Failed to read from DHT
Received:
2, 49, 0, E0, 2B =? 12B
Humidity: 58.50 % Temperature: 22.40 C
Received:
2, 4A, 0, E0, 2C =? 12C
Humidity: 58.60 % Temperature: 22.40 C
Received:
2, 4B, 0, 60, 2D =? AD
Checksum failure!
Failed to read from DHT
Received:
2, 4C, 0, 60, 2E =? AE
Checksum failure!

do you have a pull up resistor on the data line?
what length is the line?

Yes, i have a 10k resistor for pull-up in data pin..

The line is really smal. i have a DHT22 directly to the protoboard, conected with jumpers of 10cm directly to the arduino UNO board...

bad connections can do this

Hi,

I think that the problem is solved...

I was using this LIB: GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensors

Then i founded this thread: Class for DHT11, DHT21 and DHT22 (temperature & humidity) - Libraries - Arduino Forum

So I tried this LIB: Arduino/libraries/DHTstable at master · RobTillaart/Arduino · GitHub

And it works perfectly...

Thanks 'robtillaart' for your work...

Luiz

You're welcome

Still important to check your wires as knut_ny said :wink:

lczancanella:
Hi,

I think that the problem is solved...

I was using this LIB: GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensors

Then i founded this thread: Class for DHT11, DHT21 and DHT22 (temperature & humidity) - Libraries - Arduino Forum

So I tried this LIB: Arduino/libraries/DHTstable at master · RobTillaart/Arduino · GitHub

And it works perfectly...

Thanks 'robtillaart' for your work...

Luiz

Hi there... its an old post but Im having the same problem, did you change anything to the code when loading the new library, or used the same code?

Thanks,