![Изчитане на DHT11 с ESP8266 Как да измерим температура и влажност](http://ardudevelop.eu/wp-content/uploads/2024/09/Изчитане-на-DHT11-с-ESP8266-Как-да-измерим-температура-и-влажност.png)
В тази статия ще разгледаме как да използваме ESP8266 за изчитане на данни от температурно-влажностния сензор DHT11. Ще покажем също как лесно да смените сензора с DHT21 или DHT22, като направите минимални промени в кода. Схемата за свързване на сензора с ESP8266 и диаграмите на пиновете на DHT11 и DHT22 ще бъдат включени, за да ви помогнат в правилната конфигурация.
Необходими компоненти:
- ESP8266 (например NodeMCU или WeMos D1)
- DHT11 или DHT22 сензор
- 4.7 kΩ резистор (ако е необходимо)
- Кабели за свързване
- Компютър с Arduino IDE
Библиотеки
Трябва да изтеглите и инсталирате две библиотеки в Arduino IDE:
- DHT Sensor Library от Adafruit, която можете да намерите тук.
- Adafruit Unified Sensor Library, достъпна тук.
След като тези библиотеки бъдат инсталирани може да ги прибавите в Arduino IDE. Ако не знаете как се добавят библиотеки, прочетете нашата статия: Arduino IDE бърз преглед. Вече можете да използвате кода по-долу, за да започнете.
Схема на свързване
![Изчитане на DHT11 с ESP8266 Как да измерим температура и влажност Схема](http://ardudevelop.eu/wp-content/uploads/2024/09/Изчитане-на-DHT11-с-ESP8266-Как-да-измерим-температура-и-влажност-Схема.png)
Свържете 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)](http://ardudevelop.eu/wp-content/uploads/2024/09/DHT11-пин-диаграма-pinout.png)
DHT11/DHT22 | ESP8266 Pin |
---|---|
VCC | 3.3V |
DATA | D2 (GPIO4) |
GND | GND |
Примерен код за изчитане на 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 е лесен начин за измерване на температура и влажност. Можете да променяте типа сензор с минимални промени в кода и да разчитате на стабилна работа благодарение на включените библиотеки.