Sming Framework API
Sming - Open Source framework for high efficiency WiFi SoC ESP8266 native development with C++ language.
DHTesp.h
1 /******************************************************************
2  DHT Temperature & Humidity Sensor library for Arduino & ESP32.
3 
4  Features:
5  - Support for DHT11 and DHT22/AM2302/RHT03
6  - Auto detect sensor model
7  - Very low memory footprint
8  - Very small code
9 
10  https://github.com/beegee-tokyo/arduino-DHTesp
11 
12  Written by Mark Ruys, mark@paracas.nl.
13  Updated to work with ESP32 by Bernd Giesecke, bernd@giesecke.tk
14 
15  GNU General Public License, check LICENSE for more information.
16  All text above must be included in any redistribution.
17 
18  Datasheets:
19  - http://www.micro4you.com/files/sensor/DHT11.pdf
20  - http://www.adafruit.com/datasheets/DHT22.pdf
21  - http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf
22  - http://meteobox.tk/files/AM2302.pdf
23 
24  Changelog:
25  2013-06-10: Initial version
26  2013-06-12: Refactored code
27  2013-07-01: Add a resetTimer method
28  2017-12-12: Added task switch disable
29  Added computeHeatIndex function from Adafruit DNT library
30  2017-12-14: Added computeDewPoint function from idDHTLib Library
31  Added getComfortRatio function from libDHT Library
32  2017-12-15: Added computePerception function
33  2018-01-02: Added example for multiple sensors usage.
34  2018-01-03: Added function getTempAndHumidity which returns temperature and humidity in one call.
35  2018-01-03: Added retry in case the reading from the sensor fails with a timeout.
36  2018-01-08: Added ESP8266 (and probably AVR) compatibility.
37  ******************************************************************/
38 
39 #ifndef dhtesp_h
40 #define dhtesp_h
41 
42 #if ARDUINO < 100
43  #include <WProgram.h>
44 #else
45  #include <Arduino.h>
46 #endif
47 
48 // Reference: http://epb.apogee.net/res/refcomf.asp (References invalid)
49 enum ComfortState {
50  Comfort_OK = 0,
51  Comfort_TooHot = 1,
52  Comfort_TooCold = 2,
53  Comfort_TooDry = 4,
54  Comfort_TooHumid = 8,
55  Comfort_HotAndHumid = 9,
56  Comfort_HotAndDry = 5,
57  Comfort_ColdAndHumid = 10,
58  Comfort_ColdAndDry = 6
59 };
60 
61 // References https://en.wikipedia.org/wiki/Dew_point ==> Relationship to human comfort
62 enum PerceptionState {
63  Perception_Dry = 0,
64  Perception_VeryComfy = 1,
65  Perception_Comfy = 2,
66  Perception_Ok = 3,
67  Perception_UnComfy = 4,
68  Perception_QuiteUnComfy = 5,
69  Perception_VeryUnComfy = 6,
70  Perception_SevereUncomfy = 7
71 };
72 
74  float temperature;
75  float humidity;
76 };
77 
79 {
80  //Represent the 4 line equations:
81  //dry, humid, hot, cold, using the y = mx + b formula
82  float m_tooHot_m, m_tooHot_b;
83  float m_tooCold_m, m_tooHCold_b;
84  float m_tooDry_m, m_tooDry_b;
85  float m_tooHumid_m, m_tooHumid_b;
86 
87  inline bool isTooHot(float temp, float humidity) {return (temp > (humidity * m_tooHot_m + m_tooHot_b));}
88  inline bool isTooHumid(float temp, float humidity) {return (temp > (humidity * m_tooHumid_m + m_tooHumid_b));}
89  inline bool isTooCold(float temp, float humidity) {return (temp < (humidity * m_tooCold_m + m_tooHCold_b));}
90  inline bool isTooDry(float temp, float humidity) {return (temp < (humidity * m_tooDry_m + m_tooDry_b));}
91 
92  inline float distanceTooHot(float temp, float humidity) {return temp - (humidity * m_tooHot_m + m_tooHot_b);}
93  inline float distanceTooHumid(float temp, float humidity) {return temp - (humidity * m_tooHumid_m + m_tooHumid_b);}
94  inline float distanceTooCold(float temp, float humidity) {return (humidity * m_tooCold_m + m_tooHCold_b) - temp;}
95  inline float distanceTooDry(float temp, float humidity) {return (humidity * m_tooDry_m + m_tooDry_b) - temp;}
96 };
97 
98 class DHTesp
99 {
100 public:
101 
102  typedef enum {
103  AUTO_DETECT,
104  DHT11,
105  DHT22,
106  AM2302, // Packaged DHT22
107  RHT03 // Equivalent to DHT22
108  }
109  DHT_MODEL_t;
110 
111  typedef enum {
112  ERROR_NONE = 0,
113  ERROR_TIMEOUT,
114  ERROR_CHECKSUM
115  }
116  DHT_ERROR_t;
117 
118  TempAndHumidity values;
119 
120  void setup(uint8_t pin, DHT_MODEL_t model=AUTO_DETECT);
121  void resetTimer();
122 
123  float getTemperature();
124  float getHumidity();
125  TempAndHumidity getTempAndHumidity();
126 
127  DHT_ERROR_t getStatus() { return error; };
128  const char* getStatusString();
129 
130  DHT_MODEL_t getModel() { return model; }
131 
132  int getMinimumSamplingPeriod() { return model == DHT11 ? 1000 : 2000; }
133 
134  int8_t getNumberOfDecimalsTemperature() { return model == DHT11 ? 0 : 1; };
135  int8_t getLowerBoundTemperature() { return model == DHT11 ? 0 : -40; };
136  int8_t getUpperBoundTemperature() { return model == DHT11 ? 50 : 125; };
137 
138  int8_t getNumberOfDecimalsHumidity() { return 0; };
139  int8_t getLowerBoundHumidity() { return model == DHT11 ? 20 : 0; };
140  int8_t getUpperBoundHumidity() { return model == DHT11 ? 90 : 100; };
141 
142  static float toFahrenheit(float fromCelcius) { return 1.8 * fromCelcius + 32.0; };
143  static float toCelsius(float fromFahrenheit) { return (fromFahrenheit - 32.0) / 1.8; };
144 
145  float computeHeatIndex(float temperature, float percentHumidity, bool isFahrenheit=false);
146  float computeDewPoint(float temperature, float percentHumidity, bool isFahrenheit=false);
147  float getComfortRatio(ComfortState& destComfStatus, float temperature, float percentHumidity, bool isFahrenheit=false);
148  ComfortProfile getComfortProfile() {return m_comfort;}
149  void setComfortProfile(ComfortProfile& c) {m_comfort = c;}
150  inline bool isTooHot(float temp, float humidity) {return m_comfort.isTooHot(temp, humidity);}
151  inline bool isTooHumid(float temp, float humidity) {return m_comfort.isTooHumid(temp, humidity);}
152  inline bool isTooCold(float temp, float humidity) {return m_comfort.isTooCold(temp, humidity);}
153  inline bool isTooDry(float temp, float humidity) {return m_comfort.isTooDry(temp, humidity);}
154  byte computePerception(float temperature, float percentHumidity, bool isFahrenheit=false);
155 protected:
156  void readSensor();
157 
158  float temperature;
159  float humidity;
160 
161  uint8_t pin;
162 
163 private:
164  DHT_MODEL_t model;
165  DHT_ERROR_t error;
166  unsigned long lastReadTime;
167  ComfortProfile m_comfort;
168 };
169 
170 #endif /*dhtesp_h*/
Definition: DHTesp.h:73
Definition: DHTesp.h:98
Definition: DHTesp.h:78