Урок 16. Подключение датчика DHT11 к Arduino UNO. Выводим температуру и влажность на LCD 1602 I2C дисплей
В этом уроке мы рассмотрим самый популярный датчик температуры DHT11. Научимся считывать показания датчика и выводить на LCD 1602 I2C дисплей.
Нам понадобится:
- Arduino
- Перемычки или Набор проводов для макетирования 65 шт.
- Провода Папа-Мама
- Breadboard
- Резисторы
- DHT11 цифровой датчик температуры и влажности
- Символьный дисплей голубая подсветка LCD1602 IIC/I2C или Символьный дисплей зеленая подсветка LCD1602 IIC/I2C
Для реализации проекта нам необходимо установить библиотеки:
- LiquidCrystal_I2C1602V1 Библиотека
- Библиотека для подключения DHT11
Схема подключения:
Этом уроке к arduino uno будет подключено два модуля, датчик температуры и влажности DHT11 и символьный дисплей LCD1602 IIC/I2.
1) Датчик DHT11 с помощью которого будем получать данные о температуре и влажности окружающей среды, подключается следующим образом.
Описание подключения DHT11 к Arduino:
| DHT11 | Arduino |
|---|---|
| 1 контакт | 5V |
| 2 контакт | Pin 2 |
| 3 контакт | Через резистор 10 kOm к 5V |
| 4 контакт | GND |
2) Теперь подключаем символьный дисплей LCD1602 IIC/I2C к Arduino uno, на который будет выводиться информация о температуре и влажности.

| Arduino | LCD1602 IIC/I2C | Цвет проводов на фото |
| GND | GND | Черный |
| 5V | VCC | Красный |
| A4 | SDA | Коричневый |
| A5 | SCL | Серый |
Скетч:
Не забудьте установить библиотеки указанные в начале урока.
#include #include LiquidCrystal_I2C lcd(0x27, 16, 2); #include dht11 sensor; #define DHT11PIN 2 byte degree[8] = // кодируем символ градуса < B00111, B00101, B00111, B00000, B00000, B00000, B00000, >; void setup() < lcd.init(); lcd.backlight(); lcd.createChar(1, degree); // Создаем символ под номером 1 >void loop()
Демонстрация работы:
Arduino для начинающих. Урок 9. Подключение датчика температуры и влажности DHT11 и DHT22



Продолжаем серию уроков “Arduino для начинающих”. Сегодня мы разберем подключение к Arduino датчиков температуры и влажности DHT11 и DHT22.
Датчики DHT11 и DHT22 не обладают высоким быстродействием и точностью, но зато просты, недороги и отлично подходят для обучения. Они выполнены из двух частей — емкостного датчика влажности и термистора. Чип, находящийся внутри, выполняет аналого-цифровое преобразование и выдает цифровой сигнал, который можно считать с помощью любого микроконтроллера.
Список деталей для сборки модели
Для сборки проекта, описанного в этом уроке, понадобятся следующие детали:
- плата Arduino (подробнее, о том как выбрать Arduino здесь);
- датчик DHT11 или DHT22 (можно купить, например, здесь или здесь);
- Breadboard;
- резистор на 10 кОм;
- программа Arduino IDE, которую можно скачать с сайта Arduino.

Датчики DHT11 и DHT22
Чем отличаются датчики DHT11 и DHT22?
Две версии сенсоров DHT похожи друг на друга и имеют одинаковую распиновку. Их отличия в характеристиках. Спецификации:
Сенсор DHT11:
- определение влажности в диапозоне 20-80%
- определение температуры от 0°C до +50°C
- частота опроса 1 раз в секунду
Сенсор DHT22:
- определение влажности в диапазоне 0-100%
- определение температуры от -40°C до +125°C
- частота опроса 1 раз в 2 секунды
Таким образом, характеристики датчика DHT22 лучше по сравнению с DHT11, и поэтому он чуть-чуть дороже. Снимать показания чаще, чем раз в 1-2 секунды не получится, но, возможно, для вашего проекта более высокое быстродействие и не требуется.
Подключение сенсоров DHT к Arduino
Датчики DHT имеют стандартные выводы и их просто установить на breadboard.
Датчики DHT имеют 4 вывода:
- питание.
- вывод данных
- не используется.
- GND (земля).
Между выводами питания и вывода данных нужно разместить резистор номиналом 10 кОм.
Датчик DHT часто продается в виде готового модуля. В этом случае он имеет три вывода и подключается без резистора, т.к. резистор уже есть на плате.
Схема подключения датчика с резистором:

