Error nan con sensor dht 22

Hola estoy intentando subir los valores de un sensor de temperatura dht 22 con un modulo wifi esp8266 generico el tema es que cuando lo subo a la pagina me da nan los valores y ya no se como convertir los floats a strings si alguien sabe se lo agradecería este es mi codigo:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Put your SSID & Password*/
const char* ssid = ;  // Enter SSID here
const char* password = ;  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
uint8_t DHTPin = 2; 
 int sensor;              
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                

float  Temperature;
float Humidity;
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(DHTPin, INPUT);

  dht.begin();              

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

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

}
void loop() {
  
  server.handleClient();
  
}

void handle_OnConnect() {
  Temperature = dht.readTemperature();
 Serial.print(Temperature );// Gets the values of the temperature
 Humidity = dht.readHumidity(); 
 Serial.print("Humidity: ");
 Serial.print(Humidity);
 delay(500);
 
   server.send(200, "application/json", SendJSON(Temperature,Humidity));
}

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

String SendHTML(float Temperaturestat,float Humiditystat){
  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 Weather Report</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 NodeMCU Weather Report</h1>\n";
  
  ptr +="<p>Temperature: ";
  ptr +=(int)Temperaturestat;
  ptr +="°C</p>";
  ptr +="<p>Humidity: ";
  ptr +=(int)Humiditystat;
  ptr +="%</p>";
  
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

String SendJSON(float Temperaturestat,float Humiditystat){

   String  Temperature = ""
    Temperature.concat(Temperaturestat);
    String  Humidity = ""
    Humidity.concat(umiditystat);


  return "{\"temperature\":" + String (Temperaturestat) +"\",\"Humidity\":" + String (Humiditystat) + "\"}";
}

¿Por consola que te muestra? ¿Las lecturas son correctas?

¿Por qué no usas isnan() para confirmar que las lecturas son correctas?

Al margen, veo un error en SendJSON()

Humidity.concat(umiditystat);

Lo correcto es

Humidity.concat(Humiditystat);

Saludos

PD: Para convertir float a String podés usar, por ej.

String sTemp = String(Temp);

Edito: Obviamente Temp es float.

Siempre viene bien pegar una mirada con Google :wink:

Probe para que me muestre las lecturas por consola serial pero me dan NAN pero esto solo me pasa cuando lo conecto con el modulo

Si en handle_OnConnect() en la consola muestra NAN es porque no está leyendo el sensor.

¿Por qué no subís el esquema de conexiones así vemos si viene por ese lado?

tendria que hacerlo en fritzing y subirlo porque mostrarlo por foto no creo que se entienda mucho.
Basicamente el modulo esta alimentado a 3.3v con conexion de rx y tx, el gpi0 esta en gnd
y el sensor dht 22 esta alimentado con 5 v el pin de daton tiene una resistencia de 4,7 khoms y esta conectado al pin 2 del arduino.

y la resistencia es de 4,7k

Perfecto, queda clarísimo.

Probá así

void handle_OnConnect() {
   Temperature = dht.readTemperature();
   Humidity = dht.readHumidity(); 

   server.send(200, "application/json", SendJSON(Temperature,Humidity));
}

Es más, yo quitaría todas las impresiones porque no se cómo le caen al módulo los mensajes que imprimes en el setup().
Otra alternativa sería usar SoftwareSerial para el módulo.

Edito: Viendo mejor el esquema, no puedes alimentar el módulo desde el arduino ya que solo entrega 50 mA como máximo y el módulo consume 80 mA como mínimo. Además es conveniente usar adaptadores de nivel para Rx y Tx.

Lo he probado y me sigue dando lo mismo y el otro tema es que cuando lo alimento con una fuente externa me da un error a la hora de subir el programa, la otra cosa es que habia visto que se podia usar sin necesidad de adaptador de nivel.

Te dije que es conveniente usar conversores porque en la hoja de datos no queda claro que los pines sean tolerantes a 5V solo por la resistencia que tienen en serie (de hecho dice que la tensión máxima que soportan es 3.6V) y, tal vez, a la larga se terminen "friendo".

Lo que haría es usar SoftwareSerial para manejar el ESP durante las pruebas y por Serial verificar por consola los datos que se van a enviar al ESP.
Una vez que todo funciona bien, vuelves a usar Serial solo para el ESP.

En cuanto a la alimentación, da por seguro que el arduino no soporta ese consumo, tienes que alimentar el ESP con otra fuente o poner un regulador de 3.3V desde el que alimentarlo, por rj. desde la salida de 5V del UNO.

Si te genera problemas al cargar el código (lo cual es lógico porque tienes el ESP colgado del Rx y Tx) , simplemente carga el código con el ESP desconectado.

bueno probare con eso , y como seria cargar el codigo con el sp desconectado sin alimentacion???

Quita los cables verde y amarillo del esquema y listo.

Es buena costumbre dividir tu proyecto en 3.
Primero pruebas el DHT con Arduino, usando el ejemplo de la librería que has elegido. Funciona entonces sigues
Segundo prueba el ESP01 comunicandose como Server HTML, funciona sigues
Luego miras como comunicar un ESP (cualquiera) a un arduino.
Acá te digo que puedes conectar el TX del ESP al pin RX de tu softwareSerial pero el TX del softwareSerial debe ir con alguna adaptador de niveles (divisor de tension, zener, transistor, etc) al pin RX del ESP01.
Compartir GND entre ambos.
Entonces con lo anterior funcionando pasas a la ultima situacion donde unes todo.
Antes no.