En teoría hay que conectar una resistencia pull-up entre Vcc y el pin DATA de unos 10K pero yo he realizado pruebas con y sin resistencia y el resultado es el mismo por lo que interpreto que el módulo ya trae incorporado dicha resistencia o que el pin de entrada del ESP8266 la lleva.
Con respecto a las librerías, en el menú Programa - Incluir Librería - Gestionar Librerías buscamos por DHT22 e instalamos la librería:
Esta librería puede ser utilizada tanto para el DHT11, DHT21 y DHT22.
Además, a partir de la versión 2.3.0 de esta librería es necesario instalar tambien la librería Adafruit Unified Sensor de la misma forma que la explicada anteriormente
Una vez instaladas ambas librerías vamos a por el código.
Incluimos la librería, definimos el pin del módulo ESP8266 por el que realizaremos la lectura (en este caso el Pin D1) y definimos el sensor de temperatura:
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT22
Declaramos una instancia de la librería que será usada por arduino para comunicarse con el sensor:
DHT dht(DHTPIN, DHTTYPE);
Para realizar la lectura de la humedad y la temperatura utilizamos variables tipo float (decimal) y utilizamos las sentencias:
float h = dht.readHumidity(); // Lee la humedad relativa %
float t = dht.readTemperature(); // Lee la temperatura ºC
*Nota: por defecto leemos el valor de la temperatura en grados Celsius. Si queremos leerlo en grados
Fahrenheit utilizaremos:
float t = dht.readTemperature(true); // Lee la temperatura ºF
Por último mostramos la lectura por el puerto serie. El código completo es el siguiente
#include "DHT.h"
#define DHTPIN 5 // Pin D1
#define DHTTYPE DHT22 // Seleccionamos el sensor
DHT dht(DHTPIN, DHTTYPE); //Creamos una variable
void setup() {
Serial.begin(9600); //Inicializamos el puerto serie
Serial.println("\nDHT22 test!");
dht.begin(); //Inicializamos el sensor
}
void loop() {
delay(2000); // Esperamos 2 segundos entre medidas
// La lectura de la temperatura y la humedad tarda unos 250 mseg.
float h = dht.readHumidity(); // Lee la humedad relativa
float t = dht.readTemperature(); // Lee la temperatura en grados Celsius (por defecto)
if (isnan(h) || isnan(t)) {
Serial.println("Error en la lectura del sensor!\n");
return;
}
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C \n");
}
Si queremos publicar estos datos en ThingSpeak el código sería el siguiente:
#include "DHT.h"
#include <ThingSpeak.h>
#include <ESP8266WiFi.h>
#define DHTPIN 5
#define DHTTYPE DHT22
const char* ssid = "SSID";
const char* password = "PASSWORD";
WiFiClient client;
unsigned long myChannelNumber = CHANNEL_ID;
const char* myWriteAPIKey = "API_KEY";
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
pinMode(15, OUTPUT);
digitalWrite(15, HIGH);
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println();
ThingSpeak.begin(client);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error en la lectura del sensor!\n");
return;
}
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C \n");
ThingSpeak.setField(1, (float)t);
ThingSpeak.setField(2, (float)h);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(20000);
}
Fuentes:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.