Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
Maxim 1-WireセンサーとDS2482 I2CブリッジによるRaspberry Pi温度測定
正確な温度監視は、気候制御からデータロギングまで、多くのRaspberry Piプロジェクトで不可欠です。DS18B20などのMaxim Integrated 1-Wireファミリセンサーは、シンプルでピン数の少ないソリューションを提供します。DS2482 1-Wire-I2Cブリッジを使用すると、最大10個のセンサーを単一のI2Cバスに接続でき、PiのGPIOフットプリントを最小限に抑えられます。
ハードウェア概要
- Raspberry Pi – I2Cバス搭載モデル(Pi 2/3/4など)
- DS2482‑2 – I2C上の1-Wireマスター、アドレス0x18
- Maxim 1-Wire温度センサー – 最大10台、各々固有の1-Wireアドレスを持つ
- プルアップ抵抗 – 1-Wireデータライン用4.7kΩ(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/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);
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を再起動。
/sys/bus/i2c/devices/1-0018にDS2482が現れることを確認。- Maxim 1-WireセンサーをDS2482データライン(ピン1)とグランドに接続。
- 各センサーが
/sys/bus/w1/devices/に表示され、cat /sys/bus/w1/devices/28-xxxxxxxxxxxx/w1_slaveで温度値が返ることを確認。
これらのカーネル調整により、Raspberry Piは単一のDS2482ブリッジを通じて最大10個の1-Wire温度センサーを確実に読み取れるようになり、マルチセンサー監視プロジェクトに最適です。
追加リソース
製造プロセス
- QR・RFID・体温検知統合アクセス制御システム(Raspberry Piベース)
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
- 複数DS18B20 1-WireセンサーをRaspberry Pi接続で精密温度監視
- Raspberry Pi温度・湿度ネットワークモニター – DIYセットアップガイド
- Raspberry Pi 2でDS18B20温度センサー読み取りガイド
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- EzTempでRaspberry Pi上の温度・湿度をシームレスに監視
- Raspberry Piでサーバークローゼットの温度を正確に監視
- Raspberry PiでBMP085:I2C経由の高精度温度・気圧測定