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.
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.
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:
- Placa ESP32 DOIT DEVKIT V1 – leer placas de desarrollo ESP32 probadas y comparadas
- Sensor de temperatura DS18B20 (en este ejemplo utilizamos 3 sensores)
- Resistencia de 4,7k ohmios
- Cables de puente
- tablero de circuitos
Puedes utilizar los enlaces anteriores o ir directamente MakerAdvisor.com/tools ¡Para encontrar todas las piezas para tus proyectos al mejor precio!
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).
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
- Haga clic aquí para descargar la biblioteca OneWire. Deberías tener una carpeta .zip en tus descargas.
- Descomprime eso .Cremallera carpeta y deberías recibir Maestro OneWire Carpeta
- Cambie el nombre de su carpeta de
Maestro OneWireA Un cable - mueve eso Un cable Carpeta a su instalación Arduino IDE Bibliotecas Carpeta
- Finalmente, vuelva a abrir su IDE de Arduino
Biblioteca de temperatura de Dallas
- Haga clic aquí para descargar la biblioteca DallasTemperature. Deberías tener una carpeta .zip en tus descargas.
- Descomprime eso .Cremallera carpeta y deberías recibir Maestro de la biblioteca de control de temperatura Arduino Carpeta
- Cambie el nombre de su carpeta de
Maestro de la biblioteca de control de temperatura ArduinoA Dallastemperatura - mueve eso DallastemperaturaCarpeta a su instalación Arduino IDE Bibliotecas Carpeta
- 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);
}
}
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):
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.
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);
}
Abra el monitor serie con una velocidad de baudios de 115200 y debería obtener algo similar.
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.
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:
- Comunica a través de un bus de comunicación de 1 cable.
- Rango de temperatura de funcionamiento: -55 °C a 125 °C.
- 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.
Qué interesante, me encantaría probarlo en mi proyecto de automatización del hogar.
¡Genial! Me parece una excelente idea para monitorear la temperatura en diferentes áreas de la casa. Seguro que es muy útil para controlar el clima de forma eficiente. ¡Gracias por compartir!