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

## 目的

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

## 準備

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

* PC（Windows 10 Pro）
* [M5Stack BASIC](https://amzn.to/2FpW1sm)
    * USB-Cケーブル（M5Stack BASICに含まれる）
    * ジャンパワイヤ オスーメス 3本（M5Stack BASICに含まれる）
* [DS18B20](https://amzn.to/2FqDlsG)
* [2.2kΩカーボン抵抗](https://amzn.to/2Fr8RXB)
* [ブレッドボード](https://amzn.to/2Frqsys)

## 手順

### 1. Hello World を確認します。

[Windows ではじめるM5Stack](https://qiita.com/xzr_tw/items/3363a500b4503e424d8b) などを参考に Hello World のサンプルを動作確認します。ちなみに Hello World としてサンプルのテトリスを動作させてみました。

![D2KZqvEVYAA6I2Y.jpg (115.1 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/abf850fc-de6f-4d81-bafd-99d79f75e13c.jpg)

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

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

<img width="586.5" alt="a10000.PNG (24.8 kB)" src="https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/639a75e8-f231-4c40-80b6-96418b5379d2.PNG">
<img width="587.25" alt="a10001.PNG (14.6 kB)" src="https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/ae13baec-7601-4344-95df-1d2c233d9b14.PNG">

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

Arduino IDE を起動し、下記のコードをコピペし、マイコンボードに書き込みます。コード自体はこちらの [サイト](http://forum.m5stack.com/topic/169/how-to-connect-ds18b20-which-pins-are-available) にありました。

```c: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ハンズオン【後半】参加報告](https://qiita.com/knyrc/items/fdb56338b3961a934de1)）の次の回路図を参考に次のように接続します。
<img width="252.8" alt="68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f38303339322f32303338396332652d363833612d626634612d313230302d6635356565393630346231302e706e67.png (170.2 kB)" src="https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/356501b4-926d-4ec8-82f9-af2581a0ffb3.png">

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

![YXG6YSDB.jpg (366.7 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/2abae0e1-29fd-4141-83bd-fbe8085ad526.jpg)

M5Stack を裏返した図は下記：

![m5_rear_no_s2.png (416.1 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/3e41956e-0f21-4da2-81de-16f389addc05.png)

### 5. 実行

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

![D2LB9YCUkAEVH-j.jpg (130.5 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/8f948281-61e8-415d-84d3-11164b805afb.jpg)

### 今後の課題

* センサーの時系列データをグラフ化したいので [こちら](https://ambidata.io/samples/m5stack/m5stack-arduino/) を参考に Ambient というサイトにデータのアップロードを検討中（下記イメージ引用）

![scsho1-768x490.jpg (39.8 kB)](https://img.esa.io/uploads/production/attachments/8793/2019/03/21/31597/21e806cb-948f-4826-b2a3-e8a9cb8e7b47.jpg)