[ESP32]デジタル温度センサー(KY-001/DS18B20) with Arduino IDE

ESP32

[ESP32]デジタル温度センサー(KY-001/DS18B20) with Arduino IDE

はじめに

DS18B20は、1wireインターフェースのデジタル温度センサーです。
すべてのデバイスに、64ビットのユニークなシリアルコードが付与されています。

KY-001 は、DS18B20 の温度センサーと抵抗・LEDが基板上に接続されています。

項目数値
電源電圧3V~5.5V
測定温度-55℃~125℃
インターフェース1-wire

KY-001 は、こちらのスターターキットの一部です。

開発環境

OS : Windows 11 Pro
ESP32:ESP-WROOM-32
統合開発環境 : Arduino IDE 2.3.2
Arduino core for the ESP32:2.0.17
使用ライブラリ:OneWire(2.3.8)/DallasTemperature(3.9.0)

使用パーツ

ESP32開発ボード(38Pin)

ESP32 Development Board ESP-32S NodeMCU-32S MICRO/TYPE-C Wireless Module WiFi+Bluetooth ESP-WROOM-32 IOT Expansion Board - AliExpress 502
Smarter Shopping, Better Living! Aliexpress.com

電子工作ステーション https://electronicwork.shop/items/64134541d91711003035a5a6

デジタル温度センサー (DS18B20/KY-001)

ジャンパーワイヤー(メスーメス)

センサーについている場合は、必要ありません。

電子工作ステーション https://electronicwork.shop/items/637f92415988dc5175f8a9ec

作業内容

配線図

KY-001 とは GPIO 23 を使用して接続します。
基板上に抵抗が既に接続されているため、抵抗を接続する必要はありません。
VCC は、3.3V/5V のどちらでも使用できます。5Vの方が安定するという情報があります。

KY-001ESP32開発ボード(38Pin)
GND
3.3V or 5.0V
SGPIO 23

ライブラリインストール

OneWire

1-wire インタフェースを使用するための、「OneWire」をインストールします。

DallasTemperature

DS18B20 との通信をするための、「DallasTemperature」をインストールします。

スケッチ作成

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

#define ONE_WIRE_BUS 23

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(115200);
  Serial.println("Dallas Temperature IC Control Library Demo");

  sensors.begin();
}

void loop(void)
{ 
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures();
  Serial.println("DONE");

  float tempC = sensors.getTempCByIndex(0);

  if(tempC != DEVICE_DISCONNECTED_C) 
  {
    Serial.print("Temperature for the device 1 (index 0) is: ");
    Serial.println(tempC);
  } 
  else
  {
    Serial.println("Error: Could not read temperature data");
  }

  delay(1000);
}
コード説明

使用するGPIOピンを設定します。

#define ONE_WIRE_BUS 23

使用するGPIOピンでライブラリを設定します。

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

ライブラリを初期化します。

  sensors.begin();

接続している全センサーから温度を取得しています。

  sensors.requestTemperatures();

装置番号0の温度を取得しています。
(今回はセンサー1つのため0を指定します。)

  float tempC = sensors.getTempCByIndex(0);
動作確認

動作させてみると、シリアルモニタに取得した値が表示されます。

摂氏(°C)で取得できています。

おわりに

DS18B20を使用した防水型温度センサーであれば、水温や地温を計測できます。

コメント

タイトルとURLをコピーしました