Схема подключения датчика DHT к Arduino
Arduino скетч
Воспользуемся библиотекой DHT.h, созданной специально для датчиков DHT. Ее можно скачать здесь. Для использования нужно поместить скачанную папку в в папку /libraries.
Пример программы для работы модели с датчиком DHT22 (можно просто скопировать в Arduino IDE):
#include «DHT.h»
#define DHTPIN 2 // номер пина, к которому подсоединен датчик
// Раскомментируйте в соответствии с используемым датчиком
// Инициируем датчик
DHT dht(DHTPIN, DHT22);
//DHT dht(DHTPIN, DHT11);
void setup() Serial.begin(9600);
dht.begin();
>
void loop() // Задержка 2 секунды между измерениями
delay(2000);
//Считываем влажность
float h = dht.readHumidity();
// Считываем температуру
float t = dht.readTemperature();
// Проверка удачно прошло ли считывание.
if (isnan(h) || isnan(t)) Serial.println(«Не удается считать показания»);
return;
>
Serial.print(«Влажность: «+h+» %\t»+»Температура: «+t+» *C «);
>
При использовании датчика DHT11 закомментируйте строку:
DHT dht(DHTPIN, DHT22);
И раскомментируйте строку:
//DHT dht(DHTPIN, DHT11);
Загрузите скетч в контроллер и проверьте правильность работы при помощи Сервис->Монитор порта:
Показания температуры и влажности (Монитор порта)
Вы должны увидеть температуру и влажность. Изменения можно увидеть, например, выдыхая на датчик (как для затуманивания окна). Дыхание увеличивает влажность.
Посты по урокам:
- Первый урок: Светодиод
- Второй урок: Кнопка
- Третий урок: Потенциометр
- Четвертый урок: Сервопривод
- Пятый урок: Трехцветный светодиод
- Шестой урок: Пьезоэлемент
- Седьмой урок: Фоторезистор
- Восьмой урок: Датчика движения (PIR) и E-mail
- Девятый урок: Подключение датчика температуры и влажности DHT11 или DHT22
Все посты сайта “Занимательная робототехника” по тегу Arduino.
Наш YouTube канал, где публикуются видео-уроки.
Не знаете, где купить Arduino? Все используемые в уроке комплектующие входят в большинство готовых комплектов Arduino, их также можно приобрести по отдельности. Подробная инструкция по выбору здесь. Низкие цены, спецпредложения и бесплатная доставка на сайтах AliExpress и DealExtreme. Если нет времени ждать посылку из Китая — рекомендуем интернет-магазины Амперка и DESSY. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore. Смотри также список магазинов.
Автор Александр Гагарин. В статье использованы материалы learn.adafruit.com.

