Подключение DHT22 к Arduino
Датчик температуры и влажности
DHT22 к Arduino подключают тремя проводами: 5 В, земля и данные на любой цифровой вывод. Весь протокол берёт на себя библиотека DHT.
Схема подключения DHT22 к Arduino
| DHT22 (AM2302) | Arduino Uno |
|---|---|
| SDA | D4 |
| VCC | 5V |
| GND | GND |
Схема из примера «Arduino Uno: датчик DHT22 на одном проводе».
Выводы DHT22 (AM2302)
| Вывод | Назначение |
|---|---|
| NC | не подключается |
| SDA | линия данных (в документации — DATA); нужна подтяжка 10 кОм к питанию |
| VCC | питание 3,3–5 В |
| GND | общий провод |
Код для Arduino
#include <DHT.h>
// DHT22 на выводе 4. Шины здесь нет вовсе: обмен идёт по одной линии,
// импульсами разной длины, и всю работу делает библиотека.
//
// Датчик медленный, и это не библиотека тормозит. Внутри он измеряет
// около двух секунд, а между опросами ему нужен покой: спросите чаще —
// получите прошлое значение или NaN. Отсюда delay в конце цикла.
//
// Проверка на NaN обязательна. Отвалившийся провод не даёт ни ошибки,
// ни исключения: возвращается «не число», и любая арифметика с ним
// тихо превращается в бессмыслицу.
#define DHTPIN 4
#define DHTTYPE 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(F("датчик не ответил"));
delay(2000);
return;
}
Serial.print("t:");
Serial.print(t, 1);
Serial.print(" h:");
Serial.println(h, 1);
delay(2000);
}
Скетч можно править и запускать в симуляторе без платы и установки среды.
Что учесть на Arduino
- Подтяжка 10 кОм между данными и 5 В нужна у голого датчика; на плате-модуле она есть.
- Опрос чаще раза в 2 секунды не даёт новых данных: датчик медленный.
В железе
На модуле (плата с тремя выводами) подтягивающий резистор обычно уже стоит. У голого датчика с четырьмя ножками его ставят сами: 10 кОм между DATA и VCC.
Частые ошибки при подключении к Arduino
- Опрашивать датчик в каждом проходе
loop()без паузы: получаются NaN и «застывшие» значения. - Длинный провод к датчику (несколько метров) с подтяжкой 10 кОм: сигнал искажается, подтяжку уменьшают до 4,7 кОм.
- Чтение чаще раза в 2 секунды — датчик не успевает, и библиотека возвращает NaN.
- Нет подтягивающего резистора у голого датчика — линия висит, данные не приходят.
- Длинный провод (больше 20 м) без понижения скорости опроса и с тонкими жилами — ошибки контрольной суммы.
- Проверяйте результат через
isnan()— NaN, выведенный на экран как число, выглядит как «датчик врёт».
Ещё по теме
Другие детали для Arduino
HC-SR04BME280DS3231SSD1306 OLED 0,96″LCD 1602 с I2CMAX7219TM1637Модуль релеKY-040Клавиатура 4×4HX711ФоторезисторМодуль microSDRGB-светодиодСервопривод SG9074HC595Шаговый двигательКнопкаПотенциометрПьезопищалкаСветодиодПолзунковый переключательHC-SR501TTP223Датчик влажности почвыMQ-2LM35Джойстик KY-023DHT11HTU21D