Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
Точный мониторинг температуры необходим во многих проектах на Raspberry Pi — от климат-контроля до логирования данных. Семейство датчиков 1-Wire от Maxim Integrated, таких как DS18B20, предлагает простое решение с минимальным числом контактов. Использование моста DS2482 (1-Wire-to-I2C) позволяет подключить до десяти датчиков к одной шине I2C, сохраняя GPIO-контакты Pi свободными.
Обзор оборудования
- Raspberry Pi — любая модель с шиной I2C (Pi 2/3/4)
- DS2482‑2 — мастер 1-Wire на I2C, адрес 0x18
- Датчики температуры Maxim 1-Wire — до 10 штук, каждый с уникальным 1-Wire-адресом
- Подтягивающие резисторы — 4,7 кОм на линии данных 1-Wire (опционально, если DS2482 обеспечивает подтяжку)
Программные предварительные требования
Инструкции предполагают стандартную установку Raspbian с доступными исходными кодами ядра. Вам потребуется пересобрать ядро после внесения следующих изменений.
Шаг 1 — Включение DS2482 на шине I2C
Измените 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/ds2842.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;
}
Финальные шаги
- Пересоберите ядро и перезагрузите Pi.
- Убедитесь, что 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возвращает температуру.
С этими изменениями в ядре Raspberry Pi может надёжно опрашивать до десяти датчиков 1-Wire через один мост DS2482 — идеально для многодатчиковых проектов.
Дополнительные ресурсы
- Maxim Integrated — даташит DS2482
- Raspberry Pi — руководство по I2C
- eLinux — конфигурация ядра Raspberry Pi
Производственный процесс
- Интегрированная система контроля доступа с QR, RFID и верификацией температуры
- Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
- Точный температурный профиль Raspberry Pi с Python, SQLite и LabVIEW
- Подключение нескольких DS18B20 1-Wire датчиков к Raspberry Pi для точного мониторинга температуры
- Raspberry Pi сетевой монитор температуры и влажности — руководство по DIY сборке
- Как считывать температуру с DS18B20 на Raspberry Pi 2
- Профессиональный мониторинг температуры на Raspberry Pi с датчиком DS18B20
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Бесшовный мониторинг температуры и влажности на Raspberry Pi с EzTemp
- Точный мониторинг температуры в серверной на Raspberry Pi