DHT11 Temperature and Humidity Sensor not outputting values

Hi, I am new to Arduino. I am trying to read the temperature and humidity values of the DHT11 sensor through the serial monitor. However, instead of outputting a value the sensor is outputting "nan" (not a number). I have double checked the pinout, checked continuity between the Nano and the sensor pins, and have adding a 5k pull-up resistor between the data pin and five volts according to the data sheet. Additionally, I have checked my code and have also ran it through Chat GPT. Still the same result. When troubleshooting I used a power supply to power to sensor and noticed there was very little current draw from the sensor (0-6mA). Could my sensor be faulty? Does anyone have any suggestions? Thank you.

Below is my code and what the serial monitor is outputting:

# include <DHT.h> // using the Adafruit library

# define Type DHT11
int sensePin = A7;
DHT HT(sensePin, DHT11);
float humidity;
float tempC;
float tempF;
int setTime = 500;
int dt = 1000;

void setup() {
Serial.begin(9600);
HT.begin();
delay(setTime);
}

void loop() {
humidity = HT.readHumidity();
tempC = HT.readTemperature();
tempF = HT.readTemperature(true);

Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" Temperature C: ");
Serial.print(tempC);
Serial.print(" C ");
Serial.print(" Temperature F: ");
Serial.print(tempF);
Serial.println(" F ");
delay(dt);

}

Serial Monitor output:

11:00:19.858 -> Raw Humidity: nan

11:00:19.890 -> Raw Temperature C: nan

11:00:19.890 -> Raw Temperature F: nan

11:00:19.922 -> Failed to read from DHT sensor!

Welcome to the forum

int sensePin = A7;

Which Arduino board are you using ?
Are you sure that pin A7 is a digital pin ?

Thanks for the response. Im using the Arduino nano every. I have tried both analog and digital pins.

Have you tried the library sample code that we know works? They use a digital pin. They use 8 bit humidity and 16 bit temperature integers, NOT float.
Make sure the sample works first.

Thank you. I just tried the example code and the serial monitor read "failed to read from DHT sensor "

here is the code if it helps:

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 12     // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment whatever type you're using!
#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 3 (on the right) of the sensor to GROUND (if your sensor has 3 pins)
// Connect pin 4 (on the right) of the sensor to GROUND and leave the pin 3 EMPTY (if your sensor has 4 pins)
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

I also changed all the floats to int in my code and now the serial monitor is reading all zeros.

"11:45:03.199 -> Humidity: 0 Temperature C: 0 C Temperature F: 0 F "

How does the sample sketch do?

Thank you. I just tried the example code and the serial monitor read "failed to read from DHT sensor "

here is the code if it helps:

# include <DHT.h> // using the Adafruit library

# define Type DHT11
int sensePin = A7;
DHT HT(sensePin, DHT11);
float humidity;
float tempC;
float tempF;
int setTime = 500;
int dt = 1000;

void setup() {
Serial.begin(9600);
HT.begin();
delay(setTime);
}

void loop() {
humidity = HT.readHumidity();
tempC = HT.readTemperature();
tempF = HT.readTemperature(true);

Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" Temperature C: ");
Serial.print(tempC);
Serial.print(" C ");
Serial.print(" Temperature F: ");
Serial.print(tempF);
Serial.println(" F ");
delay(dt);

}

That is the code you originally posted. Try the DHTStable library and sample dht11_test.

Try This:

#include <DHT.h>

#define DHTTYPE DHT11
int DHTPIN = 2;
DHT dht(DHTPIN, DHTTYPE);

float humidity;
float tempC;
float tempF;
int setTime = 500;

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

void loop() {
    humidity = dht.readHumidity();
    tempC = dht.readTemperature();
    tempF = dht.readTemperature(true);

    Serial.print("Humidity: ");
    Serial.print(humidity);
    Serial.print(" Temperature C: ");
    Serial.print(tempC);
    Serial.print(" C ");
    Serial.print(" Temperature F: ");
    Serial.print(tempF);
    Serial.println(" F ");
    delay(1000);
}

Also check your wiring, A7 is an analog pin not a digital pin, all DHT models are digital not analog. It can be as easy as not having the right pin connected.

Here's a model of the proper wiring:

You have both DHT11 and DHT22 declared as DHTTYPE.

Thanks for the reply. I tried your code and I still got the same "nan" reading from the serial monitor. (I am using digital pin 12 on the Arduino Nano every).

I downloaded the correct library and used the dht11_test. It gave me a timeout error.

"DHT11, Time out error, -999.0, -999.0"

Am I missing something in the code? Thanks.

//
//    FILE: dht11_test.ino
//  AUTHOR: Rob Tillaart
// PURPOSE: DHT library test sketch for DHT11 && Arduino
//     URL: https://github.com/RobTillaart/DHTstable



#include "DHTStable.h"

DHTStable DHT;

#define DHT11_PIN       12


void setup()
{
  Serial.begin(115200);
  Serial.println(__FILE__);
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHTSTABLE_LIB_VERSION);
  Serial.println();
  Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)");
}


void loop()
{
  // READ DATA
  Serial.print("DHT11, \t");
  int chk = DHT.read11(DHT11_PIN);
  switch (chk)
  {
    case DHTLIB_OK:  
      Serial.print("OK,\t"); 
      break;
    case DHTLIB_ERROR_CHECKSUM: 
      Serial.print("Checksum error,\t"); 
      break;
    case DHTLIB_ERROR_TIMEOUT: 
      Serial.print("Time out error,\t"); 
      break;
    default: 
      Serial.print("Unknown error,\t"); 
      break;
  }
  // DISPLAY DATA
  Serial.print(DHT.getHumidity(), 1);
  Serial.print(",\t");
  Serial.println(DHT.getTemperature(), 1);

  delay(2000);
}


// -- END OF FILE --

Serial Monitor

No, the code is the sample code. It is either working but you are not understanding the output, or the sensor is bad (very common and why many of us don't use that sensor anymore)

Thanks for the input. What sensor would be a better option

I forget, but will get the info, give me a few minutes, at 82 and ASD I don;t move so fast anymore.

The BMP180 Temperature Pressure sensor and the AHT10 Temperature/Humidity sensor.
They are both I2C so can be read from the same I2C connections if you want Temp/Humid/Pressure, otherwise just the AHT10 is needed. IIRC, the pins are mirrored so just plug them in back to back in a breadboard. If you need code examples it will take me a bit more time.

  • Make sure your module includes a pull-up resistor.

Thanks for all of the help.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.