M5Stackに温度センサーDS18B20を繋げて気温(℃ および F)を取得する


目的

先の記事(JAWS DAYS 2017 IoTハンズオン【後半】参加報告)で利用した気温センサーDS18B20をM5Stackに繋げて部屋の気温をパネルに表示させてみたので、その手順を示します。

準備

下記の道具を準備します。

手順

1. Hello World を確認します。

Windows ではじめるM5Stack などを参考に Hello World のサンプルを動作確認します。ちなみに Hello World としてサンプルのテトリスを動作させてみました。

2. ライブラリ OneWire, DallasTemperature のインストール

Arduino IDE を起動し、ツール > ライブラリの管理を選択し、ライブラリマネージャの検索ウインドウからライブラリ OneWire, DallasTemperature の2つをインストールします。


3. コード作成および書き込み

Arduino IDE を起動し、下記のコードをコピペし、マイコンボードに書き込みます。コード自体はこちらの サイト にありました。

temperature.ino
#include <M5Stack.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2 // DS18B20 on arduino pin2 corresponds to D4 on physical board

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

void setup() {
  M5.begin();
  M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  M5.Lcd.setTextSize(2);
}

void loop() {
  float celsius;
  float fahrenheit;

  DS18B20.begin();
  int count = DS18B20.getDS18Count();

  //M5.Lcd.clear();
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.print("Devices found: ");
  M5.Lcd.println(count);

  if (count > 0) {

    DS18B20.requestTemperatures();

    for (int i = 0; i < count; i++) {
      celsius = DS18B20.getTempCByIndex(i);
      fahrenheit = celsius * 1.8 + 32.0;

      celsius = round(celsius);
      fahrenheit = round(fahrenheit);

      M5.Lcd.print("Device ");
      M5.Lcd.print(i);
      M5.Lcd.print(": ");
      M5.Lcd.print(celsius, 0);
      M5.Lcd.print( "C / ");
      M5.Lcd.print(fahrenheit, 0);
      M5.Lcd.println("F");
    }
  }
  delay(2000);
}

上記コンパイル時のエラーなければ書き込み成功です。

4. 温度センサーとM5Stackの接続

先の記事(JAWS DAYS 2017 IoTハンズオン【後半】参加報告)の次の回路図を参考に次のように接続します。

写真のようにM5Stack を裏返して, M5Stack 右下の G を青色ジャンパワイヤ, 右の G2 を黄色ジャンパワイヤ, 右 3V3 を赤色ジャンパワイヤに接続します。

M5Stack を裏返した図は下記:

5. 実行

接続すると、温度センサーのデータが M5Stack に送信され、前面のパネルに温度(℃およびF)が表示されます。パネルの表示から部屋の温度が 21℃/70F であることがわかります。

今後の課題

  • センサーの時系列データをグラフ化したいので こちら を参考に Ambient というサイトにデータのアップロードを検討中(下記イメージ引用)