Содержание

Датчик температуры и влажности DHT-21: инструкция, примеры использования и документация

Выносной датчик DHT-21 предназначен для измерения температуры и влажности окружающей среды.

Подключение и настройка

Датчик общается с управляющей электроникой по трём проводам.

При подключении к Arduino или Iskra JS удобно использовать Troyka Shield.

Примеры работы

Рассмотрим примеры работы датчика температуры и влажности DHT-21 в зависимости от управляющей платформы.

Пример для Arduino

В качестве примера выведем в Serial-порт текущее значение температуры и влажности. Для запуска примера скачайте и установите библиотеку TroykaDHT.

testDHT.ino
// библиотека для работы с датчиками серии DHT
#include <TroykaDHT.h>
// создаём объект класса 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.

test-dht.js
// подключаем библиотеку 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.

test-dht.py
# Подключаем библиотеку для работы с пинами
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 общается с принимающей стороной, такой как Arduino по собственному протоколу. Коммуникация двунаправлена и в общих чертах выглядит так:

  1. Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1
  2. Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1
  3. После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, в третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания

Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет ток 100 мкА.

Датчик DHT21

Цифровой датчик DHT21 является составным датчиком, который выдаёт калиброванный цифровой сигнал с показаниями температуры и влажности.

Сенсор включает в себя ёмкостный компонент измерения влажности и резистивный компонент измерения температуры с отрицательным температурным коэффициентом (NTC), которые подключены к высокопроизводительному АЦП.

Каждый датчик DHT21 проходит калибровку на заводе-изготовителе. Коэффициенты калибровки хранятся в однократно программируемой энергонезависимой памяти и используются во внутренних процессах обработки сигнала.

Контакты подключения трёхпроводного шлейфа

Модуль подключается к управляющей электронике по трём проводам. Назначение контактов трёхпроводного шлейфа:

Характеристики