DHT11数字温湿度传感器是一款市面上使用比较多的温度和湿度传感器,本篇文章飘易就利用Arduino来获取DHT11传感器的温度和湿度。
【DHT11产品参数】
湿度测量范围:5%~95%RH(0-50℃温度补偿)
温度测量范围:-20~+60℃
湿度测量精度:±5.0%RH
温度测量精度:±2.0℃
响应时间:<5s
【DHT11产品特点】
全量程标定,单线数字输出
相对湿度和温度一体测量
全量程标定,无需重新标定即可互换使用
超快响应时间
单线制数字接口(最简单的系统集成,超低的价格)
超小尺寸(12X15.5X5.5mm)
高可靠性
优化的长期稳定性
低功耗
【电气特性】
VDD=5V,T =25℃,除非特殊标注
参数 | 条件 | min | typ | max | 单位 |
供电 | DC | 3.3 | 5 | 5.5 | V |
供电电流
| 测量 | 0.5 | 2.5 | mA | |
平均 | 0.2 | 0.5 | mA | ||
待机 | 100 | 150 | uA | ||
采样周期 | 秒 | 1 | 次 |
【应用领域】
暖通空调、测试及检测设备、汽车、数据记录器、消费品、自动控制、气象站、家电、湿度调节器、医疗、除湿器等。
【电路接线图】

【Arduino 编写程序】
先定义引脚,DHT11的数据引脚连接arduino的2号数字口:
#define DHPIN 2
编写函数:
// 获取温湿度
String wenshidu(void)
{
unsigned int loopCnt;
int chr[40] = {0};//创建数字数组,用来存放40个bit
unsigned long time;
bgn:
//设置2号接口模式:输出
pinMode(DHPIN, OUTPUT);
// 启动信号
// 输出低电平20ms(>18ms)
// 输出高电平40μs
digitalWrite(DHPIN, LOW);
delay(20);
digitalWrite(DHPIN, HIGH);
delayMicroseconds(40);
digitalWrite(DHPIN, LOW);
// 设置2号接口模式:输入
pinMode(DHPIN, INPUT);
// 高电平响应信号
loopCnt = 10000;
while (digitalRead(DHPIN) != HIGH)
{
if (loopCnt-- == 0)
{
// 如果长时间不返回高电平,重头开始
goto bgn;
}
}
// 低电平响应信号
loopCnt = 30000;
while (digitalRead(DHPIN) != LOW)
{
if (loopCnt-- == 0)
{
// 如果长时间不返回低电平,重头开始
goto bgn;
}
}
// 开始读取bit1-40的数值
for (int i = 0; i < 40; i++)
{
while (digitalRead(DHPIN) == LOW)
{}
//当出现高电平时,记下时间“time”
time = micros();
while (digitalRead(DHPIN) == HIGH)
{}
//当出现低电平,记下时间,再减去刚才储存的time
//得出的值若大于50μs,则为‘1’,否则为‘0’
//并储存到数组里去
if (micros() - time > 50)
{
chr[i] = 1;
} else {
chr[i] = 0;
}
}
//湿度,8位的bit,转换为数值
int humi = chr[0] * 128 + chr[1] * 64 + chr[2] * 32 + chr[3] * 16 + chr[4] * 8 + chr[5] * 4 + chr[6] * 2 + chr[7];
int humix = chr[8] * 128 + chr[9] * 64 + chr[10] * 32 + chr[11] * 16 + chr[12] * 8 + chr[13] * 4 + chr[14] * 2 + chr[15];// 湿度小数
String h = String() + humi + "." + humix;
//温度,8位的bit,转换为数值
int temp = chr[16] * 128 + chr[17] * 64 + chr[18] * 32 + chr[19] * 16 + chr[20] * 8 + chr[21] * 4 + chr[22] * 2 + chr[23];
int tempx = chr[24] * 128 + chr[25] * 64 + chr[26] * 32 + chr[27] * 16 + chr[28] * 8 + chr[29] * 4 + chr[30] * 2 + chr[31];// 温度小数
String t = String() + temp + "." + tempx;
//校对码,8位的bit,转换为数值
//int tol = chr[32] * 128 + chr[33] * 64 + chr[34] * 32 + chr[35] * 16 + chr[36] * 8 + chr[37] * 4 + chr[38] * 2 + chr[39];
// 返回温度和湿度
return t + "," + h;
}好了,本文到此完结了。