← 返回传感器图鉴

DHT11 温湿度传感器

最后更新 2026-06-20
⏱ 约 8 分钟 🟡 涉接线/强电
🛒 器材清单
器材数量参考
DHT11 模块1
杜邦线3

价格随渠道波动,以购买页实时为准。

如果你做的第一个"会感知环境"的项目,多半是从这块蓝色(或白色)的小方块开始的。点灯学会了控制输出,DHT11 则是你第一次让单片机"读懂"外面的世界——它告诉你现在房间多少度、多潮湿。十块钱以内,三根线,库一装就能跑,所以它几乎是每个人的传感器启蒙。

工作原理

DHT11 里塞了两个东西:一个电阻式测湿元件,一个 NTC 热敏电阻测温元件。

测湿靠的是一种吸湿材料。空气越潮,材料吸的水越多,它的电阻值就跟着变。芯片量出这个电阻,反推出相对湿度。测温就是常见的 NTC 热敏电阻——温度升高电阻下降,这是一条已知的曲线,量电阻就能算温度。

关键在于,这两路模拟量并不直接给你。DHT11 内部有一颗专用小芯片,把测出来的电阻先转成数字,再按一套固定时序,只用一根数据线把结果发出来。这就是"单总线"(1-Wire 风格的私有协议):收和发都走同一根线,不像 I2C 还要分时钟线和数据线。

这根线平时被上拉电阻拉成高电平。主机想读数据时,先把线拉低一段时间当作"起床信号",再松手;DHT11 收到后回一个应答,然后一位一位地把 40 个 bit(湿度整数、湿度小数、温度整数、温度小数、校验和)通过高电平的持续时长编码发出来——高电平短是 0,长是 1。整个过程是严格卡时间的微秒级时序,自己手搓很容易翻车。好在这些脏活库都替你封装好了,你只管调一个 read()

接线

DHT11 一共三根有效线(四脚版有一个脚是空的)。

DHT11 ESP32 说明
VCC 3.3V 接 5V 也能工作
DATA GPIO4 任意普通 GPIO 都行
GND GND 共地

带小电路板的模块版通常已经把上拉电阻焊在板上了,三根线插上即可。

裸传感器(四脚直插那种)没有上拉,必须在 DATA 和 VCC 之间自己加一个 10kΩ 电阻,否则数据线悬空,读出来全是 nan。关于上拉是怎么回事,可以看 上拉电阻原理

完整代码

用 Adafruit 的 DHT 库最省事。Arduino 库管理器搜 "DHT sensor library" 装上(它会让你顺带装 Adafruit Unified Sensor,一起装)。

#include "DHT.h"

#define DHTPIN 4        // DATA 接在 GPIO4
#define DHTTYPE DHT11   // 型号选 DHT11,不是 DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
  Serial.println("DHT11 启动");
}

void loop() {
  // DHT11 采样慢,间隔必须 >= 1 秒,这里给到 2 秒更稳
  delay(2000);

  float h = dht.readHumidity();      // 相对湿度 %
  float t = dht.readTemperature();   // 摄氏度

  // 读失败时返回 nan,一定要判一下
  if (isnan(h) || isnan(t)) {
    Serial.println("读取失败,检查接线和间隔");
    return;
  }

  Serial.printf("温度: %.1f C   湿度: %.1f %%\n", t, h);
}

注意 DHTTYPE 写错是新手最常见的乌龙——拿 DHT11 的硬件却填了 DHT22,读数会全乱或全 nan。

你应该看到什么

串口监视器(波特率 115200)每 2 秒刷一行:

DHT11 启动
温度: 24.0 C   湿度: 53.0 %
温度: 24.0 C   湿度: 54.0 %
温度: 25.0 C   湿度: 52.0 %

DHT11 的温度只到整数位,所以你会发现小数点后永远是 .0——这不是 bug,是它的分辨率就这么粗。对着传感器哈口气,下一行湿度会明显往上跳,这是确认它真在工作的最快办法。

