DHT ESP Temperature/Humidity Sensors¶
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
- 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
Features¶
- 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
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 (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 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 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
Installation¶
In Arduino IDE open Sketch->Include Library->Manage Libraries then search for *DHT ESP:raw-html-m2r:`<br>`
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/``*:raw-html-m2r:`<br>`
In PlatformIO this is usually **<user/.platformio/lib>
**_
References¶
- Source Code (submodule, may be patched).
Used by¶
- DHT22 Humidity Sensor Sample
- MeteoControl Sample