DHT11 - не работает!

ArtAlexis
Offline
Зарегистрирован: 18.06.2018

Всем добра!

Нужна помощь по DHT11.

DHT11 мать его - не работает!

Подключаю к ESP8266 NodeMCU V3:

- минус к GND

- плюс VV (выход 5V)

- данные к D7

Скетч: 

/*********
  Руи Сантос (Rui Santos)
  Более подробно о проекте на: http://randomnerdtutorials.com  
*********/
 
// подключаем библиотеку «ESP8266WiFi»:
#include <ESP8266WiFi.h>
#include <DHT.h>
 
// оставляем раскомментированной строчку,
// соответствующую модели вашего датчика:
#define DHTTYPE DHT11     // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
 
// вписываем здесь данные для своей WiFi-сети:
const char* ssid = "TP-LINK";
const char* password = "mypass";
 
// веб-сервер на порте 80:
WiFiServer server(80);
 
// датчик DHT:
const int DHTPin = 13;
// инициализируем датчик DHT:
DHT dht(DHTPin, DHTTYPE);
 
// временные переменные:
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];
 
// этот блок будет запускаться только при загрузке ESP:
void setup() {
  // инициализируем последовательный порт (в отладочных целях):
  Serial.begin(115200);
  delay(10);
 
  dht.begin();
 
  // подключаемся к WiFi-сети:
  Serial.println();
  Serial.print("Connecting to ");  //  "Подключаемся к "
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");  
             //  "Подключение к WiFi выполнено"
 
  // запускаем веб-сервер:
  server.begin();
  Serial.println("Web server running. Waiting for the ESP IP...");
              // "Веб-сервер запущен. Ждем IP-адрес ESP..."
  delay(5000);
 
  // печатаем IP-адрес ESP:
  Serial.println(WiFi.localIP());
}
 
// этот блок будет запускаться снова и снова:
void loop() {
  // начинаем прослушку новых клиентов:
  WiFiClient client = server.available();
 
  if (client) {
    Serial.println("New client");  //  "Новый клиент"
    // создаем переменную типа «boolean»,
    // чтобы определить конец HTTP-запроса:
    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
       
        if (c == '\n' && blank_line) {
            // данные от датчика могут запаздывать на 2 секунды
            // (это очень медленный датчик):
            float h = dht.readHumidity();
            // считываем температуру в Цельсиях (по умолчанию):
            float t = dht.readTemperature();
            // считываем температуру в Фаренгейтах
            // (isFahrenheit = true):
            float f = dht.readTemperature(true);
            // проверяем, корректны ли считанные данные,
            // и если нет, то выходим и начинаем заново:
            if (isnan(h) || isnan(t) || isnan(f)) {
              Serial.println("Failed to read from DHT sensor!");
                          // "Не удалось прочитать
                          // данные от датчика DHT"
              strcpy(celsiusTemp,"Failed");
              strcpy(fahrenheitTemp, "Failed");
              strcpy(humidityTemp, "Failed");        
            }
            else{
              // рассчитываем градусы в Цельсиях и Фаренгейтах,
              // а также влажность:
              float hic = dht.computeHeatIndex(t, h, false);      
              dtostrf(hic, 6, 2, celsiusTemp);            
              float hif = dht.computeHeatIndex(f, h);
              dtostrf(hif, 6, 2, fahrenheitTemp);        
              dtostrf(h, 6, 2, humidityTemp);
 
              // все эти Serial.print() ниже можно удалить,
              // т.к. они для отладочных целей:
              Serial.print("Humidity: ");  //  "Влажность: "
              Serial.print(h);
              Serial.print(" %\t Temperature: ");  //  "Температура: "
              Serial.print(t);
              Serial.print(" *C ");
              Serial.print(f);
              Serial.print(" *F\t Heat index: ");
                             //  "Тепловой индекс: "
              Serial.print(hic);
              Serial.print(" *C ");
              Serial.print(hif);
              Serial.print(" *F");
              Serial.print("Humidity: ");  //  "Влажность: "
              Serial.print(h);
              Serial.print(" %\t Temperature: ");  //  "Температура: "
              Serial.print(t);
              Serial.print(" *C ");
              Serial.print(f);
              Serial.print(" *F\t Heat index: ");
                             //  "Тепловой индекс: "
              Serial.print(hic);
              Serial.print(" *C ");
              Serial.print(hif);
              Serial.println(" *F");
            }
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            client.println();
            // веб-страница, отображающая температуру и влажность:
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");
            client.println("<head></head><body><h1>ESP8266 - Temperature and Humidity</h1><h3>Temperature in Celsius: ");
            client.println(celsiusTemp);
            client.println("*C</h3><h3>Temperature in Fahrenheit: ");
            client.println(fahrenheitTemp);
            client.println("*F</h3><h3>Humidity: ");
            client.println(humidityTemp);
            client.println("%</h3><h3>");
            client.println("</body></html>");    
            break;
        }
        if (c == '\n') {
          // если обнаружен переход на новую строку:
          blank_line = true;
        }
        else if (c != '\r') {
          // если в текущей строчке найден символ:
          blank_line = false;
        }
      }
    }  
    // закрываем соединение с клиентом:
    delay(1);
    client.stop();
    Serial.println("Client disconnected.");
               //  "Клиент отключен."
  }
}

Вываливает это: Failed to read from DHT sensor!

Пробовал все бибилиотеки. Что делаю не так? Может датчик не рабочий?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