读数解读

把 DHT11 的能力摆清楚,免得你拿它去干超纲的活:

项目 量程 精度 分辨率
温度 0 ~ 50 °C ±2 °C 1 °C
湿度 20 ~ 90 %RH ±5 %RH 1 %RH

几个要记住的点:

  • 量程窄。低于 0°C 或高于 50°C 它测不了,结冰天放室外就别指望了。
  • 精度一般。±2°C 意味着它读 25°C,实际可能是 23~27°C 之间。做室内大致监测够用,做精密控制不行。
  • nan 是它在喊救命。返回 nan 不代表环境异常,而是这一次通信失败了——下一节专门讲怎么治。

选型 / 避坑

🚧 避坑

读数为 0 或 nan 是 DHT11 最高频的问题,按这三条排查:①采样太快——读取间隔低于 1 秒它来不及响应,给到 2 秒最稳;②裸传感器忘了在 DATA 和 VCC 间加 10kΩ 上拉;③接触不良或杜邦线松动。三条占了九成的 nan。

DHT11 的定位就是"够便宜、够入门",下面这两个是你想升级时的去向:

  • 要更准、量程更宽DHT22。同样的单总线接法、同样的库(DHTTYPE 改成 DHT22 即可),温度精度 ±0.5°C、湿度 ±2%,量程也宽得多。代码几乎不用改,性价比的下一档就是它。
  • 要 I2C、要小体积、要工业级稳定 → SHT30。走 I2C 总线(占两根线但可以挂多个设备),精度和长期稳定性都比 DHT 系列强一截,适合做正经产品。
  • 只测温度、不要湿度 → 看 DS18B20,防水款还能塞进土里测地温。

一句话取舍:练手和玩具用 DHT11,做点像样的东西换 DHT22,要上产品上 SHT30。

故障排查

现象 可能原因 处理
一直 nan / 读失败 采样间隔 < 1 秒 delay 改到 2000ms
偶尔 nan 接触不良 / 杜邦线松 换线、检查焊点
全程 nan(裸传感器) 缺上拉电阻 DATA-VCC 间加 10kΩ
读数全乱 DHTTYPE 填错 确认是 DHT11 不是 DHT22
温度小数永远 .0 正常现象 DHT11 温度分辨率就是 1°C
上电就没反应 接错脚 / 供电不足 核对 VCC/GND,换 USB 口

进阶 / 变体

读到串口只是第一步。下一步很自然:给它配一块屏,做成一个能离线看的桌面温湿度计。OLED 接 I2C,DHT11 接单总线,互不打架,加几行显示代码就成。具体怎么把传感器数据画到屏上,看 温湿度计显示项目OLED 显示屏入门

再往后,如果你想让设备"自己判断"——比如湿度低于某个值就提醒浇水、温度异常就报警——那就进入了 传感器 + AI 决策 的范畴,DHT11 正好是这条链路最省钱的输入端。

典型应用

  • 室内温湿度计:配 OLED 或网页上报,最经典的第一个完整项目。
  • 植物养护提醒:湿度过低时点亮一个 LED 或推一条消息。
  • 机房/柜子简易监测:在精度要求不高的角落布几个,盯个大概。
  • 纯练手:搞懂单总线、搞懂 nan、搞懂"模拟量怎么变成数字",DHT11 是最便宜的教具。

小结 · 相关

DHT11 测得不准、量程也窄,但它把"读取一个真实物理量"这件事的门槛压到了十块钱和三根线。它教会你的单总线时序、采样间隔、nan 排查,换到 DHT22、SHT30 上一样用得着。把它当起点,别当终点。

相关阅读:DHT11 入门实操 · DHT22 升级款 · 数字与模拟信号 · 上拉电阻 · 回传感器图鉴

参数以上方 datasheet 为准;本页为公开资料整理,接线和代码请结合实物验证。

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明