目的
先の記事(JAWS DAYS 2017 IoTハンズオン【後半】参加報告)で利用した気温センサーDS18B20をM5Stackに繋げて部屋の気温をパネルに表示させてみたので、その手順を示します。
準備
下記の道具を準備します。
- PC(Windows 10 Pro)
-
M5Stack BASIC
- USB-Cケーブル(M5Stack BASICに含まれる)
- ジャンパワイヤ オスーメス 3本(M5Stack BASICに含まれる)
- DS18B20
- 2.2kΩカーボン抵抗
- ブレッドボード
手順
1. Hello World を確認します。
Windows ではじめるM5Stack などを参考に Hello World のサンプルを動作確認します。ちなみに Hello World としてサンプルのテトリスを動作させてみました。
2. ライブラリ OneWire, DallasTemperature のインストール
Arduino IDE を起動し、ツール > ライブラリの管理を選択し、ライブラリマネージャの検索ウインドウからライブラリ OneWire, DallasTemperature の2つをインストールします。
3. コード作成および書き込み
Arduino IDE を起動し、下記のコードをコピペし、マイコンボードに書き込みます。コード自体はこちらの サイト にありました。
#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 というサイトにデータのアップロードを検討中(下記イメージ引用)