Читайте также
52 комментария к статье “Arduino для начинающих. Урок 9. Подключение датчика температуры и влажности DHT11 и DHT22”
Давид
17.07.2015
При компиляции выдало: Arduino: 1.6.5 (Windows 7), Плата»Arduino Uno» Изменена опция сборки, пересобираем все sketch_jul16a.ino: In function ‘void loop()’:
sketch_jul16a:45: error: invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’
и розовым цветом выделена строчка Serial.print(«Влажность: «+h+» %\t»+»Температура: «+t+» *C «);
Эта строка как-то неправильно написана?
Спасибо всем, кто подскажет
Денис
17.07.2015
В Ардуино нормально строка не формируется. Все, что нужно вывести, нужно написать отдельными Serial.print
koa73
17.09.2016
Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);
Пруфпик
29.10.2016
Для DHT11 со встроенным резистором на плате рабочая программа будет такой. Вывод с — (правый) от датчика подключаем к GND Arduino, средний вывод (это +) подключаем на разъем 5V, левый вывод (это сигнал) подключаем к цифровому пину с цифрой 2. #include «DHT.h» #define DHTPIN 2 // номер пина, к которому подсоединен датчик // Раскомментируйте в соответствии с используемым датчиком // Инициируем датчик //DHT dht(DHTPIN, DHT22); DHT dht(DHTPIN, DHT11); void setup() < Serial.begin(9600); dht.begin(); >void loop() < // Задержка 2 секунды между измерениями delay(2000); //Считываем влажность float h = dht.readHumidity(); // Считываем температуру float t = dht.readTemperature(); // Проверка удачно прошло ли считывание. if (isnan(h) || isnan(t)) < Serial.println(«Не удается считать показания»); return; >Serial.print(«Hum: «);
Serial.print(h);
Serial.print(» Temp: «);
Serial.print(t);
Serial.println(» C»); >
tapin13
16.11.2017
Serial.print((String)»Влажность: «+h+» %\t»+»Температура: «+t+» *C «);
Вася
30.08.2018
Вот, например. Serial.println((String)»Влажность: » + h + (String)» %\t» + (String)»Температура: » + t + (String)» *C «);
Андрей
16.11.2015
У меня датчик DHT11 в виде готового модуля с тремя выводами. ВНИМАНИЕ: левый пин — данные, средний — питание, правый — земля.
В скачанной бbблиотеке DHT есть скетч с примером использования датчика — работает без изменений. По сравнению с другим прибором температуру DHT11 показывает +/- один градус, а влажность завышает на 6 %.
Павел
05.12.2015
Андрей, можно скетч на такой датчик? Пол интернета перерыл, не нашел, у всех без встроенных резисторов.
deftvk
27.05.2016
Вот здесь более, чем доступно codius.ru/articles/187, ещё и что происходит в библиотеке описано. И пример кстати на модуле с резистором.
Паша
27.02.2016
Адрюха, респект! В 5 гайдах в интернет говорят что первая ножка — это питание, и только твой коммент помог получить данные с dht11 модуля. Спасибо!
Salihman
16.06.2016
Спасибо тебе огромное!
Андрей
03.01.2016
При проверке выдает следующее сообщение :
E:\Arduino\Dht11\Dht11\examples\TempHumidity\TempHumidity.ino:3:17: fatal error: DHT.h: No such file or directory #include «DHT.h» ^ compilation terminated. exit status 1
Ошибка компиляции.
что делать?
Андрей
03.01.2016
E:\Arduino\Dht11\Dht11\examples\TempHumidity\TempHumidity.ino:3:17: fatal error: DHT.h: No such file or directory #include «DHT.h» ^ compilation terminated. exit status 1
Ошибка компиляции.
Что делать?
Александр
07.01.2016
эта ошибка когда не подключил библиотеку, либо коряво скачалось, у меня все работает на китайском ардуино uno
Дмитрий
15.01.2016
все очень понятно написано . а будет продолжение ?
Роман
19.01.2016
Скетч не верный!
Из примера к библиотеке работает. В приведенном примере нет.
Андрей
13.02.2016
#include «DHT.h»
//#include «iostream»
#define DHTPIN 10
int ledtest = 6;
DHT dht(DHTPIN, DHT11); void setup() < pinMode(led, OUTPUT);
pinMode(ledtest, OUTPUT);
Serial.begin(9600);
dht.begin(); > void loop()
< delay(1000);
//setlocale(LC_ALL,»RUS»);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
Serial.println(«no info»);
digitalWrite(ledtest, LOW);
return;
>
else
digitalWrite(ledtest, HIGH);
//****** НЕФОРМИРУЮЩАЯСЯ СТРОКА ВЫВОДА пришлось писать её раздельно.
Serial.print(«Humidity: «); Serial.print(h); Serial.print(«% «); Serial.print(«Temp: «); Serial.print(t); Serial.println(«*C» );
>
> вот полностью рабочий вариант.
у меня там ещё диод как индикатор стоит, часть с ledset можно вырезать.
Виталий
14.09.2016
у вас в тексте программы ошибки. pinMode(led, OUTPUT) не описана как переменная, вы, наверное, имели ввиду ledtest вместо led
Юрий
12.07.2017
найти и заменить все « на » . ledtest вместо led
Kirill
14.02.2016
Как сделать когда выше 25 градусов включался контакт 4 вентилятор. Помогите пожалуйста.
Dmirtiy
28.02.2016
Kirill, примерно так: t — температура, конечно.
ledPin = вывод для управляющего сигнала (у меня загорается светодиод, например)
Ну и для контроля вставля дополнительные надписи в порт, их можно убрать. if (t > 25)
analogWrite(ledPin, 255);
Serial.println(«Warning. »);
>
else
analogWrite(ledPin, 0);
Serial.println(«NO Warning. »);
>
Леонид
20.04.2016
подскажите плис, как вывести данные с датчика на LCD Keypad Shield Просто на экран, понятно..
Роман
23.09.2016
This report would have more information with
«Show verbose output during compilation»
enabled in File > Preferences.
Arduino: 1.0.6 (Windows XP), Board: «Arduino Uno»
sketch_sep23a.ino: In function ‘void loop()’:
sketch_sep23a:46: error: invalid operands of types ‘const char [21]’ and ‘float’ to binary ‘operator+’ Скопировал. Проверку не проходит.
Роман
27.09.2016
Ткните на спец форум какойнить, где на вопросы чайников отвечают оперативно, за небольшим донатом не заржавеет.
Занимательная робототехника
27.09.2016
На http://forum.amperka.ru/ попробуйте.
dikikh.dm
06.10.2016
Всем доброй ночи, никак не могу завести dht11, все время не удается считать показания. Пробовал менять местами пины 5В и вывода иноформации, как советовали выше — не помогло.
Датчик температуры работает отлично.
Дохлый dht 11 попался?
nemezida.su
29.10.2016
поxоже на то. Что вообще выводит в переменной влажности?
Олег
05.12.2016
Подключал датчик через дашборд, выдавал нулевые значение в мониторе порта, подключил напрямую провода (от ардуино сразу к датчику), все заработало.
Олег
05.12.2016
Разобрался с дашбордом, я новичок, поэтому не знал что дорожки плюс и минус на ней работают только до половины, а дальше разрыв, датчик установил на вторую половину, а подключил к + и GND первую половину.
Сергей
09.12.2016
Что за ошибка в библиотеке? При проверке выскакивает. На Ардуино IDE In file included from G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master\DHT_U.cpp:22:0: G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory #include ^ compilation terminated. Используем библиотеку DHT-sensor-library-master версии 1.3.0 из папки: G:\Arduino\Arduino\Sketch\libraries\DHT-sensor-library-master
exit status 1
Ошибка компиляции для платы Arduino Nano.
Алексей
20.02.2017
У кого ошибка при компиляции как у Сергея, установите библиотеку версии 1.2.3 .
И строка вывода:
Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);
как писал koa73
Алексей
20.02.2017
У кого ошибка как у Сергея, установите версию библиотеки 1.2.3.
Voviks99
01.03.2017
Serial.print(» Hum: «);
Serial.print(h);
Serial.print(» %\t»);
Serial.print(» Temp: «);
Serial.print(t);
Serial.println(» *C»);
//Serial.println(«Humidity : «+String(h, 1)+»%\t Temperature : «+String(t, 1)+» *C»);
//Serial.println(«Влажность: «+h+» %\t»+»Температура: «+t+» *C «); у меня так получилось, правда с русским крякозябры. заработала.
Олег
27.03.2017
Adafruit_Sensor.h: No such file or directory
#include скачайте библиотеку
Stivin
31.03.2017
Добрый день, подключил датчик и дисплей, все ок, подскажите пожалуйста как сделать допустим если температура равна х значению то зуммер будет пищать 1раз в 1 минуту?
Александр
04.04.2017
640.00 *C температуры и 921.6 % влажности — это нормальные показания? О_О
tapin13
16.11.2017
если вы в аду, то да.
BEC
15.01.2020
У тебя датчик DHT11 а ты выставил DHT22
Antoniolip
03.06.2017
Привет! Срочно! Как купить электронику из Китая в Томске или в России с бесплатной доставкой курьером? Помогите срочно не могу самому найти интернет магазин…
Не знаю как выбрать магазин что бы не кинули выручайте!
Занимательная робототехника
03.06.2017
Очень познавательно.
engladbop
22.11.2017
Не совсем согласен,
Константин
03.01.2018
Здравствуйте,подскажите что вообще значит // Инициируем датчик
DHT dht(DHTPIN, DHT22);
//DHT dht(DHTPIN, DHT11);
И для чего это нужно.
Александр
21.03.2018
Говорим ардуине с каким датчиком нужно работать.
1
09.08.2018
Нит черта не работает , как не качал библиотеку по инструкции без толку — не одного нормального примера с этим датчиком пока не нашел
Arduino и датчик влажности почвы
Ёмкостный датчик влажности почвы позволяет, как понятно из названия, измерять влажность почвы. В отличие от обычных резистивных датчиков не окисляется со временем и не теряет своих свойств и точности.

