ESP32とプローブ型アナログ温度センサーでの温度測定
Contents
プローブ型アナログ温度センサー
プローブ型の防水温度センサー(DS18B20)と ESP32 で温度測定をして 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 の配線図は以下の通り。
開発環境
開発環境は以下の通り。
パソコン | 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ファイルを指定するとライブラリーがインストールされる。
Arduino-Temperature-Control-Library
同様の手順で GitHub から Arduino-Temperature-Control-Library もインストールする。
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秒間隔でリフレッシュされる。
以上で今回の記事は終了とする。
この記事が何処かで誰かの役に立つことを願っている。
尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。
最近のコメント