How to use DHT11 sensor

DHT11 is a four(4) pin sensor for measuring temperature and humidity. This sensor is cheap, small, and reliable for temperature and humidity projects. The DHT 11 works well with all microcontrollers for Arduino to ESPs. This post will review how to use this sensor in projects.

How to add the DHT 11 library in Arduino IDE

Navigate to sketch in your Arduino IDE scroll to include library>manage Libraries (ctrl + shift + I)

DHT11 Library

Search for DHT 11 and install the library by Dhruba Saha

DHT 11 pinouts

DHT11

Setting up the DHT 11

The DHT 11 has two variants, the DHT 11 module and the DHT 11 chip. The physical difference between them is that the chip has four pins and the module has three. The DHT 11 module features an onboard 10k ohms resistor that connects the data pin(2) and Vcc so you don’t have to add an external resistor. But if you are to use the chip you will have to attach an external resistor either a 10k ohms or 5kohms will do.

Interfacing DHT 11 with microcontrollers

We will use an Arduino Uno R3 and an ESP8266 in this example. First, we will make a system that displays the humidity and temperature readings in the serial monitor. After that, we will make the system display the reading on an LCD.

Circuit Diagram

#include <DHT11.h>

DHT11 dht(2);

int hum;
int temp;

void setup() {
  //comment out the board you are not using
  
  Serial.begin(9600);//for Arduino Uno
  Serial.begin(115200);//for ESP8266
  
}

void loop() {
  
  hum = dht.readHumidity();
  temp = dht.readTemperature();
  Serial.print(hum);
  Serial.println("%");
  Serial.print(temp);
  Serial.println("°C");
  delay(2000);

}

The system updates every 2 seconds. Depending on the board you use, you will add a comment to the other line.

Circuit diagram with an I2C LCD

#include <DHT11.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

DHT11 dht(2);
LiquidCrystal_I2C lcd(0x27, 16, 2);

int hum;
int temp;

void setup() {
  //comment out the board you are not using
  
  Serial.begin(9600);//for Arduino Uno
  Serial.begin(115200);//for ESP8266
  lcd.begin(16, 2);
  lcd.init();
  lcd.backlight();
  //Wire.setClock(5000);Remove the comment for ESP8266
  
}

void loop() {
  
  hum = dht.readHumidity();
  temp = dht.readTemperature();
  Serial.print(hum);
  Serial.println("%");
  Serial.print(temp);
  Serial.println("°C");
  lcd.setCursor(0, 0);
  lcd.print("Hum:");
  lcd.setCursor(5, 0);
  lcd.print(hum);
  lcd.setCursor(8,0);
  lcd.print("%");
  lcd.setCursor(0, 1);
  lcd.print("Temp:");
  lcd.setCursor(6,1);
  lcd.print(temp);
  lcd.setCursor(9,1);
  delay(2000);

}

Leave a Comment