- Питание: 2.5.. 5V
- Аналоговый выход: ~0.8.. 2.5V
Подключение
Подключается к питанию (GND, VCC), выход AOUT – на любой аналоговый пин:

Примеры
Выведем показания с датчика в порт. Он подключен в аналоговый пин 0, поэтому читаем как analogRead(0) :
void setup() < Serial.begin(9600); >void loop()
Открываем порт и наблюдаем показания.
Прежде чем делать автоматический полив, нужно знать диапазон показаний датчика, изучив значения из монитора порта. У меня получилось так:
| Окружение датчика | Показания (Arduino 5V) | Показания (Wemos Mini 3.3V) |
| Воздух | 500 | 670 |
| Прижал палец | 300 | 350 |
| Сухая земля | 260 | 330 |
| Мокрая земля | 180 | 280 |
Сделаем простую условную конструкцию, которая будет включать бортовой светодиод на плате, если земля слишком сухая:
// порог срабатывания #define DRY_SIGNAL 230 void setup() < // пин светодиода как выход pinMode(LED_BUILTIN, OUTPUT); >void loop() < // если земля сухая - включаем светодиод if (analogRead(0) >DRY_SIGNAL) < digitalWrite(LED_BUILTIN, HIGH); >else < digitalWrite(LED_BUILTIN, LOW); >delay(500); >
Домашнее задание
- Попробовать датчик в горшке с цветком. Полить цветок
Связанные уроки
DHT22 — Датчик влажности и температуры 1.00 0

