DS18B20の概要

DS18B20は、デジタル温度センサーで、1-Wire通信方式を採用しています。
1本のデータ線で複数のセンサーを同時に扱えるため、複数点の温度を計測するのに非常に便利です。
防水タイプのプローブ型も多く販売されており、屋外や液体の温度測定にも使えます。

この記事では、複数のDS18B20を単一のESP32に接続して使う際の検証コードに付いて説明しています。

Amazonで購入できるDS18B20のモジュール例


ESP32との接続方法

DS18B20は1-Wire通信なので、複数のセンサーを並列接続しても、データ線は1本で済みます。
電源方式には「外部給電」と「寄生給電」の2種類がありますが、安定動作のため外部給電方式 (3本線接続) をおすすめします。

以下は例として GPIO4 をデータ線に利用する場合の配線表です。

DS18B20ピンESP32ピン備考
VCC (赤)3.3V電源
GND (黒)GNDGランド
DQ (黄)GPIO4データ線(10kΩプルアップ抵抗をVCCと接続)

※複数のDS18B20を接続する場合も、VCC、GND、DQを並列接続します。


必要なライブラリ

ESP32でDS18B20を使う場合、以下のライブラリが必要です。


サンプルコード

以下は、複数のDS18B20をESP32に接続したときに、すべてのセンサーから温度を取得する最小限のサンプルコードです。

#include <OneWire.h>
#include <DallasTemperature.h>

// DS18B20のデータ線を接続したGPIO番号
#define ONE_WIRE_BUS 4  

// OneWireバスの初期化
OneWire oneWire(ONE_WIRE_BUS);

// DallasTemperatureライブラリにOneWireバスを渡す
DallasTemperature sensors(&oneWire);

void setup() {
  // シリアルモニタ開始
  Serial.begin(115200);
  Serial.println("DS18B20 複数センサー温度計測開始");

  // センサー初期化
  sensors.begin();
  Serial.print("検出されたセンサー数: ");
  Serial.println(sensors.getDeviceCount());
}

void loop() {
  // 温度測定をリクエスト
  sensors.requestTemperatures();

  // 全センサーの数を取得
  int deviceCount = sensors.getDeviceCount();

  // 各センサーの温度を取得して出力
  for (int i = 0; i < deviceCount; i++) {
    float tempC = sensors.getTempCByIndex(i);  
    Serial.print("センサー ");
    Serial.print(i);
    Serial.print(" の温度: ");
    if (tempC == DEVICE_DISCONNECTED_C) {
      Serial.println("センサーが接続されていません");
    } else {
      Serial.print(tempC);
      Serial.println(" ℃");
    }
  }

  // 2秒待機
  delay(2000);
}

動作方法と出力サンプル

  1. Arduino IDEで上記のコードをESP32に書き込みます
  2. シリアルモニタを115200bpsで開きます
  3. 複数のDS18B20を同じデータ線に接続していれば、自動的にすべてのセンサーが検出されます

出力サンプル(例)

DS18B20 複数センサー温度計測開始
検出されたセンサー数: 3
センサー 0 の温度: 25.62 ℃
センサー 1 の温度: 26.18 ℃
センサー 2 の温度: 24.97 ℃

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です