DHT11 温湿度传感器怎么接 Arduino?DHT 库读数与踩坑(DHT22 同线)

2026-10-21 16:40:03 3阅读

温湿度是机房、鱼缸、大棚、居室里最常要盯的两个量。DHT11 这类单总线的数字温湿度传感器,一根信号线就能把温度和湿度两个数据读回来,几块钱一片,特别适合 Arduino 入门。下面把接线、代码和几个常见坑一次说清。

DHT11 是什么

DHT11 是集成了温湿度传感元件和一块 8 位单片机的数字传感器,直接输出校准好的数字信号,精度大约 ±2℃、±5%RH,量程 0~50℃。想要更高精度就换 DHT22,温湿度精度分别到 ±0.5℃ 和 ±2%RH,但它俩接线方式一样。

DHT11 模块与 Arduino 三线接线示意(VCC-DATA-GND)

怎么接线

DHT11 只要接三根线:VCC 接 Arduino 的 5V,GND 接 GND,DATA(信号)脚接任意数字脚,下面示例用 D2。如果是散件而不是模块,DATA 与 5V 之间需要加一个 4.7k~10k 的上拉电阻;买带模块的版本已经集成好,插上去直接用。DHT22 的接线和 DHT11 完全一样,只是引脚排列略不同,换了型号不用改线。

DHT11 与 DHT22 的引脚定义对比

读数的代码

先安装 Adafruit 的 DHT sensor library(会自动带上 DHTUnified 依赖),然后写上:

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11   // 换 DHT22 就改成 DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup(){
  Serial.begin(9600);
  dht.begin();
}
void loop(){
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if(isnan(h)||isnan(t)){ Serial.println("读取失败"); return;}
  Serial.print("湿度: "); Serial.print(h); Serial.print("%  温度: "); Serial.println(t);
  delay(2000);
}

读出来之后怎么用

读到的温度和湿度是两个 float 变量,直接打印到串口监视器就能看。想上 OLED 显示,就把 SSD1306 和 DHT 两个库一起用,把 t、h 填进显示函数里。很多温湿度计小项目都是 DHT11+OLED,代码量并不大,适合拿来当练手。

几个容易踩的坑

一是 DHT11 两次读取至少要间隔 1~2 秒,读太勤会返回失败或者一直读同一组数,代码里 delay 别小于 1 秒。二是接线太长或接触不良容易出现 NaN(读取失败),优先查信号线并且加上拉。三是别把 DHT11 和 DHT22 的引脚顺序记混,接错别慌,对照图上的排列就行。


作者:代码杰哥
链接:https://www.aiddithome.com/p/107e2b504a23ff.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
4条评论

和 DHT22 接线一样这个结论有用,省得换型号还要重新理线。

深圳打工人Alan
2楼 · 1天前

上拉电阻这个提醒很关键,散件不加就是一直 NaN。

拆机党
3楼 · 1天前

柜台读失败那段太真实了,我之前就是读太勤,delay(2000) 一改就好了。

老张装机
4楼 · 1天前

DHT11 接 Arduino 是真的省事,三根线一根信号就完事,前阵子做鱼缸水温就用的它。