Medición de temperatura en Raspberry Pi con sensores 1-Wire Maxim y puente I2C DS2482
Medición de temperatura en Raspberry Pi con sensores 1-Wire Maxim y puente I2C DS2482
La monitorización precisa de temperatura es esencial en muchos proyectos con Raspberry Pi, desde control climático hasta registro de datos. La familia de sensores 1-Wire de Maxim Integrated, como el DS18B20, ofrece una solución simple y de bajo consumo de pines. Mediante el puente DS2482 de 1-Wire a I2C, puede conectar hasta diez sensores en un único bus I2C, manteniendo mínima la huella de GPIO de la Pi.
Visión general del hardware
- Raspberry Pi – cualquier modelo con bus I2C (p. ej., Pi 2/3/4)
- DS2482‑2 – maestro 1-Wire sobre I2C, dirección 0x18
- Sensores de temperatura Maxim 1-Wire – hasta 10 unidades, cada una con dirección 1-Wire única
- Resistencias pull-up – 4,7 kΩ en la línea de datos 1-Wire (opcional si el DS2482 gestiona los pull-ups)
Requisitos previos de software
Estas instrucciones asumen una instalación estándar de Raspbian con código fuente del kernel disponible. Será necesario recompilar el kernel tras realizar los siguientes cambios.
Paso 1 – Habilitar el DS2482 en el bus I2C
Modifique arch/arm/mach-bcm2708/bcm2708.c en el código fuente del kernel para registrar el DS2482 como dispositivo I2C. Añada la siguiente definición de dispositivo de plataforma y array de información de placa:
static struct platform_device bcm2708_bsc1_device = {
.name = "bcm2708_i2c",
.id = 1,
.num_resources = ARRAY_SIZE(bcm2708_bsc1_resources),
.resource = bcm2708_bsc1_resources,
};
static struct i2c_board_info __initdata pi_i2c_devs[] = {
{ I2C_BOARD_INFO("ds1307", 0x68)},
{ I2C_BOARD_INFO("ds2482", 0x18)},
};
...
bcm_register_device(&bcm2835_thermal_device);
i2c_register_board_info(1, pi_i2c_devs, ARRAY_SIZE(pi_i2c_devs));
Tras añadir el dispositivo, recompile e instale el kernel.
Paso 2 – Gestión de pull-ups 1-Wire en el kernel
Modifique drivers/w1/w1_io.c para permitir que el DS2482 controle la resistencia pull-up durante las conversiones. Reemplace la función w1_post_write con:
static void w1_post_write(struct w1_master *dev) {
if (dev->pullup_duration) {
if (dev->enable_pullup && dev->bus_master->set_pullup) {
dev->bus_master->set_pullup(dev->bus_master->data, 0);
msleep(dev->pullup_duration);
} else {
msleep(dev->pullup_duration);
}
dev->pullup_duration = 0;
}
}
Paso 3 – Añadir control de pull-up al controlador DS2482
En drivers/w1/masters/ds2842.c añada una función auxiliar que active el pull-up fuerte del DS2482 cuando se solicite un retardo:
static u8 ds2482_w1_set_pullup(void *data, int delay) {
struct ds2482_w1_chan *pchan = data;
struct ds2482_data *pdev = pchan->pdev;
u8 retval = 1;
u8 cfg;
if (delay) {
/* Asegurar que el bus está inactivo antes de cambiar configuración */
ds2482_wait_1wire_idle(pdev);
/* Habilitar tanto SPU como APU para pull-up fuerte */
retval = ds2482_send_cmd_data(pdev, DS2482_CMD_WRITE_CONFIG,
ds2482_calculate_config(DS2482_REG_CFG_SPU | DS2482_REG_CFG_APU));
ds2482_wait_1wire_idle(pdev);
}
return retval;
}
Pasos finales
- Recompile y reinicie la Pi con el nuevo kernel.
- Verifique que el DS2482 aparece bajo
/sys/bus/i2c/devices/1-0018. - Conecte sus sensores Maxim 1-Wire a la línea de datos del DS2482 (pin 1) y tierra.
- Compruebe que cada sensor aparece bajo
/sys/bus/w1/devices/y quecat /sys/bus/w1/devices/28‑xxxxxxxxxxxx/w1_slavedevuelve un valor de temperatura.
Con estos ajustes en el kernel, la Raspberry Pi puede leer fiablemente hasta diez sensores de temperatura 1-Wire a través de un único puente DS2482, ideal para proyectos de monitorización multi-sensor.
Recursos adicionales
- Maxim Integrated – Hoja de datos DS2482
- Raspberry Pi – Tutorial I2C
- eLinux – Configuración del kernel de Raspberry Pi
Proceso de manufactura
- Sistema de control de acceso integrado con QR, RFID y verificación de temperatura
- Construya un registrador de temperatura con Raspberry Pi y sensor I2C de 5 $
- Perfilado preciso de temperatura en Raspberry Pi con Python, SQLite y LabVIEW
- Conectar múltiples sensores DS18B20 1‑Wire a Raspberry Pi para monitorización precisa de temperatura
- Monitor de temperatura y humedad en red con Raspberry Pi – Guía DIY completa
- Cómo leer temperatura con un DS18B20 en Raspberry Pi 2
- Monitorización profesional de temperatura con Raspberry Pi y DS18B20
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Monitorización fluida de temperatura y humedad en Raspberry Pi con EzTemp
- Monitorización precisa de temperatura en armario de servidores con Raspberry Pi
- Raspberry Pi BMP085: Lecturas precisas de temperatura y presión vía I2C