树莓派结合 Maxim 1-Wire 传感器与 DS2482 I2C 桥接器的多点温度测量
树莓派结合 Maxim 1-Wire 传感器与 DS2482 I2C 桥接器的多点温度测量
精准的温度监测是许多树莓派项目的核心需求,从环境控制到数据记录无不如此。Maxim Integrated 的 1-Wire 传感器家族(如 DS18B20)提供简洁、少引脚的解决方案。通过 DS2482 1-Wire 转 I2C 桥接器,可在单根 I2C 总线上挂载多达十个传感器,极大节省树莓派 GPIO 资源。
硬件概览
- 树莓派 – 任意带 I2C 总线的型号(如 Pi 2/3/4)
- DS2482‑2 – I2C 接口的 1-Wire 主控,地址 0x18
- Maxim 1-Wire 温度传感器 – 最多 10 个,每个拥有唯一 1-Wire 地址
- 上拉电阻 – 1-Wire 数据线上 4.7 kΩ(若 DS2482 内部已处理上拉则可选)
软件前置条件
本指南假设使用标准 Raspbian 且内核源码可用。你需要在完成以下修改后重新编译内核。
步骤 1 – 在 I2C 总线上注册 DS2482
修改内核源码中的 arch/arm/mach-bcm2708/bcm2708.c,将 DS2482 注册为 I2C 设备。添加以下平台设备定义和板级信息数组:
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));
添加设备后,重新编译并安装内核。
步骤 2 – 内核中处理 1-Wire 上拉
修改 drivers/w1/w1_io.c,允许 DS2482 在温度转换期间控制上拉电阻。替换 w1_post_write 函数:
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;
}
}
步骤 3 – 为 DS2482 驱动添加上拉控制
在 drivers/w1/masters/ds2482.c 中添加辅助函数,当请求延迟时激活 DS2482 的强上拉:
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) {
/* 修改配置前确保总线空闲 */
ds2482_wait_1wire_idle(pdev);
/* 同时启用 SPU 和 APU 以获得强上拉 */
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;
}
后续步骤
- 使用新内核重新构建并重启树莓派。
- 验证 DS2482 是否出现在
/sys/bus/i2c/devices/1-0018。 - 将 Maxim 1-Wire 传感器连接到 DS2482 数据线(引脚 1)和地线。
- 检查每个传感器是否出现在
/sys/bus/w1/devices/,且cat /sys/bus/w1/devices/28‑xxxxxxxxxxxx/w1_slave返回温度值。
完成这些内核调整后,树莓派可通过单个 DS2482 桥接器可靠读取多达十个 1-Wire 温度传感器,非常适合多点监测项目。
参考资源
制造工艺
- 集成二维码、RFID与体温验证的门禁控制系统
- 树莓派+$5 I²C传感器打造温度记录仪
- 树莓派温度画像:Python+SQLite+LabVIEW实战
- 树莓派多路DS18B20 1-Wire温度监测:接线与编程全指南
- 树莓派温湿度网络监测站DIY全指南
- 树莓派2上使用DS18B20读取温度完整指南
- 树莓派专业温度监测:基于 DS18B20 传感器的完整指南
- 树莓派与 Python 构建远程温度传感器:分步实战指南
- 树莓派配合 EzTemp 实现无缝温湿度监测
- 树莓派精准监测机柜温度:DS18B20 多点部署实战
- 树莓派 I2C 接口 BMP085:高精度温度与气压读取
- 树莓派 GPIO 直连 DS1820 单总线温度传感器指南