Cómo conectar un sensor de temperatura DS1820 One‑Wire a Raspberry Pi usando GPIO
Monitorizar temperatura interior o exterior con una Raspberry Pi puede hacerse con una configuración mínima. Esta guía muestra cómo cablear un sensor DS18S20 (DS1820) 1‑Wire directamente a un pin GPIO, leer temperaturas en software y registrar los datos con RRDtool.
Raspberry Pi y 1‑Wire
El DS18S20, DS18B20 y DS1822 son sensores de temperatura 1‑Wire que caben en encapsulado TO‑92 y combinan sensor, ADC e interfaz serie. Aunque comparten el mismo pinout e interfaz software, difieren en coste y precisión – el DS18S20 ofrece precisión ±0,5 °C, el DS18B20 ±0,5 °C y el DS1822 ±0,5 °C también, pero este último es más barato.
Cada dispositivo tiene tres pines: Tierra (GND, pin 1), Datos (DQ, pin 2) y Alimentación (VDD, pin 3). Una alimentación parasitaria (3–5 V) permite alimentar el sensor únicamente desde la línea de datos usando una resistencia pull-up.
Solo una resistencia
Conecte el pin DQ del sensor al GPIO 4 de la Pi. Conecte GND a tierra de la Pi y VDD a GND, habilitando alimentación parasitaria. Coloque una resistencia pull-up de 4,7 kΩ entre 3,3 V y GPIO 4. Un pequeño breadboard o un header de ángulo recto mantiene el cableado ordenado y cabe dentro de la carcasa oficial de la Pi.
Controladores software 1‑Wire
En Raspbian (o cualquier distro basada en Debian) cargue los módulos del kernel con:
sudo modprobe w1-gpio pullup=1 sudo modprobe w1-therm
La opción pullup=1 indica al controlador que el sensor se alimenta a través de la resistencia pull-up. Tras cargar, cada sensor aparece como subdirectorio bajo /sys/bus/w1/devices. El nombre del directorio consiste en el código de familia y el identificador único de 64 bits del sensor: DS18S20/DS1820 usan código de familia 10, DS18B20 usa 28 y DS1822 usa 22.
Dentro de cada directorio está w1_slave, que contiene dos líneas. La primera muestra el volcado de registros brutos y una comprobación CRC. La segunda termina con t=xxxx, la temperatura en miligrados Celsius. Ejemplo:
cd /sys/bus/w1/devices cd 10-000801b5* cat w1_slave 0f 00 4b 46 ff ff 06 10 0c : crc=0c YES 0f 00 4b 46 ff ff 06 10 0c t=7375
El valor 7375 corresponde a 7,375 °C. Tenga en cuenta que la hoja de datos especifica precisión de ±0,5 °C, por lo que la temperatura real está dentro de ±0,5 °C de la lectura.
Para asegurar que los módulos carguen al arranque, añádalos a /etc/modules:
# /etc/modules w1-gpio pullup=1 w1-therm
Base de datos Round‑Robin (RRDtool)
Para almacenamiento a largo plazo y visualización, RRDtool es ideal. Instálelo con:
sudo apt-get install rrdtool python-rrdtool
Defina una base de datos que registre un valor cada 15 minutos y guarde agregados diarios durante diez años:
rrdtool create temperature.rrd --step 900 \ DS:temp0:GAUGE:1200:-40:80 \ DS:temp1:GAUGE:1200:-40:80 \ RRA:AVERAGE:0.5:1:960 \ RRA:MIN:0.5:96:3600 \ RRA:MAX:0.5:96:3600 \ RRA:AVERAGE:0.5:96:3600
Adquisición de datos con Python
A continuación se muestra un script mínimo en Python que lee w1_slave e inserta el valor en la base de datos RRDtool. Ajuste las rutas de sensores y nombre de archivo de base de datos según necesite.
import os
import rrdtool
W1_PATH = '/sys/bus/w1/devices'
DB_FILE = 'temperature.rrd'
def read_temp(sensor_id):
with open(f'{W1_PATH}/{sensor_id}/w1_slave') as f:
lines = f.readlines()
if lines[1].strip().endswith('YES'):
temp_milli = int(lines[1].strip().split('t=')[-1])
return temp_milli / 1000.0
return None
# Ejemplo para dos sensores
temps = {
'temp0': read_temp('10-000801b5'),
'temp1': read_temp('28-0000045e')
}
rrdtool.update(DB_FILE, ','.join(str(t) for t in temps.values()))
Ejecute el script periódicamente (p. ej., vía cron) para mantener la base de datos actualizada.
Proceso de manufactura
- Construya un registrador de temperatura con Raspberry Pi y sensor I2C de 5 $
- Conectar múltiples sensores DS18B20 1‑Wire a Raspberry Pi para monitorización precisa de temperatura
- Cómo leer temperatura con un DS18B20 en Raspberry Pi 2
- Monitorización profesional de temperatura con Raspberry Pi y DS18B20
- Medición de temperatura en Raspberry Pi con sensores 1-Wire Maxim y puente I2C DS2482
- Sensor infrarrojo TMP006 con Raspberry Pi: librería Python y guía de configuración
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Construya una estación meteorológica con Raspberry Pi que envíe datos diarios por email
- Monitorización precisa de temperatura en armario de servidores con Raspberry Pi
- Conexión del sensor ultrasónico HC‑SR04 a Raspberry Pi 3 – Guía completa
- Controle un LED con Sensor PIR de Movimiento en Raspberry Pi