温湿度是机房、鱼缸、大棚、居室里最常要盯的两个量。DHT11 这类单总线的数字温湿度传感器,一根信号线就能把温度和湿度两个数据读回来,几块钱一片,特别适合 Arduino 入门。下面把接线、代码和几个常见坑一次说清。
DHT11 是什么
DHT11 是集成了温湿度传感元件和一块 8 位单片机的数字传感器,直接输出校准好的数字信号,精度大约 ±2℃、±5%RH,量程 0~50℃。想要更高精度就换 DHT22,温湿度精度分别到 ±0.5℃ 和 ±2%RH,但它俩接线方式一样。

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

读数的代码
先安装 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 的引脚顺序记混,接错别慌,对照图上的排列就行。




和 DHT22 接线一样这个结论有用,省得换型号还要重新理线。
上拉电阻这个提醒很关键,散件不加就是一直 NaN。
柜台读失败那段太真实了,我之前就是读太勤,delay(2000) 一改就好了。
DHT11 接 Arduino 是真的省事,三根线一根信号就完事,前阵子做鱼缸水温就用的它。