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:
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:
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
Configurar en Platformio la plataforma a emplear eligiendo como dispositivo el ESP32 tal y como se resume en la siguiente tabla:
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:

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
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.
Importante: La simulaci贸n no di贸 como se esperaba.

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