DHT22 Arduino — это цифровой датчик влажности и температуры на микросхеме AM2302. Датчик предназначен для измерения с высокой точностью, температуры и влажности окружающей среды. Датчик DHT22 выполнен в виде модуля и содержит всю необходимую обвязку, для подключения его к контроллеру Ардуино. Вам лишь потребуется только подключить провода Dupont, которые входят в комплект поставки атмосферного датчика.
Для подключения модуля AM2302 к Arduino, нужно подключить питание к выводам (+), (-), а к выводу OUT подключить любой цифровой вход контроллера Ардуино. Схема подключения датчика температуры и влажности. Для быстрого написания скетча Вам потребуется библиотека DHT.
Комплект поставки DHT-22:
- Датчик DHT22 — 1 шт.
- Шлейф трех проводной с разъемом мама-мама — 1 шт.
Технические характеристики:
- Напряжение питания: 3 .. 6 В
- Диапазон измерения влажности: 0 .. 100%
- Диапазон измерения температуры: -40℃ ..+80℃
- Погрешность измерений влажности: 2%
- Погрешность измерений температуры: 0.5°С
- Шаг измерения влажности: 0.1%
- Шаг измерения температуры: 0.1 °С
- Период измерений: 1 сек.
- Интерфейс: onewire, 1-проводной
- Шаг выводов: 2,54 мм
Скетч для Ардуино и DHT-22:
#include "DHT.h" #define DHTPIN 9 // вывод, к которому подключается датчик #define DHTTYPE DHT22 #define fan 4 int maxHum = 60; int maxTemp = 40; DHT dht(DHTPIN, DHTTYPE); void setup() < pinMode(fan, OUTPUT); Serial.begin(9600); dht.begin(); >void loop() < delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) < Serial.println("Failed to read from DHT sensor!"); return; >if(h > maxHum || t > maxTemp) < digitalWrite(fan, HIGH); >else < digitalWrite(fan, LOW); >Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); >
Видео тест датчика DHT22 и Arduino
| Размеры | 25 × 15 × 8 мм |
| Вес | 4 г |
| Цвет | белый |