An Arduino library for reading the DHT family of temperature and humidity sensors.
Forked from arduino-DHT
Original written by Mark Ruys, [email protected].
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.
- 2017-12-12: Renamed DHT class to DHTesp and filenames from dht.* to DHTesp.* to avoid conflicts with other libraries - beegee-tokyo, [email protected].
- 2017-12-12: Updated to work with ESP32 - beegee-tokyo, [email protected].
- 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, [email protected].
- 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
- 2019-03-07: Added computeAbsoluteHumidity which returns the absolute humidity in g/m³. Reference: How to convert relative humidity to absolute humidity kudos to Wurstnase
- 2019-03-22: Fixed auto detection problem
- 2019-07-31: Make getPin() public, Updated ESP8266 example
- 2019-10-01: Using noInterrupts() & interrupts() instead of cli and sei
- 2019-10-05: Reduce CPU usage and add decimal part for DHT11 (thanks to Swiftyhu)
- 2019-10-06: Back to working version by removing the last commit
- Support for DHT11 and DHT22, AM2302, RHT03
- Auto detect sensor model
- Determine heat index
- Determine dewpoint
- Determine thermal comfort:
- Empiric comfort function based on comfort profiles(parametric lines)
- Multiple comfort profiles possible. Default based on http://epb.apogee.net/res/refcomf.asp (References invalid)
- Determine if it's too cold, hot, humid, dry, based on current comfort profile
- More info at Determining Thermal Comfort Using a Humidity and Temperature Sensor
- Determine human perception based on humidity, temperature and dew point according to Horstmeyer, Steve (2006-08-15). Relative Humidity....Relative to What? The Dew Point Temperature...a better approach
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 (default if 2nd parameter is not used)
- DHT11
- DHT22
- AM2302 Packaged DHT22
- RHT03 Equivalent to DHT22
void resetTimer();
- Reset last time the sensor was read
float getTemperature();
- Get the temperature in degree Centigrade from the sensor
Either one ofgetTemperature()
orgetHumidity()
orgetTempAndHumidity()
initiates reading a value from the sensor if the last reading was older than the minimal refresh time of the sensor.
See exampleDHT_ESP32.ino
orDHT_Test.ino
float getHumidity();
- Get the humidity from the sensor
Either one ofgetTemperature()
orgetHumidity()
orgetTempAndHumidity()
initiates reading a value from the sensor if the last reading was older than the minimal refresh time of the sensor.
See exampleDHT_ESP32.ino
orDHT_Test.ino
TempAndHumidity getTempAndHumidity();
- Get the temperature and humidity from the sensor
Either one ofgetTemperature()
orgetHumidity()
orgetTempAndHumidity()
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 typeTempAndHumidity
with temperature and humidity as float values. See exampleDHT_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 computeAbsoluteHumidity(float temperature, float percentHumidity, bool isFahrenheit=false);
- Compute the absolute humidity in g/m³. 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
uint8_t getPin(void);
- Returns the assigned GPIO for this instance. Usefull when connecting multiple sensors
See examples. For all the options, see dhtesp.h.
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>