ESP32 con múltiples sensores de temperatura DS18B20

El ESP32 es una poderosa plataforma de desarrollo que permite la creación de proyectos IoT con múltiples funcionalidades. En este artículo, exploraremos cómo integrar varios sensores de temperatura DS18B20 con el ESP32 para obtener lecturas precisas y en tiempo real. Aprenderemos a conectar los sensores, programar el ESP32 y visualizar los datos obtenidos. ¡Sigue leyendo para descubrir cómo sacar el máximo provecho de esta combinación!

Esta guía muestra cómo leer la temperatura de múltiples sensores de temperatura DS18B20 con el ESP32 usando el IDE de Arduino. Le mostraremos cómo conectar los sensores en el mismo bus de datos al ESP32, instalaremos las bibliotecas necesarias y un boceto de ejemplo que puede usar en sus propios proyectos. Este tutorial también es compatible con las placas ESP8266 y Arduino.

ESP32 con múltiples sensores de temperatura DS18B20

Si desea crear un servidor web que muestre lecturas de múltiples sensores, siga el siguiente tutorial: Graficar las lecturas del sensor ESP32 (múltiples sensores DS18B20)

Quizás también quieras leer otras guías de DS18B20:

  • Sensor de temperatura ESP32 DS18B20 con Arduino IDE
  • Sensor de temperatura ESP8266 DS18B20 con Arduino IDE
  • Sensor de temperatura ESP32/ESP8266 DS18B20 con MicroPython
  • Sensor de temperatura DS18B20 con Arduino

Presentamos el sensor de temperatura DS18B20

El sensor de temperatura DS18B20 es un sensor de temperatura digital de 1 cable. Cada sensor tiene un número de serie único de 64 bits, lo que significa que puede utilizar varios sensores en el mismo bus de datos (es decir, varios sensores conectados al mismo GPIO). Esto es particularmente útil para proyectos de registro de datos y control de temperatura. El DS18B20 es un gran sensor porque es económico, preciso y muy fácil de usar.

La siguiente figura muestra la temperatura del DS18B20.

ESP32 con múltiples sensores de temperatura DS18B20

Nota: También hay uno Versión resistente al agua del sensor de temperatura DS18B20..

Estas son las especificaciones clave del sensor de temperatura DS18B20:

  • Se comunica a través de comunicación de bus de 1 cable
  • Rango de temperatura de funcionamiento: -55ºC a 125ºC
  • Precisión +/-0,5ºC (rango -10ºC a 85ºC)

De izquierda a derecha: el primer pin es Dimensionesel segundo es datos y el pin más a la derecha es VCC.

¿Dónde comprar el sensor de temperatura DS18B20?

Consulte los enlaces a continuación para comparar el precio del sensor de temperatura DS18B20 en diferentes tiendas:

Cableado de múltiples sensores DS18B20

Aquí hay una lista de las piezas que necesitará para seguir este ejemplo:

ESP32 con múltiples sensores de temperatura DS18B20

Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!

ESP32 con múltiples sensores de temperatura DS18B20

Al cablear el sensor de temperatura DS18B20, debe agregar una resistencia de 4,7 k ohmios entre VCC y la línea de datos. El siguiente esquema muestra un ejemplo de tres sensores (puede agregar más sensores si es necesario).

ESP32 con múltiples sensores de temperatura DS18B20

En el diagrama anterior, el lado redondo del sensor mira hacia atrás. La parte plana mira hacia adelante.

Preparando el IDE de Arduino

Existe un complemento para Arduino IDE que le permite programar el ESP32 usando el Arduino IDE y su lenguaje de programación. Siga uno de los siguientes tutoriales para preparar su IDE de Arduino para que funcione con ESP32 si aún no lo ha hecho.

  • ventanas Instrucciones – Placa ESP32 en Arduino IDE
  • mac y linux Instrucciones – Placa ESP32 en Arduino IDE

Instalación de bibliotecas

Antes de cargar el código, debe instalar dos bibliotecas en su IDE de Arduino. El Biblioteca OneWire de Paul Stoffregen y eso Biblioteca de temperatura de DallasSiga los siguientes pasos para instalar estas bibliotecas.

Biblioteca OneWire

  1. Haga clic aquí para descargar la biblioteca OneWire. Deberías tener una carpeta .zip en tus descargas.
  2. Descomprime eso .Cremallera carpeta y deberías recibir Maestro OneWire Carpeta
  3. Cambie el nombre de su carpeta de Maestro OneWire A Un cable
  4. mueve eso Un cable Carpeta a su instalación Arduino IDE Bibliotecas Carpeta
  5. Finalmente, vuelva a abrir su IDE de Arduino

