DHT11 Sensor Interfacing with NodeMCU

Overview of DHT11

DHT11 temperature and Humidity sensor
DHT11 Temperature and Humidity sensor

 

DHT11 sensor measures and provides humidity and temperature values serially over a single wire.

It can measure the relative humidity in percentage (20 to 90% RH) and temperature in degree Celsius in the range of 0 to 50°C.

It has 4 pins; one of which is used for data communication in serial form.

Pulses of different TON and TOFF are decoded as logic 1 or logic 0 or start pulse or end of the frame.

For more information about the DHT11 sensor and how to use it, refer to the topic DHT11 sensor in the sensors and modules topic.

 

Connection Diagram DHT11 with NodeMCU

NodeMCU interface with DHT11
NodeMCU interfaced with DHT11

 

 

Read temperature and humidity using DHT11 and NodeMCU

Let’s interface DHT11 with NodeMCU and read the value of Temperature and Humidity from DHT11.

We can write codes for NodeMCU DevKit in either Lua Script or C/C++ language. We are using ESPlorer IDE for writing code in Lua scripts and Arduino IDE for writing code in C/C++. To know more refer to Getting started with NodeMCU using ESPlorer IDE (which uses Lua scripting for NodeMCU) and Getting started with NodeMCU using Arduino IDE (which uses C language-based Arduino sketches for NodeMCU).

 

NodeMCU LUA based functions for DHT module

Let’s see the LUA based functions of NodeMCU that can be used for DHT modules to read the Temperature and Humidity.

 

dht.read()

This function is used to read data from all kinds of DHT sensors, including DHT11, 21, 22, 33, 44 humidity temperature sensors.

Syntax: 

dht.read(pin)

Parameters:

pin: pin number from which output of the DHT sensor is to be read. 0 pin number (D0) is not supported.

Returns:

status: it returns one status out of dht.OK, dht.ERROR_CHECKSUM, dht.ERROR_TIMEOUT.

temp: temperature

humi: humidity

temp_dec: temperature decimal

humi_dec: humidity decimal

 

Note: the data type of return variables depends on firmware supported data types. i.e. if firmware supports floating then it will return float values otherwise it will return an integer.

Also, we can use dht11.read() the function to read output from only dht11 or dht.readxx() function to read output from DHT modules other than dht11 i.e. xx will be 22, 33, etc. These functions have the same syntax, parameters, and return values.

Let’s write Lua script to read temperature and humidity from dht11

 

Lua Script for DHT11

pin = 1

status, temp, humi, temp_dec, humi_dec = dht.read(pin)--read dht11 from pin

if status == dht.OK then    --check status is ok and print temperature and humidity
print(string.format("DHT Temperature:%d.%03d;Humidity:%d.%03d",
math.floor(temp),
temp_dec,
math.floor(humi),
humi_dec
    ))
elseif status == dht.ERROR_CHECKSUM then    --else print either status
print( "DHT Checksum error." )
elseif status == dht.ERROR_TIMEOUT then
print( "DHT timed out." )
end

 

ESPlorer Serial Output Window

ESPlorer Serial monitor output window for DHT11 temperature & humidity measure

ESPlorer serial monitor window for DHt11

 

Arduino Sketch for DHT11

Here, we will be using the DHT11 library by Mark Ruys from GitHub.

Download this library from here.

Extract the library and add the folder to the libraries folder path of Arduino IDE.

For information about how to add a custom library to the Arduino IDE and use examples from it, referring Library to Arduino IDE in the Basics section.

Once the library has been added to the Arduino IDE, open the IDE and open the example sketch named DHT_Test from the library added.

Change the DHT11 pin in the sketch. You can refer to the sketch given below for the change to be made.

 

DHT11 Code for NodeMCU using Arduino IDE

#include "DHT.h"

DHT dht;

void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
  dht.setup(D1); 	/* D1 is used for data communication */
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod()); /* Delay of amount equal to sampling period */
  float humidity = dht.getHumidity();/* Get humidity value */
  float temperature = dht.getTemperature();/* Get temperature value */
  Serial.print(dht.getStatusString());/* Print status of communication */
  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("\t\t");
  Serial.println(dht.toFahrenheit(temperature), 1);/* Convert temperature to Fahrenheit units */
}

 

Arduino Serial Output Window

Arduino Serial monitor output window DHT11 temperature & humidity measure

Arduino Serial monitor window fro DHT11

Components Used

DHT11
DHT11 is a single wire digital humidity and temperature sensor, which gives relative humidity in percentage and temperature in degree Celsius.
1
NodeMCU
NodeMCUNodeMCU
1
ESP12F
ESP12E
1

Downloads

DHT11 Datasheet Download
NodeMCU DHT11 source code files Download
Ad