резистор между vcc и выходом датчика поставили?

ArtAlexis
Offline
Зарегистрирован: 18.06.2018

Нет. Это модуль уже с резистором. Или еще один нужен?

sadman41
Offline
Зарегистрирован: 19.10.2016

Подключите к обычной ардуине и узнаете - рабочий он или нет. Возможно, что библиотеки DHT-шки для ESP не рихтованы.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Интересно, с какой же частотой он читается? 

ArtAlexis
Offline
Зарегистрирован: 18.06.2018

Обычной нет, увы.

Еще варианты?

dmitron1036
Offline
Зарегистрирован: 10.01.2016

ардуинщики пошли....ардуины у них нет...

nik182
Онлайн
Зарегистрирован: 04.05.2015

У меня только одна из трёх библиотек заработала в связке DTH & ESP. И пин пришлось подбирать. С любым не работало.  Сейчас это 

#define DHTPIN 2    равно GPIO4

  

ArtAlexis
Offline
Зарегистрирован: 18.06.2018

nik182 пишет:

У меня только одна из трёх библиотек заработала в связке DTH & ESP. И пин пришлось подбирать. С любым не работало.  Сейчас это 

#define DHTPIN 2    равно GPIO4

  

Какая именно заработала?

У тебя ESP8266 Nodemcu ?

nik182
Онлайн
Зарегистрирован: 04.05.2015

Не помню. Скачивал с github по одной пока не заработало. Да именно Nodemcu. Уже полгода через blynk  пишет параметры квартиры. 

 

ArtAlexis
Offline
Зарегистрирован: 18.06.2018

nik182 пишет:

Не помню. Скачивал с github по одной пока не заработало. Да именно Nodemcu. Уже полгода через blynk  пишет параметры квартиры. 

 

Посмотри пожалуйста. Очень прошу. Задолбался бороться с этой бедой...

nik182
Онлайн
Зарегистрирован: 04.05.2015

Не помню. Но в ридми той,которая стоит в library написано:  You must have the following Arduino libraries installed to use this class:

 
- [Adafruit Unified Sensor Library](https://github.com/adafruit/Adafruit_Sensor
sadman41
Offline
Зарегистрирован: 19.10.2016

В файле library.properties должно быть ейное имя и версия

nik182
Онлайн
Зарегистрирован: 04.05.2015
name=DHT sensor library
version=1.3.0
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors
paragraph=Arduino library for DHT11, DHT22, etc Temp & Humidity Sensors
category=Sensors
architectures=* 
ArtAlexis
Offline
Зарегистрирован: 18.06.2018

Спасибо, но

Error reading temperature!
Error reading humidity!
Error reading temperature!
Error reading humidity!
 
Видимо нерабочий датчик...
zyberex
Offline
Зарегистрирован: 08.10.2018

А у меня esp с dht11 показывает Temperature = nan *C, humidity = nan

вот теперь голову ломаю как нормальное число получить.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Забей.  DHT11 годится лишь на то, чтобы стать звездой памойки. 

zyberex
Offline
Зарегистрирован: 08.10.2018

DHT22 брать сразу?, у людей как-то работает 11й

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

zyberex пишет:

DHT22 брать сразу?, у людей как-то работает 11й

в том то и дело, что работает "как то".  Вернее, делает вид, что работает. Температуре, в пределах +- 2 градуса верить еще можно (хотя я бы не стал), а с влажностью - полная беда. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

zyberex пишет:

DHT22 брать сразу?, у людей как-то работает 11й

Не далее как неделю назад по скайпу позвонил товарищ и говорит: твой код - говно, и не работает с DHT (заявлена поддержка DHT1* и DHT2*). Как так, говорю - работало ведь?

Короче: из трёх DHT22 два - в помойку, показывают для влажности всегда 100%. Касаешься кондёра на платке датчика - начинает чего-то там бормотать по-басурмански. Третий - завёлся, но с такими вводными - доверия ему нет, как завещал Борман.

Выпилил бы нахер поддержку DHT, да люди пользуются.

Вот такой вот толстый намёк.

zyberex
Offline
Зарегистрирован: 08.10.2018

Забавная история, а у меня на малине3 завелся таки DHT11

root@kali:~/Adafruit_Python_DHT/examples# sudo ./AdafruitDHT.py 11 6
Temp=29.0*  Humidity=62.0%
root@kali:~/Adafruit_Python_DHT/examples# sudo ./AdafruitDHT.py 11 6
Temp=14.0*  Humidity=160.0%
root@kali:~/Adafruit_Python_DHT/examples# sudo ./AdafruitDHT.py 11 6
Temp=29.0*  Humidity=63.0%
 
в реальности думаю 27 гр, влажность нечем другим замерить,
значения почему-то скачут то 14 гр то 29,странно,
но вопрос был в другом, в esp8266 пишет не температуру, а NAN
куда бы копнуть?
zyberex
Offline
Зарегистрирован: 08.10.2018

еще хотел спросить какой же датчик надежней брать, если 11 и 22 нет доверия?

ArtAlexis
Offline
Зарегистрирован: 18.06.2018

Отпишите меня от этой темы. Везде нажал отписаться все равно приходит.

sadman41
Offline
Зарегистрирован: 19.10.2016

Отписывайся пока приходят сообщения (на ссылки тыкай). Через несколько попыток все нормализуется. И галку не ставь под камментом.