Biblioteca de temperatura de Dallas

  1. Haga clic aquí para descargar la biblioteca DallasTemperature. Deberías tener una carpeta .zip en tus descargas.
  2. Descomprime eso .Cremallera carpeta y deberías recibir Maestro de la biblioteca de control de temperatura Arduino Carpeta
  3. Cambie el nombre de su carpeta de Maestro de la biblioteca de control de temperatura Arduino A Dallastemperatura
  4. mueve eso DallastemperaturaCarpeta a su instalación Arduino IDE Bibliotecas Carpeta
  5. Finalmente, vuelva a abrir su IDE de Arduino

Obtenga la dirección del sensor DS18B20

A cada sensor de temperatura DS18B20 se le asigna un número de serie. Primero necesitas encontrar este número para etiquetar cada sensor en consecuencia. Esto es necesario para que luego sepas de qué sensor estás leyendo la temperatura.

Cargue el siguiente código en el ESP32. Asegúrese de haber seleccionado la placa y el puerto COM correctos.

/*
 * Rui Santos 
 * Complete Project Details https://randomnerdtutorials.com
 */

#include <OneWire.h>

// Based on the OneWire library example

OneWire ds(4);  //data wire connected to GPIO 4

void setup(void) {
  Serial.begin(115200);
}

void loop(void) {
  byte i;
  byte addr[8];
  
  if (!ds.search(addr)) {
    Serial.println(" No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
  Serial.print(" ROM =");
  for (i = 0; i < 8; i++) {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
}

Ver código sin formato

Conecte un sensor a la vez para obtener su dirección (o agregue un sensor nuevo a la vez) para poder identificar cada sensor por su dirección. Luego puede agregar una etiqueta física a cada sensor. Abra el monitor serie con una velocidad de 9600 baudios y debería obtener algo como esto (pero con direcciones diferentes):

ESP32 con múltiples sensores de temperatura DS18B20

Desmarque «Desplazamiento automático”para que puedas copiar las direcciones. En nuestro caso tenemos las siguientes direcciones:

  • Sensor 1: 28FF 77 62 40 17 4 31
  • Sensor 2: 28 FF B4 6 33 17 3 4B
  • Sensor 3: 28FF A0 11 33 17 3 96

Obtener temperatura de múltiples sensores

Obtener la temperatura de varios sensores en el mismo bus de datos compartido es muy fácil.

ESP32 con múltiples sensores de temperatura DS18B20

El siguiente código de ejemplo lee la temperatura en Celsius y Fahrenheit de cada sensor e imprime los resultados en el monitor en serie.

/*
 * Rui Santos 
 * Complete Project Details https://randomnerdtutorials.com
 */

// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is connected to GPIO15
#define ONE_WIRE_BUS 15
// Setup a oneWire instance to communicate with a OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

DeviceAddress sensor1 = { 0x28, 0xFF, 0x77, 0x62, 0x40, 0x17, 0x4, 0x31 };
DeviceAddress sensor2 = { 0x28, 0xFF, 0xB4, 0x6, 0x33, 0x17, 0x3, 0x4B };
DeviceAddress sensor3= { 0x28, 0xFF, 0xA0, 0x11, 0x33, 0x17, 0x3, 0x96 };

void setup(void){
  Serial.begin(115200);
  sensors.begin();
}

void loop(void){ 
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  Serial.print("Sensor 1(*C): ");
  Serial.print(sensors.getTempC(sensor1)); 
  Serial.print(" Sensor 1(*F): ");
  Serial.println(sensors.getTempF(sensor1)); 
 
  Serial.print("Sensor 2(*C): ");
  Serial.print(sensors.getTempC(sensor2)); 
  Serial.print(" Sensor 2(*F): ");
  Serial.println(sensors.getTempF(sensor2)); 
  
  Serial.print("Sensor 3(*C): ");
  Serial.print(sensors.getTempC(sensor3)); 
  Serial.print(" Sensor 3(*F): ");
  Serial.println(sensors.getTempF(sensor3)); 
  
  delay(2000);
}

Ver código sin formato

Abra el monitor serie con una velocidad de baudios de 115200 y debería obtener algo similar.

ESP32 con múltiples sensores de temperatura DS18B20

Cómo funciona el código

Primero integre las bibliotecas requeridas:

#include <OneWire.h>
#include <DallasTemperature.h>

Cree las instancias necesarias para el sensor de temperatura. El sensor de temperatura está conectado a GPIO 15.

// Data wire is connected to ESP32 GPIO15
#define ONE_WIRE_BUS 15
// Setup a oneWire instance to communicate with a OneWire device
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature sensor 
DallasTemperature sensors(&oneWire);

Inicie la biblioteca de temperatura de Dallas para el sensor DS18B20.

sensors.begin();

Luego ingrese las direcciones previamente determinadas para cada sensor de temperatura. En nuestro caso tenemos lo siguiente:

DeviceAddress sensor1 = { 0x28, 0xFF, 0x77, 0x62, 0x40, 0x17, 0x4, 0x31 };
DeviceAddress sensor2 = { 0x28, 0xFF, 0xB4, 0x6, 0x33, 0x17, 0x3, 0x4B };
DeviceAddress sensor3= { 0x28, 0xFF, 0xA0, 0x11, 0x33, 0x17, 0x3, 0x96 };

En el configuración()inicialice una comunicación en serie e inicie la biblioteca de temperatura Dallas para el sensor DS18B20.

void setup(void){
  Serial.begin(115200);
  sensors.begin();
}

En el Cinta()solicitar las temperaturas tanto en Celsius como en Fahrenheit e imprimir los resultados en el monitor serie.

Primero se deben consultar las temperaturas con la siguiente línea de código:

sensors.requestTemperatures(); // Send the command to get temperatures

A continuación podrá consultar la temperatura a través de la dirección del sensor:

  • sensores.getTempC(SENSOR_ADDRESS) – solicita la temperatura en grados Celsius
  • sensores.getTempF(SENSOR_ADDRESS) – solicita la temperatura en Fahrenheit

Por ejemplo, para solicitar la temperatura en grados Celsius para el Sensor 1, use:

sensors.getTempC(sensor1)

En el cual Sensor1 es una variable que contiene la dirección del primer sensor.

Este es solo un ejemplo simple que muestra cómo usar el ESP32 para determinar la temperatura de múltiples sensores DS18B20. Este código también es compatible con las placas ESP8266 y Arduino.

Un paso mas alla

Obtener la temperatura de múltiples sensores de temperatura DS18B20 es particularmente útil en proyectos de monitoreo y control de temperatura, así como en el registro de datos. Aprenda cómo registrar los datos recopilados en una tarjeta microSD:

  • Temperatura de registro de datos ESP32 a la tarjeta MicroSD

También puedes enviar tus métricas a Node-RED a través de MQTT y mostrarlas en gráficos. Puedes encontrar un tutorial sobre este tema en el siguiente enlace:

  • ESP32 MQTT: publicar y suscribirse con Arduino IDE

Esperamos que este tutorial te haya resultado útil. Si te gusta ESP32 y te gustaría saber más sobre él, te recomendamos registrarte en Aprenda ESP32 con Arduino IDE Curso.

Gracias por leer.

Error 403 The request cannot be completed because you have exceeded your quota. : quotaExceeded




ESP32 con múltiples sensores de temperatura DS18B20

Introducción al Sensor de Temperatura DS18B20

El sensor de temperatura DS18B20 es un sensor digital de temperatura de 1 cable. Cada sensor tiene un número de serie único de 64 bits, lo que significa que puedes utilizar muchos sensores en el mismo bus de datos (esto significa muchos sensores conectados al mismo GPIO). Esto es especialmente útil para proyectos de registro de datos y control de temperatura. El DS18B20 es un gran sensor porque es económico, preciso y muy fácil de usar.

Especificaciones del Sensor DS18B20:

  1. Comunica a través de un bus de comunicación de 1 cable.
  2. Rango de temperatura de funcionamiento: -55 °C a 125 °C.
  3. Precisión de +/-0.5 °C (en el rango de -10 °C a 85 °C).

Cableado de Múltiples Sensores DS18B20

Para seguir este ejemplo, necesitas las siguientes piezas:

  • Placa ESP32 DOIT DEVKIT V1.
  • Sensores de temperatura DS18B20 (estamos utilizando 3 sensores en este ejemplo).
  • Resistencia de 4.7k Ohmios.
  • Cables puente.
  • Protoboard.

Preparación del IDE de Arduino

Antes de subir el código, necesitas instalar dos bibliotecas en tu IDE de Arduino. La biblioteca OneWire de Paul Stoffregen y la biblioteca Dallas Temperature.

Obteniendo la Dirección del Sensor DS18B20

Es necesario encontrar el número de serie asignado a cada sensor DS18B20 para poder identificar cada uno por su dirección. Abre el Monitor Serie a una velocidad de baudios de 9600 y deberías obtener las direcciones de cada sensor.

Obteniendo la Temperatura de Múltiples Sensores

El siguiente código muestra cómo obtener la temperatura en Celsius y Fahrenheit de cada sensor y mostrar los resultados en el Monitor Serie.

Cómo Funciona el Código

Primero, incluye las bibliotecas necesarias y crea las instancias para el sensor de temperatura. Luego, ingresa las direcciones de los sensores previamente encontrados. En el setup(), inicializa la comunicación serial y la biblioteca de temperatura de Dallas para el sensor DS18B20. En el loop(), solicita las temperaturas en Celsius y Fahrenheit de cada sensor y muestra los resultados en el Monitor Serie.

Conclusión

Este tutorial te ha mostrado cómo leer la temperatura de múltiples sensores DS18B20 con el ESP32 utilizando el IDE de Arduino. La posibilidad de monitorizar distintas temperaturas en un solo bus de datos es una herramienta útil para una variedad de proyectos. Esperamos que esta información te haya sido útil.


2 comentarios en «ESP32 con múltiples sensores de temperatura DS18B20»

Deja un comentario