Библиотека для датчиков DHT22, DHT21, DHT11

Билиотека для подключения нескольких датчиков к Ардуине, к разным пинам.
Скачать библиотеку.
Пример:
#include "stDHT.h"
DHT sens(DHT22); // Указать датчик DHT11, DHT21 или DHT22. (несколько датчиков вписывать не нужно)
// Подключать можно только одинаковые датчики, то есть нельзя использовать одновременно DHT11 и DHT22
void setup()
{
Serial.begin(57600);
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
}
void loop()
{
int t = sens.readTemperature(2); // чтение датчика на пине 2
int h = sens.readHumidity(2); // чтение датчика на пине 2
delay(2000);
int t2 = sens.readTemperature(3); // чтение датчика на пине 3
int h2 = sens.readHumidity(3); // чтение датчика на пине 3
delay(2000);
Serial.print("Hum: ");
Serial.print(h);
Serial.print(" %");
Serial.print("Temp: ");
Serial.print(t);
Serial.println(" C ");
Serial.print("Hum2: ");
Serial.print(h2);
Serial.print(" %");
Serial.print("Temp2: ");
Serial.print(t2);
Serial.println(" C ");
}
Схема подключения, на рисунке выше. Если резисторов нет, то можно и без них.
Можно подключать столько датчиков, сколько есть «цифровых» пинов.
Внутри датчиков серии DHT установлены два сенсора — влажности (sens.readHumidity) и температуры (sens.readTemperature).
Данные можно считывать независимо. Например, с одного датчика читать только влажность, а с другого только температуру:
...
int t = sens.readTemperature(2); // чтение датчика на пине 3
delay(2000);
int h2 = sens.readHumidity(3); // чтение датчика на пине 4
delay(2000);
...
Что переделано
За основу была взята эта библиотека.
Убраны числа с плавающей запятой (float заменён на int), то есть показывает только целые числа.
Увеличена скорость чтения с 270мс до 70мс. (можно ещё уменьшать)
Если возникнут проблемы (у меня не возникало), то попробуйте «поиграться» этим значением, редактируя файл DHT.cpp.
boolean DHT::read(void)
{
uint32_t currenttime = millis();
if(currenttime < _lastreadtime)
{
_lastreadtime = 0;
}
if(!_firstreading && ((currenttime - _lastreadtime) < 2000))
{
return _lastresult;
}
_firstreading = false;
_lastreadtime = millis();
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
digitalWrite(_pin, HIGH);
delay(50);//////////////////////// Изначально это значение было - 250. Если что-то будет работать "криво", то
////////////////////////////////// попробуйте увеличивать значение с 50-ти до 60 и т.д.
...
На этом всё, если что-то не понятно, то пишите в комментариях…
Вступайте в Telegram-группу Arduino


- +481
- stD
84922
Поддержать автора
Комментарии (20)
Температура похожа на реальную, а влажность нет. Хотя если зажать датчик пальцами, то температура вырастает до 27 и влажность увеличивается до 17-30 %. Убавил скорость до 9600. В библиотеке выставил значение 250. Увеличил интервал до 3000 мс. Все без результатно. Подскажите, почему??
Попробуйте другой датчик или попробуйте этот датчик с другой библиотекой. После экспериментов, если не затруднит, отпишитесь о результатах. Спасибо.
…
Скорость порта (9600) не имеет отношения к работе датчика.
Если интересно, то можете сравнить размер «Global variables» с моей либой и Adafruit.
Нашол видео того что мне нужно на ютьюбе но… При компиляции скетча
пишет
-Arduino: 1.6.8 (Windows 7), Плата:«Arduino/Genuino Uno»
-exit status 1
-Ошибка компиляции для платы Arduino/Genuino Uno.
Подскажите пожалуйста что делать?
Для этого понадобилось переустановить программу, исключить все рускоязычные папки и вкоде внести изменения:
добавил
#define DHTTYPE DHT22
изменил
с DHT.read11(dht_pin);
на DHT.read22(dht_pin);
заработало!
Всем спасибо!
Следующим шагом будет отправка и получение данных через WIFI.