Hola gracias por leer mi pregunta. Estoy realizando un termostato con un ESP8266-01 con un sensor DHT22. El problema que tengo con este sensor es que para que me marque la temperatura tengo que desconectar su alimentación y volver a conectarlo ya que si no me mide la temperatura (nan).
El ESP y el sensor van a estar alimentados con una batería por lo que el ESP entra en modo sleep (tengo un cable soldado del reset a un pin del micro) por lo que cada vez que se reinicia tengo que estar desconectando y conectando la alimentación del sensor y no es práctico.
He probado con el sensor DHT11 y funciona correctamente pero no tiene tanta resolución como el DHT22.
#include <Adafruit_Sensor.h>
#include "DHT.h"
//#define DHTTYPE DHT22
#define DHTTYPE DHT11
const int DHTPin = 2;
DHT dht(DHTPin, DHTTYPE);
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define SLEEP_TIME 10
const char* ssid = "***"; //Indicamos el nombre de la red WiFi (SSID) a la que queremos conectarnos.
const char* password = "********"; //Indicamos la contraseña de de red WiFi
HTTPClient http;
float temperatura;
int val=0;
int t1=0;
int t2=0;
int i;
void setup()
{
dht.begin();
//pinMode(rele,OUTPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.printf("Conectando a la red: %s", WiFi.SSID().c_str());
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectada");
}
void loop()
{
if(WiFi.status() != WL_CONNECTED)
{
WiFi.begin(ssid, password);
delay(500);
t1=millis();
if((t1-t2)>=1000)
{
Serial.println("conectando");
t2=millis();
}
}
else
{
// t1=millis();
// if((t1-t2)>=15000)
// {
// Serial.println(t1-t2);
temperatura = dht.readTemperature();
http.begin("192.168.1.37", 80,(String("temperatura:"+String(temperatura)))); //Se manda petición
// Serial.println(String("temperatura:"+String(temperatura)));
//Serial.println(http.begin("192.168.1.37", 80,(String("temperatura:"+String(temperatura)))));
Serial.println(temperatura);
int httpCode1 = http.GET();
// t2=millis();
ESP.deepSleep(SLEEP_TIME * 1000000, WAKE_RF_DEFAULT);
// }
}
// if (millis() >= 10000)
// {ESP.deepSleep(SLEEP_TIME * 1000000, WAKE_RF_DEFAULT);}
}
¿Es posible que el sensor esté defectuoso?
Gracias.
UN saludo.