====== Датчик температуры и влажности DHT-21: инструкция, примеры использования и документация ====== [[amp>product/temperature-humidity-sensor-dht21?utm_source=announce&utm_campaign=dht-21&utm_medium=wiki|Выносной датчик DHT-21 ]] предназначен для измерения температуры и влажности окружающей среды. {{ :продукты:dht-21:img_0360.jpg?nolink |}} ===== Подключение и настройка ===== Датчик общается с управляющей электроникой по трём проводам. При подключении к [[amp>collection/arduino?utm_source=man&utm_campaign=dht-21&utm_medium=wiki|Arduino]] или [[amp>product/iskra-js?utm_source=man&utm_campaign=dht-21&utm_medium=wiki|Iskra JS]] удобно использовать [[amp>/product/arduino-troyka-shield?utm_source=man&utm_campaign=dht-21&utm_medium=wiki|Troyka Shield]]. {{ :продукты:dht-21:dht-21.png?nolink |}} ===== Примеры работы ===== Рассмотрим примеры работы датчика температуры и влажности DHT-21 в зависимости от управляющей платформы. ==== Пример для Arduino ==== В качестве примера выведем в Serial-порт текущее значение температуры и влажности. Для запуска примера скачайте и установите библиотеку [[https://github.com/amperka/TroykaDHT|TroykaDHT]]. // библиотека для работы с датчиками серии DHT #include // создаём объект класса DHT // передаём номер пина к которому подключён датчик и тип датчика // типы сенсоров: DHT11, DHT21, DHT22 DHT dht(4, DHT21); void setup() { // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600); dht.begin(); } void loop() { // считывание данных с датчика dht.read(); // проверяем состояние данных switch(dht.getState()) { // всё OK case DHT_OK: // выводим показания влажности и температуры Serial.print("Temperature = "); Serial.print(dht.getTemperatureC()); Serial.println(" C \t"); Serial.print("Temperature = "); Serial.print(dht.getTemperatureK()); Serial.println(" K \t"); Serial.print("Temperature = "); Serial.print(dht.getTemperatureF()); Serial.println(" F \t"); Serial.print("Humidity = "); Serial.print(dht.getHumidity()); Serial.println(" %"); break; // ошибка контрольной суммы case DHT_ERROR_CHECKSUM: Serial.println("Checksum error"); break; // превышение времени ожидания case DHT_ERROR_TIMEOUT: Serial.println("Time out error"); break; // данных нет, датчик не реагирует или отсутствует case DHT_ERROR_NO_REPLY: Serial.println("Sensor not connected"); break; } // ждём две секунды delay(2000); } ==== Пример для Iskra JS ==== Выведем данные температуры и влажности в консоль Espruino Web IDE. // подключаем библиотеку DHT22 для работы с датчиком DHT21 и создаём объект для работы с датчиком var dht = require("DHT22").connect(P4); // считываем данные с датчика // выводим показания температуры и влажности в консоль dht.read(function (a) { console.log("Temp is "+a.temp.toString()+" and RH is "+a.rh.toString()); }); ==== Пример для Raspberry Pi ==== Выведем данные температуры и влажности в консоль Thonny. # Подключаем библиотеку для работы с пинами from machine import Pin # Подключаем библиотеку работы со временем from time import sleep # Подключаем библиотеку для работы с датчиками dht import dht # Создаём переменную, в которой инициализируем объект DHT # и передаём номер пина, к которому подключен датчик. # Датчики DHT 21 и DHT 22 инициализируются как DHT 22 dht22 = dht.DHT22(Pin(14)) # Входим в бесконечный цикл while True: # Если значения с датчика приходят try: # Ожидаем 2 секунды sleep(2) # Инициализируем измерения dht22.measure() # Создаём переменную temp, для хранения считанного значения температуры temp = dht22.temperature() # Создаём переменную hum, для хранения считанного значения влажности hum = dht22.humidity() # Выводим значение температуры в градусах Цельсия print('Temperature: %3.2f C' %temp) # Выводим значение влажности в процентах print('Humidity: %3.2f %%' %hum) # Если не удаётся прочитать значения с датчика except OSError as e: # Выводим сообщение, что данные не удалось прочитать print('Failed to read data from the DHT22 sensor.') ===== Протокол датчика DHT ===== Выходом датчика является [[сенсоры:цифровые|цифровой сигнал]]. Температура и влажность передаются по одному сигнальному проводу (''S''). DHT21 общается с принимающей стороной, такой как [[amp>collection/arduino|Arduino]] по собственному протоколу. Коммуникация двунаправлена и в общих чертах выглядит так: - Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1 - Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1 - После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, в третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет ток 100 мкА. ==== Датчик DHT21 ==== Цифровой датчик DHT21 является составным датчиком, который выдаёт калиброванный цифровой сигнал с показаниями температуры и влажности. Сенсор включает в себя ёмкостный компонент измерения влажности и резистивный компонент измерения температуры с отрицательным температурным коэффициентом (NTC), которые подключены к высокопроизводительному АЦП. Каждый датчик DHT21 проходит калибровку на заводе-изготовителе. Коэффициенты калибровки хранятся в однократно программируемой энергонезависимой памяти и используются во внутренних процессах обработки сигнала. ==== Контакты подключения трёхпроводного шлейфа ==== Модуль подключается к управляющей электронике по [[сенсоры:3-провода|трём проводам]]. Назначение контактов трёхпроводного шлейфа: * Питание (''V'') — красный провод. На него должно подаваться напряжение питания от 3,3 до 5 В; * Земля (''G'') — чёрный провод. Должен быть соединён с землёй микроконтроллера; * Сигнальный (''S'') — жёлтый провод. Подключается к цифровому выходу микроконтроллера. Через него сенсор общается с микроконтроллером по собственному протоколу. ===== Характеристики ===== * Напряжение питания: 3,3–5 В * Потребляемый ток: * в режиме запроса данных: 1,5 мА * в режиме покоя: 1,1 мА * Диапазон измеряемой температуры: −40…+80 °С * Погрешность температуры: ±0,3 °С * Диапазон влажности: 0–99,9% * Погрешность влажности: ±3% * Размеры: 60×27×13 мм