ESP8265 + DHT22 Почему много ошибок при чтении данных?

Всем привет.
Подключил датчик DHT22 к ESP8265 и столкнулся с такой проблемой. Если считывать показания с датчика раз в секунду (timer_Read.setInterval(1000L, Send)), то все читается замечательно. Если же время между запросами к датчику увеличивать, установить например 2, 3 или 5 секунд (больше я не пробовал) то начинают появляться ошибки при чтении с датчика показаний (dht.readHumidity() и dht.readTemperature() возвращают значение nan). Установлена библиотека DHT sensor library by Adafruit 1.3.0. В документации к датчику указано, что читать данные надо не чаще чем раз в 2 секунды. Кто нибудь может подсказать в чем проблема?

SONOFF BASIC (ESP8265) + DHT22
Android 8.0.0
Blynk Server
Blynk Library version 0.4.10


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>

#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

#include <DHT.h>

#define BLYNK_PRINT Serial

#define DHTPIN 14
#define DHTTYPE DHT22

DHT dht(DHTPIN,DHTTYPE);

bool rele;
long startTimeInSecs;

char auth[] = "*********************";
char ssid[] = "********************";
char pass[] = "******************";

const int ESP_BUILTIN_LED = 13;
const int ESP_BUILTIN_RELEY = 12;

BlynkTimer timer_Connect, timer_Read;

BLYNK_WRITE(V1) {
  startTimeInSecs = param[0].asLong();
}

BLYNK_WRITE(V0)
{
  rele=param.asInt();
  digitalWrite(ESP_BUILTIN_RELEY, rele);
  
//  toggleRelay(rele);

}

void Send()
{
  float h=dht.readHumidity();
  float t=dht.readTemperature();

//  Serial.print("Влажность: ");
//  Serial.print(h);
//  Serial.print(" %\t");
//  Serial.print("Температура: ");
//  Serial.print(t);
//  Serial.print("\r\n");
  
    if (!isnan(h)) {  
      Blynk.virtualWrite(V2,h);
    }
    if (!isnan(t)) {      
      Blynk.virtualWrite(V3,t);
    }
}

BLYNK_CONNECTED() {
  Blynk.syncAll();
}


void reconnectBlynk() {
  if (!Blynk.connected()) {
    if (Blynk.connect()) {
      BLYNK_LOG("Reconnected");      
    } else {
      BLYNK_LOG("Not reconnected");    
    }
  }
}



void setup()
{
  Serial.begin(9600);
  
  timer_Connect.setInterval(30000L, reconnectBlynk);  // проверяем каждые 30 секунд, если все еще подключен к серверу 
  timer_Read.setInterval(1000L, Send);  // читаем данные каждую секунду, если все еще подключен к серверу 
  
//  Blynk.begin(auth, ssid, pass);
  Blynk.config(auth); // поэтому конфигурируем соединение
  Blynk.disconnect(); //разорвать соединение
  Blynk.connect();  // а потом пробуем уже конектиться

  // строчка для номера порта по умолчанию
  // можно вписать «8266»:
  // ArduinoOTA.setPort(8266);
 
  // строчка для названия хоста по умолчанию;
  // можно вписать «esp8266-[ID чипа]»:
   ArduinoOTA.setHostname("Esp8266-Ventilyator");
 
  // строчка для аутентификации
  // (по умолчанию никакой аутентификации не будет):
  // ArduinoOTA.setPassword((const char *)"123");
 
  ArduinoOTA.onStart([]() {
    Serial.println("Start");  //  "Начало OTA-апдейта"
    digitalWrite(ESP_BUILTIN_LED, HIGH);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");  //  "Завершение OTA-апдейта"
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    //  "Ошибка при аутентификации"
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    //  "Ошибка при начале OTA-апдейта"
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    //  "Ошибка при подключении"
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    //  "Ошибка при получении данных"
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
    //  "Ошибка при завершении OTA-апдейта"
  });
  
  ArduinoOTA.begin();
  dht.begin();
  
  pinMode(ESP_BUILTIN_LED, OUTPUT);
  pinMode(ESP_BUILTIN_RELEY, OUTPUT);
  
  Serial.println("Ready");  //  "Готово"
  Serial.print("IP address: ");  //  "IP-адрес: "
  Serial.println(WiFi.localIP());
}

void loop()
{


    timer_Connect.run();
    timer_Read.run();

//  Blynk.run();
    if (Blynk.connected()) {
      Blynk.run();
      ArduinoOTA.handle();
      digitalWrite(ESP_BUILTIN_LED, LOW);
    }
    else {
      digitalWrite(ESP_BUILTIN_LED, HIGH);
    }

}

Not sure it it is related to your issue… but you don’t really need two separate timers like this… a single one can have up to 16 seperate timer instances and each one can be named with a timer ID if needed (but not required)

This should ALWAYS run in the void loop() or you will lose OTA connectivity if Blynk server is not connected.

Thank you very much. I included your remarks in my sketch.

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