Optimized DHT library for ESP32/ESP8266 using Arduino framework
Switch branches/tags
Nothing to show
Clone or download

README.md

DHTesp

An Arduino library for reading the DHT family of temperature and humidity sensors.
Forked from arduino-DHT
Original written by Mark Ruys, mark@paracas.nl.

Why did I clone this library instead of forking the original repo and push the changes? When I searched through Github for DHT libraries, I found a lot of them, some of them offers additional functions, some of them only basic temperature and humidity values. I wanted to combine all interesting functions into one library. In addition, none of the DHT libraries I found were written to work without errors on the ESP32. For ESP32 (a multi core/ multi processing SOC) task switching must be disabled while reading data from the sensor.
Another problem I found is that many of the available libraries use the same naming (dht.h, dht.cpp), which easily leads to conflicts if different libraries are used for different platforms.

According to users, the library works as well with DHT33 and DHT44 sensors. But as I do not own these sensors, I cannot test and confirm it. However, if you want to use this sensors, you can do so by using setup(pin, DHTesp::DHT22) and it should work. Please give me feedback in the issues if you successfull use these sensors. Thank you

The library is tested as well on ESP8266 and should work on AVR boards as well.

Changes to the original library:

  • 2017-12-12: Renamed DHT class to DHTesp and filenames from dht.* to DHTesp.* to avoid conflicts with other libraries - beegee-tokyo, beegee@giesecke.tk.
  • 2017-12-12: Updated to work with ESP32 - beegee-tokyo, beegee@giesecke.tk.
  • 2017-12-12: Added function computeHeatIndex. Reference: Adafruit DHT library.
  • 2017-12-14: Added function computeDewPoint. Reference: idDHTLib.
  • 2017-12-14: Added function getComfortRatio. Reference: libDHT. (References about Human Comfort invalid)
  • 2017-12-15: Added function computePerception. Reference: WikiPedia Dew point==> Relationship to human comfort - beegee-tokyo, beegee@giesecke.tk.
  • 2018-01-02: Added example for multiple sensors usage.
  • 2018-01-03: Added function getTempAndHumidity which returns temperature and humidity in one call.
  • 2018-01-03: Added retry in case the reading from the sensor fails with a timeout.
  • 2018-01-08: Added ESP8266 (and probably AVR) compatibility.
  • 2018-03-11: Updated DHT example
  • 2018-06-19: Updated DHT example to distinguish between ESP8266 examples and ESP32 examples
  • 2018-07-06: Fixed bug in ESP32 example
  • 2018-07-17: Use correct field separator in keywords.txt
    Features

Functions

void setup(uint8_t pin, DHT_MODEL_t model=AUTO_DETECT);

  • Call to initialize the interface, define the GPIO pin to which the sensor is connected and define the sensor type. Valid sensor types are:
    • AUTO_DETECT Try to detect which sensor is connected
    • DHT11
    • DHT22
    • AM2302 Packaged DHT22
    • RHT03 Equivalent to DHT22
  • WARNING: Autodetect does not work reliable. use e.g setup(pin, DHTesp::DHT11) or e.g. setup(pin, DHTesp::RHT03) instead void resetTimer();
  • Reset last time the sensor was read

float getTemperature();

  • Get the temperature in degree Centigrade from the sensor
    Either one of getTemperature() or getHumidity() or getTempAndHumidity() initiates reading a value from the sensor if the last reading was older than the minimal refresh time of the sensor.
    See example DHT_ESP32.ino or DHT_Test.ino

float getHumidity();

  • Get the humidity from the sensor
    Either one of getTemperature() or getHumidity() or getTempAndHumidity() initiates reading a value from the sensor if the last reading was older than the minimal refresh time of the sensor.
    See example DHT_ESP32.ino or DHT_Test.ino

TempAndHumidity getTempAndHumidity();

  • Get the temperature and humidity from the sensor
    Either one of getTemperature() or getHumidity() or getTempAndHumidity() initiates reading a value from the sensor if the last reading was older than the minimal refresh time of the sensor.
    Return value is a struct of type TempAndHumidity with temperature and humidity as float values. See example DHT_Multi.ino

DHT_ERROR_t getStatus();

  • Get last error if reading from the sensor failed. Possible values are:
    • ERROR_NONE no error occured
    • ERROR_TIMEOUT timeout reading from the sensor
    • ERROR_CHECKSUM checksum of received values doesn't match

const char* getStatusString();

  • Get last error as a char *

DHT_MODEL_t getModel()

  • Get detected (or defined) sensor type

int getMinimumSamplingPeriod();

  • Get minimmum possible sampling period. For DHT11 this is 1000ms, for other sensors it is 2000ms

int8_t getNumberOfDecimalsTemperature();

  • Get number of decimals in the temperature value. For DHT11 this is 0, for other sensors it is 1

int8_t getLowerBoundTemperature();

  • Get lower temperature range of the sensor. For DHT11 this is 0 degree Centigrade, for other sensors this is -40 degree Centrigrade

int8_t getUpperBoundTemperature();

  • Get upper temperature range of the sensor. For DHT11 this is 50 degree Centigrade, for other sensors this is 125 degree Centrigrade

int8_t getNumberOfDecimalsHumidity();

  • Get number of decimals in the humidity value. This is always 0.

int8_t getLowerBoundHumidity();

  • Get lower humidity range of the sensor. For DHT11 this is 20 percent, for other sensors this is 0 percent

int8_t getUpperBoundHumidity();

  • Get upper temperature range of the sensor. For DHT11 this is 90 percent, for other sensors this is 100 percent

static float toFahrenheit(float fromCelcius);

  • Convert Centrigrade value to Fahrenheit value

static float toCelsius(float fromFahrenheit) { return (fromFahrenheit - 32.0) / 1.8; };

  • Convert Fahrenheit value to Centigrade value

float computeHeatIndex(float temperature, float percentHumidity, bool isFahrenheit=false);

  • Compute the heat index. Default temperature is in Centrigrade.

float computeDewPoint(float temperature, float percentHumidity, bool isFahrenheit=false);

  • Compute the dew point. Default temperature is in Centrigrade.

float getComfortRatio(ComfortState& destComfStatus, float temperature, float percentHumidity, bool isFahrenheit=false);

  • Compute the comfort ratio. Default temperature is in Centrigrade. Return values:
    0 -> OK
    1 -> Too Hot
    2 -> Too cold
    4 -> Too dry
    8 -> Too humid
    9 -> Hot and humid
    5 -> Hot and dry
    10 -> Cold and humid
    6 -> Cold and dry

byte computePerception(float temperature, float percentHumidity, bool isFahrenheit=false);

  • Compute the human perception. Default temperature is in Centrigrade. Return values:
    0 -> Dry
    1 -> Very comfortable
    2 -> Comfortable
    3 -> Ok
    4 -> Uncomfortable
    5 -> Quite uncomfortable
    6 -> Very uncomfortable
    7 -> Severe uncomfortable

Usage

See examples. For all the options, see dhtesp.h.

Installation

In Arduino IDE open Sketch->Include Library->Manage Libraries then search for DHT ESP
In PlatformIO open PlatformIO Home, switch to libraries and search for DHT ESP32. Or install the library in the terminal with platformio lib install 2029

For manual installation download the archive, unzip it and place the DHTesp folder into the library directory.
In Arduino IDE this is usually <arduinosketchfolder>/libraries/
In PlatformIO this is usually <user/.platformio/lib>