DHT11测量温湿度
如上图,在库管理器安装DHT sensor library
#include "DHT.h"
#define DHTPIN 5 //与ESP8266的D1相连
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
//在两次测量之间等待几秒钟
delay(2000);
// 读取温度或湿度大约需要250毫秒!
// 传感器读数也可能长达2秒“旧”(这是一个非常慢的传感器)
float h = dht.readHumidity();
// 读取温度为摄氏温度(默认值)
float t = dht.readTemperature();
// 将温度读取为华氏度(isFahrenheit = true)
float f = dht.readTemperature(true);
// 检查是否有任何读取失败并提早退出(重试)。
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// 以华氏度计算热量指数(默认值)
float hif = dht.computeHeatIndex(f, h);
// 计算摄氏温度指数(isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.printf("Humidity: %f %\n",h);
Serial.printf(" Temperature: %f℃, %f℉ \n", t, f);
Serial.printf(" Heat index: %f℃,%f℉ \n", hic, hif);
Serial.print(F("Dew Point (oC): "));
Serial.println(dewPoint(t, h));
Serial.print(F("Dew PointFast (oC): "));
Serial.println(dewPointFast(t, h));
Serial.print("");
}
// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double A0= 373.15/(273.15 + celsius);
double SUM = -7.90298 * (A0-1);
SUM += 5.02808 * log10(A0);
SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM-3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558-T);
}
// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}
结果: