Ejemplo 3

Medici贸n de temperatura usando el sensor DS18B20 en el ESP32

Descripci贸n

En el siguiente ejemplo se hace uso del sensor de temperatura DS18B20 para medir la temperatura en grados centigrados. El valor obtenido se imprime usando el monitor serial.

Componentes

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

Componentes
Cantidad
Observaciones

ESP32

1

KY-001 Temperature Sensor Module (Landzo)

1

Para mas informaci贸n sobre este modulo consulte el siguiente link

Conexi贸n

La conexi贸n entre el sensor de temperatura y el ESP32 se muestra en la siguiente tabla:

ESP32
KY-001 Temperature Sensor Module (DS18B20)

GND

S

3.3

Vin

GPIO2

GND (-)

Esquematico

La siguiente figura muestra el esquematico:

Conexi贸n

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

Archivo Fritzing

Pasos previos

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

Parametro
Valor

Name

Nombre del proyecto (ESP32_Temp-DS18B20 para este ejemplo)

Board

NodeMCU-32S (Board disponible en el laboratorio)

Framework

Arduino (Es el que hemos manejado)

La siguiente figura muestra el resultado al realizar la configuraci贸n en platformio:

  1. Agregue las librerias necesarias: En nuestro caso estamos empleando el sensor DS18B20 single-bus digital temperature sensor (datasheet) por lo que es necesario agregar la libreria DallasTemperature. En la siguiente figura se muestra cuando se esta en la busqueda de la libreria:

Una vez que se encuentra la libreria se procede a instalarla (Add project dependency).

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

; 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

[env:nodemcu-32s]
platform = espressif32
board = nodemcu-32s
framework = arduino
lib_deps = milesburton/DallasTemperature@^3.11.0
  1. Configurar el monitor serial: Conecte el ESP32 a uno de los puertos USB de su maquina y verifique el nombre que el sistema operativo le asigno, en el caso de Windows puede hacer la consulta por el administrador de dispositivos tal y como se muestra en la siguiente figura:

Una vez hecho esto proceda a realizar la configuraci贸n del puerto serial en el platformio teniendo en cuenta este nombre de puerto (COM7) en nuestro caso y la velocidad a la cual desea establecer la comunicaci贸n entre el PC y el ESP32. La siguiente figura muestra esto:

El proximo paso consistira en codificar el programa que se descargara en el ESP32 en el archivo main.cpp (automaticamente generado al crear el proyecto). La siguiente figura muestra esto:

Programa

A continuaci贸n se muestra el programa que se ejecuta en el ESP32, el cual basicamente es el mismo programa implementado para el Arduino UNO pero empleando otros pines:

/* Librerias*/
#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>

/* Constantes */
#define SERIAL_SPEED 9600

/* Comunicacion */
// Data wire is plugged into pin 2 on the ESP32
#define ONE_WIRE_BUS 2

/* Entradas */

/* Salidas */
const int ledPin =  LED_BUILTIN; //(GPIO2 - D2)

/* Variables de la aplicacion */

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensor_DS18B20(&oneWire);

/* Funcion setup: Configuracion */
void setup(void) {
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");
  // Start up the library
  sensor_DS18B20.begin(); // IC Default 9 bit. If you have troubles consider 
                          // upping it 12. Ups the delay giving the IC more time 
                          // to process the temperature measurement
}


/* Funcion loop: Logica del programa */
void loop(void) { 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures... ");
  sensor_DS18B20.requestTemperatures(); // Send the command to get temperatures
  float T = sensor_DS18B20.getTempCByIndex(0);
  Serial.print("DONE ");

  Serial.print("Temperature for Device is: ");
  Serial.println(T); // Why "byIndex"? You can have more than one IC on the same bus. 
                     // 0 refers to the first IC on the wire
  delay(500);
}

La documentaci贸n de la libreria empleada puede ser consultada en el suguiente repositorio (link).

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:

Simulaci贸n

Para comprender el funcionamiento del programa, puede seguir el siguiente link donde hay una simulaci贸n del programa.

Para ir mas lejos

Si desea a煤n ir mas lejos, puede replicar el ejemplo disponible en la pagina de Random Nerd Tutorials: ESP32 DS18B20 Temperature Sensor with Arduino IDE (Single, Multiple, Web Server) (link)

Last updated