ESP32とプローブ型アナログ温度センサーでの温度測定 | そう備忘録

ESP32とプローブ型アナログ温度センサーでの温度測定

プローブ型アナログ温度センサー

プローブ型の防水温度センサー(DS18B20)と ESP32 で温度測定をして OLEDディスプレイに表示をした時の記事。

プローブ型の温度センサーの値をOLEDディスプレイに表示する

プローブとは測定部位に接触または挿入する針の事で狭い場所の温度を測定したい時などに使用される。

また今回購入した製品は防水仕様なので水槽の温度測定などにも利用可能だと思い、こちらのセンサーを購入した。

上記の写真では先端の金属部分に温度センサー(DS18B20)が格納されている。

※同型の商品が品切れのため、類似の商品のリンクに変更している。

主な仕様

センサー部分(DS18B20)の主な仕様は以下の通り。

  • 測定可能温度範囲:-55℃ ~ +125℃
  • 精度範囲:-10℃ ~ +85℃ の時 ± 0.5℃
  • 長さ:1m
  • プローブサイズ: 6 × 50 mm
  • 電源電圧範囲:3.0 V ~ 5.5V(今回は5Vで使用した)
  • 出力リード線:赤(VCC)、黄色(DATA / MCU )、黒(GND)

その他のパーツ

その他に準備した主なパーツは以下の通り。

ESP32-WROOM-32

温度センサーは ESP32-WROOM-32 に接続した。

ESP32-WROOM-32 モジュールは秋月電子、スイッチサイエンスなど様々な所で購入できるが、今回は下記のモジュールを使用した。

ピン配置が 30ピンの ESP32 DEVKIT V1のピン配置になっているので注意が必要だ。

OLED ディスプレイ

測定結果を表示する OLED ディスプレイ。

0.96 インチサイズで 128 × 64 Pixel、I2C接続が可能な OLEDディスプレイを用意した。

詳細なスペックについては以前の記事を参照して欲しい。

抵抗

10KΩ の抵抗を一つだけ用意した。

配線図

ESP32-WROOM-32、OLEDディスプレイ、DS18B20 の配線図は以下の通り。

配線図 DS18B20

開発環境

開発環境は以下の通り。

パソコン

DELL G7 15 7588

CPU:CoreTM i7-8750H

メモリ:16GB

OS

Windows 11 Home(64 Bit)

スケッチ開発

Arduino IDE Ver 1.8.19

事前準備

プログラミング環境は Arduino IDE を使用する。

Arduino IDE のダウンロードとインストールは以前の記事を参照して欲しい。

事前に必要なライブラリーのインストールを行う。

OneWire

こちらの GitHub から OneWire のライブラリーをダウンロードして Arduino IDE にインストールを行う。

GitHub にて Code ー> Download ZIP で適当なフォルダーにライブラリーをダウンロードしたら Arduino IDE を起動してスケッチ ー> ライブラリーをインクルード ー> .ZIP形式のライブラリーをインストール にてダウンロードした ZIPファイルを指定するとライブラリーがインストールされる。

OneWireライブラリ

Arduino-Temperature-Control-Library

同様の手順で GitHub から Arduino-Temperature-Control-Library もインストールする。

DallasTemperature というライブラリが表示されればインストールは成功だ。

DallasTemperature

SSD1306ライブラリ

ディスプレイ表示用のライブラリをインストールする。

用意した ディスプレイはディスプレイコントローラに SSD1306 を使用しているので Adafruit SSD1306 ライブラリーが使えるだろうと予想をつけて事前にインストールしておいた。

インストール手順は以前の記事を参照して欲しい。

スケッチ

約 10秒間隔で DS18B20より温度を測定して OLEDディスプレイに表示するスケッチは以下の通り。

/*
 * Created on Fri Apr 22 07:30:38 2022
 * 
 * プローブ型温度センサー(DS18B20)テストプログラム
 * 
 * @author: Souichirou Kikuchi
 * 
 */

#include <OneWire.h>
#include <DallasTemperature.h> // プローブ型アナログ温度センサー
#include <Wire.h> // I2C
#include <Adafruit_SSD1306.h> // OLEDディスプレイ

// Pin
constexpr short int SDA_PIN = 21;
constexpr short int SCL_PIN = 22;

// DS18B20 プローブ型アナログ温度センサー
constexpr short int DS18B20_PIN = 27;

// OLED Display
constexpr short int SCREEN_WIDTH = 128; // OLED display width, in pixels
constexpr short int SCREEN_HEIGHT = 64; // OLED display height, in pixels
constexpr short int OLED_RESET = 4; // Reset pin # (or -1 if sharing Arduino reset pin)

// I2C Address
#define SCREEN_ADDRESS 0x3C // OLED

OneWire oneWire(DS18B20_PIN);// oneWire instance
DallasTemperature a_temp_sensor(&oneWire); // プローブ型アナログ温度センサー
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // OLEDディスプレイ

void setup() {
    Serial.begin(115200);
    delay(20);

    Wire.begin(SDA_PIN, SCL_PIN); // I2C初期化

    // アナログセンター初期化
    a_temp_sensor.begin();    
    Serial.println(F("DS18B20 Initialized."));

    // OLEDディスプレイ初期化
    if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
        Serial.println(F("SSD1306 allocation failed"));
    }
    // OLEDディスプレイ初期設定
    display.setTextSize(2); // font size
    display.setTextColor(SSD1306_WHITE);
    display.display(); // 初期表示
    delay(2000);
}

void loop() {
    float an_temp;

    a_temp_sensor.requestTemperatures();
    an_temp = a_temp_sensor.getTempCByIndex(0);
    // Serial.println(an_temp);

    display.clearDisplay(); // Buffer Clear
    display.setCursor(20, 20); // X Y
    display.println(String(an_temp) + " c");
    display.display();
    delay(10000);
}

補足説明

初期

詳細はコードにコメントを入れているので参考にして欲しい。

10 ~ 13行目で必要なライブラリのインクルードを行っている。

15 ~ 28行目でピン番号や I2C のアドレスなど必要な定数の定義を行っている。

30 ~ 32行目で使用するライブラリの読み込みを行っている。

setup

SCL、SDAのピン番号を指定しての I2c の初期化、アナログ温度センサー、OLEDディスプレイの初期化を行っている。

loop

requestTemperatures で温度を呼び出して getTempCByIndex で温度を取得している。

両方とも先程インストールしたライブラリ(Arduino-Temperature-Control-Library) の DallasTemperature.cpp 中に定義されている関数だ。

動作結果

OLEDディスプレイに測定結果が表示されて約10秒間隔でリフレッシュされる。

OLEDディスプレイに測定結果が表示される

以上で今回の記事は終了とする。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。