Изчитане на DHT11 и DHT22 с ESP8266

Изчитане на DHT11 с ESP8266 Как да измерим температура и влажност

В тази статия ще разгледаме как да използваме ESP8266 за изчитане на данни от температурно-влажностния сензор DHT11. Ще покажем също как лесно да смените сензора с DHT21 или DHT22, като направите минимални промени в кода. Схемата за свързване на сензора с ESP8266 и диаграмите на пиновете на DHT11 и DHT22 ще бъдат включени, за да ви помогнат в правилната конфигурация.


Необходими компоненти:

  • ESP8266 (например NodeMCU или WeMos D1)
  • DHT11 или DHT22 сензор
  • 4.7 kΩ резистор (ако е необходимо)
  • Кабели за свързване
  • Компютър с Arduino IDE

Библиотеки

Трябва да изтеглите и инсталирате две библиотеки в Arduino IDE:

  1. DHT Sensor Library от Adafruit, която можете да намерите тук.
  2. Adafruit Unified Sensor Library, достъпна тук.

След като тези библиотеки бъдат инсталирани може да ги прибавите в Arduino IDE. Ако не знаете как се добавят библиотеки, прочетете нашата статия: Arduino IDE бърз преглед. Вече можете да използвате кода по-долу, за да започнете.

Схема на свързване

Изчитане на DHT11 с ESP8266 Как да измерим температура и влажност Схема

Свържете DHT11 към ESP8266 по следния начин:

  • DHT VCC към 3.3V на ESP8266
  • DHT GND към GND на ESP8266
  • DHT DATA към цифров пин D4 на ESP8266 (може да използвате други пинове като D3, D5 и т.н., с малки корекции в кода)

Разгледайте диаграмата на пиновете (pinout) в нашето ревю за: ESP8266 D1 Mini – Малък, но Мощен Wi-Fi Микроконтролер

Диаграма на пиновете на DHT11 и DHT22:

DHT11 пин диаграма (pinout)
DHT11 пин диаграма (pinout)
DHT11/DHT22ESP8266 Pin
VCC3.3V
DATAD2 (GPIO4)
GNDGND

Примерен код за изчитане на DHT11 и DHT22 с ESP8266

#include "DHT.h"

#define DHTPIN 4     // Цифров пин D2, свързан към DHT сензора
// Feather HUZZAH ESP8266: използвайте пинове 3, 4, 5, 12, 13 или 14 --
// Пин 15 може да работи, но сензорът трябва да е изключен по време на качването на програмата.

// Разкоментирайте типа сензор, който използвате!
//#define DHTTYPE DHT22   // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT11   // DHT 11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);    // Стартиране на сериен монитор за отчитане на данни
  Serial.println(F("DHTxx тест!"));

  dht.begin();    // Стартиране на DHT сензора
}

void loop() {
  delay(1000);  // Изчакване между измерванията

  float humidity = dht.readHumidity();      // Прочитане на влажността
  float temp_C = dht.readTemperature();     // Прочитане на температурата в Целзий
  float temp_F = dht.readTemperature(true); // Прочитане на температурата в Фаренхайт

  // Проверка дали данните са правилно прочетени
  if (isnan(humidity) || isnan(temp_C) || isnan(temp_F)) {
    Serial.println(F("Грешка при четене от DHT сензора!"));
    return;
  }

  // Отпечатване на данните в серийния монитор
  Serial.print("Влажност = ");
  Serial.print(humidity);
  Serial.print(" %");
  Serial.print(" || ");
  Serial.print("Температура (Целзий) = ");
  Serial.print(temp_C);
  Serial.print(" *C");
  Serial.print(" || ");
  Serial.print("Температура (Фаренхайт) = ");
  Serial.print(temp_F);
  Serial.println(" *F");
}

Обяснение на кода:

Добавяне на библиотеки и настройка на пина:

#include "DHT.h"

Включваме библиотеката за управление на DHT сензора. Пинът, към който е свързан сензорът, е зададен на D2 (GPIO4), но може да го промените към друг подходящ пин, ако е необходимо.

Избор на тип сензор:

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

В кода е зададен DHT11, но ако използвате DHT22 или DHT21, просто трябва да коментирате реда за DHT11 и да разкоментирате реда за съответния сензор (DHT21 или DHT22).

Инициализация на сензора:

DHT dht(DHTPIN, DHTTYPE);

Създаваме обект dht, като му подаваме пина и типа на сензора.

Настройка на серийния монитор и стартиране на сензора:

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx тест!"));
  dht.begin();
}

Във функцията setup инициализираме серийния монитор, за да можем да виждаме данните от сензора, и стартираме сензора с функцията dht.begin().

Прочитане на температура и влажност:

float humidity = dht.readHumidity();      // Прочитане на влажността
float temp_C = dht.readTemperature();     // Прочитане на температурата в Целзий
float temp_F = dht.readTemperature(true); // Прочитане на температурата в Фаренхайт

Във функцията loop четем влажността и температурата както в градуси по Целзий, така и по Фаренхайт.

Проверка за грешки:

if (isnan(humidity) || isnan(temp_C) || isnan(temp_F)) {
  Serial.println(F("Грешка при четене от DHT сензора!"));
  return;
}

Ако стойностите са недостъпни или има проблем с прочитането, проверяваме дали данните са “не число” (NaN) и изписваме съобщение за грешка.

Отпечатване на данните:

Serial.print("Влажност = ");
Serial.print(humidity);
Serial.print(" %");
Serial.print(" || ");
Serial.print("Температура (Целзий) = ");
Serial.print(temp_C);
Serial.print(" *C");
Serial.print(" || ");
Serial.print("Температура (Фаренхайт) = ");
Serial.print(temp_F);
Serial.println(" *F");

Данните за влажността и температурата се показват на серийния монитор с подходящо форматиране.


Видео презентация

Заключение

Използването на DHT11, DHT21 или DHT22 с ESP8266 е лесен начин за измерване на температура и влажност. Можете да променяте типа сензор с минимални промени в кода и да разчитате на стабилна работа благодарение на включените библиотеки.