Arduino - Temperature Humidity Sensor

In this tutorial, we are going to learn how to read temperature and humidity value from DHT11 or DHT22 sensors

DHT11 and DHT22 are sensors that we can use to measure temperature and humidity. They are similar to each other. You can choose one of them, depending on your needs

If you only want to get temperature, we recommend using a waterproof DS18B20 temperature sensor instead. It is an inexpensive and neat sensor. You can put it in hot or cold water.

Hardware Required

1×Arduino UNO or Genuino UNO
1×USB 2.0 cable type A/B
1×Temperature and Humidity Sensor DHT11
1×Temperature and Humidity Sensor DHT22
1×10 kΩ resistor
1×Breadboard
n×Jumper Wires
Please note: These are affiliate links. If you buy the components through these links, We may get a commission at no extra cost to you. We appreciate it.

About DHT11 and DHT22 Temperature and Humidity Sensor

The commons between DHT11 and DHT22

  • Pinouts are the same
  • Wiring to Arduino is the same
  • Programming (with a library) is similar (only one line of code is different)

The differences between DHT11 and DHT22

DHT11 DHT22
Price ultra low cost low cost
Temperature Range 0°C to 50°C -40°C to 80°C
Temperature Accuracy ± 2°C ± 0.5°C
Humidity Range 20% to 80% 0% to 100%
Humidity Accuracy 5% ± 2 to 5%
Reading Rate 1Hz (once every second) 0.5Hz (once every 2 seconds)
Body size 15.5mm x 12mm x 5.5mm 15.1mm x 25mm x 7.7mm

As you can see, the DHT22 is a little more accurate, larger range but more expensive than DHT11.

Pinout

DHT11 and DHT22 sensor in original form have four pins:

  • GND pin needs to be connected to GND (0V)
  • VCC pin needs to be connected to VCC (5V)
  • DATA pin the pin is used to communicate between the sensor and Arduino
  • NC pin Not connected, we can ignore this pin
  • DHT11 and DHT22 temperature and humidity sensor Pinout

Some manufacturers provide DHT11 and DHT22 sensor in module form with three pins: GND, VCC and DATA pins.

Note that in module form, the order of the module's pins can vary between manufacturers. ALWAYS use the labels printed on the module. Look closely!

DHT11 and DHT22 temperature and humidity module Pinout

Wiring Diagram

Wiring to Arduino is the same for both sensors. In orginal form, A resistor from 5K to 10K Ohms is required to keep the data line high and in order to enable the communication between the sensor and the Arduino

Arduino - DHT11 Sensor Wiring

Arduino DHT11 Temperature and humidity Sensor Wiring Diagram

Image is developed using Fritzing. Click to enlarge image

Arduino - DHT22 Sensor Wiring

Arduino DHT22 Temperature and humidity Sensor Wiring Diagram

Image is developed using Fritzing. Click to enlarge image

Arduino - DHT11 Module Wiring

Most of DHT22 sensor modules have a built-in resistor, so you don't need to add it. it saves us some wiring or soldering works.

Arduino DHT11 Temperature and humidity Module Wiring Diagram

Image is developed using Fritzing. Click to enlarge image

Arduino - DHT22 Module Wiring

Most of DHT22 sensor modules have a built-in resistor, so you don't need to add it. it saves us some wiring or soldering works.

Arduino DHT22 Temperature and humidity Module Wiring Diagram

Image is developed using Fritzing. Click to enlarge image

How To Program For DHTxx Temperature Sensor

Programming for both sensors is similar. There is only one line of code different.

  • Include the library:
#include "DHT.h"
  • Define the Arduino pin connected to DHT sensor:
#define DHTPIN 2
  • Define the sensor type: DHT11 or DHT22 (This is the different line of code)
#define DHTTYPE DHT11

or

#define DHTTYPE DHT22

  • Declare DHT object
DHT dht(DHTPIN, DHTTYPE);
  • Initialize the sensor:
dht.begin();
  • Read humidity:
float humi = dht.readHumidity();
  • Read temperature in Celsius:
float tempC = dht.readTemperature();
  • Read temperature in Fahrenheit:
float tempF = dht.readTemperature(true);

Arduino Code - DHT11

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-temperature-humidity-sensor */ #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); // initialize the sensor } void loop() { // wait a few seconds between measurements. delay(2000); // read humidity float humi = dht.readHumidity(); // read temperature as Celsius float tempC = dht.readTemperature(); // read temperature as Fahrenheit float tempF = dht.readTemperature(true); // check if any reads failed if (isnan(humi) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT sensor!"); } else { Serial.print("Humidity: "); Serial.print(humi); Serial.print("%"); Serial.print(" | "); Serial.print("Temperature: "); Serial.print(tempC); Serial.print("°C ~ "); Serial.print(tempF); Serial.println("°F"); } }

Arduino Code - DHT22

/* * Created by ArduinoGetStarted.com * * This example code is in the public domain * * Tutorial page: https://arduinogetstarted.com/tutorials/arduino-temperature-humidity-sensor */ #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); // initialize the sensor } void loop() { // wait a few seconds between measurements. delay(2000); // read humidity float humi = dht.readHumidity(); // read temperature as Celsius float tempC = dht.readTemperature(); // read temperature as Fahrenheit float tempF = dht.readTemperature(true); // check if any reads failed if (isnan(humi) || isnan(tempC) || isnan(tempF)) { Serial.println("Failed to read from DHT sensor!"); } else { Serial.print("Humidity: "); Serial.print(humi); Serial.print("%"); Serial.print(" | "); Serial.print("Temperature: "); Serial.print(tempC); Serial.print("°C ~ "); Serial.print(tempF); Serial.println("°F"); } }

If you compare two above code, you realize that there is one line different (line 11)

Quick Steps

  • Connect Arduino to PC via USB cable
  • Open Arduino IDE, select the right board and port
  • On Arduino IDE, Go to Tools Manage Libraries
  • Arduino add library
  • Search “DHT”, then find the DHT sensor library by Adafruit
  • Click Install button to install the library.
  • Arduino DHT sensor library
  • You will be ased for intall some other library dependancies
  • Click Install All button all library dependancies.
  • Arduino Adafruit Unified sensor library
  • Copy the above code corresponding to the sensor you have and open with Arduino IDE
  • Click Upload button on Arduino IDE to upload code to Arduino
  • Make enviroment around sensor hotter or colder
  • See the result on Serial Monitor.
  • COM6
    Send
    Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 27.00°C ~ 80.60°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 32.00% | Temperature: 28.00°C ~ 82.40°F Humidity: 31.00% | Temperature: 29.00°C ~ 84.20°F Humidity: 32.00% | Temperature: 29.00°C ~ 84.20°F Humidity: 31.00% | Temperature: 29.00°C ~ 84.20°F
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Video Tutorial

We are considering to make the video tutorials. If you think the video tutorials are essential, please subscribe to our YouTube channel to give us motivation for making the videos.

We are considering to make the tutorial videos. If you think the tutorial videos are essential, please subscribe to our Youtube channel. It will give us lots of motivation for making the videos.

Alternative DHT11 and DHT22 sensors

The Best Arduino Starter Kit

※ OUR MESSAGES