# Ejemplo 4

## Medición de temperatura y humedad usando el sensor DTH11 en el ESP32

### Descripción&#x20;

Este ejemplo muestra en el monitor serial se muestran las variables: humedad, temperatura (en °C y °F) e indice de calor (en °C y °F) medidas usando el sensor de temperatura y humedad (DTH11). Este ejemplo fue adaptado (copiado y modificado) de la pagina **ESP32 with DHT11/DHT22 Temperature and Humidity Sensor using Arduino IDE** (link) de [Random Nerd Tutorials](https://randomnerdtutorials.com/)

### Componentes

La siguiente tabla muestra los componentes principales del circuito a montar:

<table><thead><tr><th width="237.33333333333331">Componentes</th><th>Cantidad</th><th>Observaciones</th></tr></thead><tbody><tr><td>ESP32</td><td>1</td><td></td></tr><tr><td>DYH11 (sensor de temperatura y humedad)</td><td>1</td><td>Disponible en el modulo kit de Elegoo.</td></tr></tbody></table>

### Conexión

La conexión entre el sensor DTH11 se muestra en la siguiente tabla:

<table><thead><tr><th width="226">ESP32</th><th>DTH11</th></tr></thead><tbody><tr><td>GND</td><td>GND - (pin 3 - derecha)</td></tr><tr><td>3.3V</td><td>Vin (pin 2 - centro)</td></tr><tr><td>GPIO2</td><td>S (pin 1 - izquierda)</td></tr></tbody></table>

#### Esquematico

La siguiente figura muestra el esquematico:

<figure><img src="/files/BsYMGLMTgFxwc3QgrAdm" alt=""><figcaption></figcaption></figure>

#### Conexión

A continuación se muestra la conexión entre los componentes:

<figure><img src="/files/GTprAkG65yOk9NCDwsow" alt=""><figcaption></figcaption></figure>

#### Archivo Fritzing

{% file src="/files/7jnn1yxW6qDsDan9CLNr" %}

### Pasos previos si se usa platformio

1. Configurar en Platformio la plataforma a emplear eligiendo como dispositivo el **ESP32** tal y como se resume en la siguiente tabla:

<table><thead><tr><th width="234">Parametro</th><th>Valor</th></tr></thead><tbody><tr><td><strong>Name</strong></td><td>Nombre del proyecto (ESP32_Temp-DS18B20 para este ejemplo)</td></tr><tr><td><strong>Board</strong></td><td>NodeMCU-32S (Board disponible en el laboratorio)</td></tr><tr><td><strong>Framework</strong></td><td>Arduino (Es el que hemos manejado)</td></tr></tbody></table>

2. Agregue las librerias necesarias: En nuestro caso estamos empleando el sensor **DTH11** ([link](https://reference.arduino.cc/reference/en/libraries/dht-sensor-library/)) por lo que es necesario agregar la libreria **DHT sensor library** ([link](https://reference.arduino.cc/reference/en/libraries/dht-sensor-library/)). En la siguiente figura se muestra cuando se esta en la busqueda de la libreria:

<table><thead><tr><th width="208">Libreria</th><th>Observaciones</th></tr></thead><tbody><tr><td><strong>DHT sensor library</strong></td><td>Libreria de Arduino (Mantenida por Adafruit) para sensores de temperatura/humedad de la serie DTH (<a href="https://github.com/adafruit/DHT-sensor-library">link</a>). Un ejemplo muy util se encuentra en el siguiente documento de Adafruit (<a href="https://cdn-learn.adafruit.com/downloads/pdf/dht.pdf">link</a>)</td></tr><tr><td><strong>Adafruit Unified Sensor</strong></td><td></td></tr></tbody></table>

Una vez que se encuentra la libreria se procede a instalarla (**Add project dependency**).&#x20;

Finalmente una vez hecho lo anterior, si todo esta bien, el archivo **platform.ini** se vera de la siguiente forma:

```ini
; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

platform = espressif32
board = nodemcu-32s
framework = arduino
lib_deps = 
	adafruit/DHT sensor library@^1.4.4
	adafruit/Adafruit Unified Sensor@^1.1.9
```

3. Configurar el monitor serial.

### Programa (implementado en el IDE de Arduino)

A continuación se muestra el programa que se ejecuta en el ESP32, este el cual basicamente es el mismo programa implementado para el Arduino UNO pero empleando otros pines. Si este se hubiese implementado en platformio adicionalmente el **main.cpp** tendria incluida la libreria al principio:

```arduino
#include <Arduino.h>
```

En nuestro ejemplo como la implementación se hizo en el IDE de Arduino no se incluye esta libreria de modo que queda como se muestra a continuación.

```arduino
/* Librerias*/
#include "DHT.h"

/**
   Hardware Connections:

    ESP32 | DHT11
    -------------------
      3.3V  |   S (pin 1 - izquierda)
      2     |   Vin (pin 2 - centro)
      GND   |   GND (pin 3 - derecha)
*/

// Pines
#define DHTPIN 2 

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}
```

La documentación de la libreria empleada puede ser consultada en el suguiente repositorio ([link](https://github.com/adafruit/DHT-sensor-library)).

### Prueba de funcionamiento

Una vez que la aplicación ha sido correctamente compilada y descargada a la ESP32 se puede proceder a verificar su correcto funcionamiento. En nuestro caso, si todo esta bien, la salida que se mostrara en el monitor serial tendra la siguiente forma:

<figure><img src="https://github.com/UdeA-IoT/ensayo-sensores/raw/main/dth11/esp32/1/esp32_dht11-serial.png" alt=""><figcaption></figcaption></figure>

### Simulación

Para comprender el funcionamiento del programa, puede seguir el siguiente [link](https://wokwi.com/projects/357776308749643777). Tenga en cuenta que en la simulación el sensor empleado es el DTH22 (y no el DTH11) por lo que tanto el código como la conexión del simulador se adapto para este sensor. A continuación se muestra la figura asociada a la simulación:

<figure><img src="https://github.com/UdeA-IoT/ensayo-sensores/raw/main/dth11/esp32/1/esp32-dth22_sim.png" alt=""><figcaption></figcaption></figure>

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://udea-iot.gitbook.io/introduccion-al-iot/interaccion-con-el-mundo-fisico/ejemplos/esp32/ejemplo-4.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
