Sensor DHT22 con ESP8266-01

Hola! Estoy tratando de realizar el proyecto del enlace: How to Show Arduino Sensor Data on a Web Page - Circuit Basics

Usando un sensor de Temperatura y Humedad (DHT22) con un módulo ESP8266-01 para tener los valores del sensor en una dirección IP, no obstante, no he logrado que el DHT me dé los valores que corresponden, por ahora estoy obteniendo un valor de temperatura y humedad de 2147483647. A diferencia del circuito del enlace anterior, decidí no hacer uso del divisor de tensión y alimentar directamente el DHT y el ESP por separado, el resto se mantiene igual. Alguna idea de qué puede estar sucediendo? Estoy siguiendo la guía y usando el código del link de abajo, y estoy usando la librería 2.5.0 para el ESP (board) y la 1.4.0 de Ardafruit para el DHT. También hice pruebas al sensor DHT para comprobar que funciona y sí trabaja.

Mi código es el siguiente:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <DHT.h>
//#include <Ardafruit_DHT_Particle.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

#define DHTPin 2 
#define DHTTYPE DHT22   
DHT dht(DHTPin, DHTTYPE);                

WiFiUDP ntpUDP;
const long utcOffsetInSeconds = -21600;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
unsigned long epochTime = timeClient.getEpochTime();
struct tm *ptm = gmtime ((time_t *)&epochTime);

const char* ssid = "MasterExploderReloaded";  
const char* password = "CarlosAndFer2010."; 

ESP8266WebServer server(80);

String SendHTML(float TemperatureWeb,float HumidityWeb, String TimeWeb, String DateWeb);
void handle_OnConnect();
void handle_NotFound();

float Temperature;
float Humidity;
String formattedTime;
String Date;
int Day;
int Month;
int Year;

void setup() {
  Serial.begin(115200); //115200 
  pinMode(DHTPin, INPUT);           

  Serial.println("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  } 
  Serial.println("");
  Serial.println("Connected to WiFi");
  Serial.print("IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);
  server.begin();
  dht.begin();
  timeClient.begin();
}
void loop() {
  
  server.handleClient();
  
}

void handle_OnConnect() {

  timeClient.update();
 
  unsigned long epochTime = timeClient.getEpochTime(); 
  String formattedTime = timeClient.getFormattedTime();
  
  struct tm *ptm = gmtime ((time_t *)&epochTime); 

  int monthDay = ptm->tm_mday;
  int currentMonth = ptm->tm_mon+1;
  int currentYear = ptm->tm_year+1900;
 
  formattedTime = timeClient.getFormattedTime(); 
  Date = String(currentYear) + "-" + String(currentMonth) + "-" + String(monthDay);
  Temperature = dht.readTemperature(); 
  Humidity = dht.readHumidity(); 
  server.send(200, "text/html", SendHTML(Temperature,Humidity,formattedTime,Date)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float TemperatureWeb,float HumidityWeb, String TimeWeb,String DateWeb){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP8266 Global Server</title>\n";

  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 Global Server</h1>\n";

  ptr +="<p>Date: ";
  ptr +=(String)DateWeb;
  ptr +="</p>";
  ptr +="<p>Time: ";
  ptr +=(String)TimeWeb;
  ptr +="</p>";
  ptr +="<p>Temperature: ";
  ptr +=(int)TemperatureWeb;
  ptr +="C</p>";
  ptr +="<p>Humidity: ";
  ptr +=(int)HumidityWeb;
  ptr +="%</p>";
  
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;

Qué podría estar ocasionando la mala lectura de valores? Gracias!

Verificá que la masa sea común a todas las placas.

Saludos

Ese proyecto para comenzar esta mal desde el punto de vista de la alimentación del ESP01!!

Jamas debes alimentar un ESP01 que consume 150 mA con los 3.3V del Arduino sea el que sea, porque vas a quemar el conversor del Arduino y tendras un UNO como pisapapeles.

Además si el proyecto es leer un DHT22 entonces usa solo el ESP01, ahora si tu proyecto es mas importante esta bien.

Debes usar un regulador LDO del tipo AMS1117 para entregar los 3.3V que require el ESP01.

EDITO: si tu UNO tiene un regulador LP2985 entonces si puedes usarlo pero con mucho cuidado porque es la corriente límite que puede entregar y para el ESP los 150mA son la corriente de trabajo.

Sin embargo este artículo potencia mi advertencia. Habla de picos de 430mA, asi que mejor prevenir antes que curar no?

loskar94:
… A diferencia del circuito del enlace anterior, decidí no hacer uso del divisor de tensión y alimentar directamente el DHT y el ESP por separado

@surbyte, creo que @loskar94 ya tuvo en cuenta lo que le comentaste (y por eso le sugerí que verifique que las masas estén unificadas)

Es correcta tu observación @gatul, igualmente me gustó lo que investigué sobre los picos del ESP01.
Lo uso mucho y toda información siempre sirve.

@loskar94 olvida el comentario y entonces bien hecho al alimentarlo por separado.

Yo tengo DHT alimentados con los 3.3V y funcionan, ahora no puedo decir sin problemas y hay un hilo donde hemos debatido el problema del DHTXX con el tiempo.
A muchos nos pasa que deja de funcionar o se cuelga, comienza a dar errores, entiéndase, no da valores mas que NAN.
Entonces la recomendación es reiniciarlo.
Encontramos que si el Arduino o ESP viene de estar dormido no debe consultarse al DHT antes de 2 segundos desde que se energizó el micro.

Las fallas ocurren al dia de estar funcionando en mi caso.
La solución es alimentarlo con un pin y si falla simplemente lo reinicias y listo.
No hemos encontrado solución porque tampoco nadie se puso en la tarea de resolverlo.

Como siempre tus aportes son impecables (no hay teoría que aporte más que lo que aporta la experiencia), solo que me pareció que "lo retabas" por algo que no había hecho. Jaja

Saludos

Hi,
En mis projectos yo siempre le anado un condensador de 10uf en paralelo con uno de .1ufd lo mas cercano a los 5 voltios.Tambien algunos recomiendan que se le anada una resistencia 10K a la salida de pin.Llevo mas de 5 anos usando el DTH22 y nunca he tenido problemas con ellos. Los uso en mis relojes para saber la humedad en la casa y asi hacer cambios en el aire acondicionado para mantener una humedad dentro de 50 a 60. Las especificaciones no menciona el uso de la resistencia pero tampoco menciona cual es el circuito de salida del sensor. Si hacen un google veran que la mayoria le anaden la resistencia.Adjunto una tutoria de como conectar el sensor.Tambien explica que la salida del modulo es tipo SDA por lo tanto require de una resistencia de pullup.

link:https://www.waveshare.com/wiki/DHT22_Temperature-Humidity_Sensor

olo que me pareció que "lo retabas" por algo que no había hecho.

Es que pensé que estaba conectando como se veía en el esquema.
Leo y me asusté por eso la forma de enfatizar el hecho de no usar esos 3.3V para alimentar un ESP01.
Pero hay casos en que si se puede.
Los arduinos han cambiado.