Hoy vamos a conectar el microcontrolador ESP32 al sensor de temperatura y humedad DHT11. Es un sensor clásico en IoT porque es muy barato (2€ con transporte incluido), porque es digital y no hay que realizar cálculos para transformar voltaje en medidas que si hay que realizar en los analógicos y aunque las medidas no son muy precisas (+/- 2ºC), no es algo que nos preocupe para el prototipado. Yo lo compré a AZ-Delivery (Alemania) ayer por la mañana, y esta mañana ya lo tengo en casa.

El sensor lleva incorporada la resistencia, por lo que no hay que preocuparse de eso. Tiene tres pines (señalados) en la plaquita:
- GND: va al pin de ground.
- DATA: va al pin 4 (en mi caso).
- VCC: va al pin de V o 5 voltios (en mi caso con un cable macho hembra porque el breadboard no da para más de anchura).

Este DHT11 dispone de una luz LED roja que nos indica que recibe corriente (algo de agradecer).
Vamos a instalar la librería para el DHT11. Para ello hacemos click en Programa - Incluir librería - Administrar Bibioteca:

Escribimos DHT y localizamos la librería DHT sensor library by Adafruit. Instalamos.

Pasamos al código de Arduino. En mi caso lo he bajado de la página web:
https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/
Ahí tenéis más detalles.
El código para el IDE de Arduino es:
// Extraído de ladyada en
// https://randomnerdtutorials.com/esp32-dht11-dht22-temperature-humidity-sensor-arduino-ide/
// por Juanjo Beunza.
Requiere las siguientes librerías:
- DHT Sensor
- Adafruit Unified Sensor
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println(F("DHTxx test!"));
dht.begin();
}
void loop() {
delay(2000); //Es un sensor lento, por lo que hay que darle tiempo.
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
Serial.print(F("Humedad: "));
Serial.print(h);
Serial.print(F("% Temperatura: "));
Serial.print(t);
Serial.println(F("°C "));
}
Compilamos y subimos (acuerdate del botón del BOOT en la placa ESP32).
Abrimos Monitor Serie. Comprobar que está en 9600 Baudios.
Y vemos la lectura del sensor:

TROUBLESHOOTING
En caso de que no te funcione, algunas causas frecuentes son:
1. Que los pines del DHT11 estén mal puestos.
Ten en cuenta que distintos fabricantes colocan los pines en distintas localizaciones, así que depende de tu DHT11. Fíjate bien por si está marcado en la placa. En general el central es para datos, y los laterales para GND y 5V. Prueba a cambiarlos y ver, no hay demasiadas combinaciones. Hasta donde yo sé, no es fácil "freir" el sensor con un error de estos.
2. Conflicto de librerías.
Si has estado jugando con varias librerias para el DHT11, puede que los comandos se solapen. Sugiero borres todas las librerías e instales de nuevo la adecuada.
Para borrar librerías vete a la carpeta de Arduino en tu ordenador, localiza librerías y dentro encontrarás carpetas con los nombres de todas las librerías que hayas instalado en el IDE de Arduino. Borra todas aquellas relacionadas con el DHT e instala de nuevo las indicadas en este post.
3. Que los baudes del Monitor Serie estén mal seleccionados. En este caso debería estar en 9600.
Esta plataforma será la base de la conexión de la ESP32 a la nube de Google. Más info en:
https://www.juanjobeunza.com/esp32-googlecloud/