라즈베리 파이에서 Maxim 1-Wire 센서와 DS2482 I2C 브리지로 온도 측정하기
라즈베리 파이에서 Maxim 1-Wire 센서와 DS2482 I2C 브리지로 온도 측정하기
정확한 온도 모니터링은 기후 제어부터 데이터 로깅까지 많은 라즈베리 파이 프로젝트에 필수적입니다. DS18B20 같은 Maxim Integrated 1-Wire 센서 제품군은 간단하고 핀 수가 적은 솔루션을 제공합니다. DS2482 1-Wire-to-I2C 브리지를 사용하면 단일 I2C 버스로 최대 10개의 센서를 연결할 수 있어 파이의 GPIO 점유를 최소화할 수 있습니다.
하드웨어 개요
- 라즈베리 파이 – I2C 버스가 있는 모든 모델 (예: Pi 2/3/4)
- DS2482‑2 – I2C상의 1-Wire 마스터, 주소 0x18
- Maxim 1-Wire 온도 센서 – 최대 10개, 각자 고유한 1-Wire 주소 보유
- 풀업 저항 – 1-Wire 데이터 라인에 4.7 kΩ (DS2482가 풀업을 처리하면 선택 사항)
소프트웨어 전제 조건
이 지침은 커널 소스를 사용할 수 있는 표준 라즈비안 설치를 가정합니다. 다음 변경 후 커널을 다시 빌드해야 합니다.
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);
장치를 추가한 후 커널을 다시 컴파일하고 설치합니다.
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;
}
최종 단계
- 새 커널로 다시 빌드하고 재부팅합니다.
- 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 브리지를 통해 최대 10개의 1-Wire 온도 센서를 안정적으로 읽을 수 있어 다중 센서 모니터링 프로젝트에 이상적입니다.
추가 자료