ESPr DeveloperとSHT31を使い、温度,湿度のログをCSV出力する

部屋の温度,湿度のログをゆくゆく分析するという想定でCSV出力しました。

#背景#

ESPr DeveloperとSHT31使って、温度湿度のログをとるハンズオンに参加。[Ambient](https://ambidata.io/)上でグラフで見れるようになった(99.99%のコードをあらかじめ組んでもらいました、、、汗)。Ambient、登録だけですぐに使えてとても便利です。

文系出身としては大変な革新ですが、更にCSV出力して分析できる状態にしたい、、、、と思い、少し追加する事を決意

#環境#

マイコン：[ESPr Developer](https://www.switch-science.com/catalog/2500/)
ESP-WROOM-02がwifiで通信が出来る[ESP-WROOM-02 Wi-Fiモジュール](https://www.switch-science.com/catalog/2346/)。にUSBと接続して電圧変換してくれる開発ボードです。

センサー：[ＳＨＴ３１](http://akizukidenshi.com/catalog/g/gK-12125/)
－４０℃～＋１２５℃まで対応。０℃～９０℃であれば±０．２℃で計測してくれる、、、らしい

統合開発環境：Aruduino

ログをアップデートするサイト：[thingspeak](https://thingspeak.com/)
無料登録で、グラフ化、CSV出力できる

参加したハンズオン：
[IoTハンズオン基礎編 : LチカからCloud連携まで](https://iot-gym.connpass.com/event/71791/)
ブレットボードにマイコンをはめるスタートところから温度,湿度をクラウド上にアップロードするところまで、コードに抵抗のある私のような初心者にも親切に教えていただきました、、、大変オススメな勉強会です！

thingspeakに関して参考にしたURL：
http://arms22.blog91.fc2.com/blog-entry-619.html
thingspeakへのアップロード方法はほぼコチラの模倣をしました。コチラも大変分かりやすかったです。

#過程#

##thingspeakの準備##

なにはともあれ、まず[thingspeak](https://thingspeak.com/)に登録。

<img width="960" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/ef68b48b-9d88-67a7-8fa5-67b599e45881.png">

ChannelID：はのちのコーディングで使います。Nameを良しなに決めましょう。Fieldはグラフに表示させるタイトルです。温度、湿度、VCC電圧の3つのグラフを作りたいので、Fieldも1,2,3にそれぞれ書きます。英語にした意味は特にありません

<img width="960" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/27c839ca-9f1d-ded3-c851-286660a6bb41.png">

*APIKey*をクリックして表示される*Key*もコーディングで使います。

##ログ出力のコーディング##

ほぼ下記サイトの模倣です。

http://arms22.blog91.fc2.com/blog-entry-619.html


```
#include <ESP8266WiFi.h>
#include <ThingSpeak.h>
#include "AE_SHT31.h"

#define LED 13
#define SDA 4
#define SCL 5


#define PERIOD 30

// WiFi Connection
const char* ssid = "入力ください";
const char* password = "入力ください";

WiFiClient client;

// SHT31のアドレスを設定
AE_SHT31 SHT31 = AE_SHT31(0x45, SDA, SCL);

// Vcc電圧を読み込めるように設定
ADC_MODE(ADC_VCC);

// ThingSpeak設定
const unsigned long myChannelNumber = ここにChannel IDを書きます;
const char * myWriteAPIKey = "ここにKeyを書きます";

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

  Serial.println("");
  Serial.println("SHT31 + ThingSpeak Test");

  pinMode(LED, OUTPUT);

  WiFi.mode(WIFI_STA);         // 子機モードに設定
  WiFi.begin(ssid, password);  // 親機(Access Point)に接続する

  int i = 0;
  while (WiFi.status() != WL_CONNECTED) { // 接続が完了するまでLEDを点滅させる
    delay(500);

    digitalWrite(LED, i++ % 2);
    Serial.print(".");
  }
  Serial.println("");

  digitalWrite(LED, LOW);
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // SHT31をソフトリセット
  SHT31.SoftReset();
  // 内蔵ヒーター 0:OFF 1:ON
  SHT31.Heater(0);
}

void loop()
{
  float temperature, humidity, vcc;
  // SHT31から温湿度データを取得
  SHT31.GetTempHum();
  temperature = SHT31.Temperature();
  humidity = SHT31.Humidity();
  // Vcc取得
  vcc = ESP.getVcc() / 1000.;
  
  digitalWrite(LED, HIGH);
  digitalWrite(LED, LOW);

 //センサーデータアップロード開始
  ThingSpeak.begin(client);

 //フィードに値を設定
  ThingSpeak.setField(1, temperature);
  ThingSpeak.setField(2, humidity);
  ThingSpeak.setField(3, vcc);

 //ThingSpeakに送信
  Serial.println();
  Serial.print("Write fields...");
  Serial.println("");
  ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
  Serial.print("temperature: ");
  Serial.print(temperature);
  Serial.print("DegC,  humidity:  ");
  Serial.print(humidity);
  Serial.println(" %");
  Serial.print(vcc);
  Serial.println(" vcc");
  Serial.println("done");

  delay(PERIOD * 1000);
}


```

別途SHT31の設定が必要ですね。秋月電商さんのサイトにある*Arduinoスケッチ*をダウンロードして「AE_SHT31.cpp」と「AE_SHT31.h」を使います。
http://akizukidenshi.com/catalog/g/gK-12125/

<img width="960" alt="14.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/36a4816d-8706-d80e-341f-a9e29ad9e041.png">

マイコンボードに書き込むといい感じになりました。

<img width="960" alt="7.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/3be169dd-ce1d-4f21-f90b-72314f8fa8f9.png">

thingspeak上のグラフもいい感じに記録とってくれています。

<img width="960" alt="9.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/727f32d4-2358-aff2-7cea-e3c94be9d301.png">

<img width="960" alt="10.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/e05b5342-f6ad-cae3-88b9-f35798f27393.png">

そして目当てのCSV出力をしてみましょう。Data Exportをクリックします。CSVだけではなくJSONでも出力してくれるようですね。

<img width="960" alt="11.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/978624ba-0949-7eca-3166-ded5051f1e2e.png">

field1,2,3ともに出力してくれています。これをうまく使えば、どのタイミングで温度,湿度が上がったのか、その時に何がおきたのか？起きた事を再現して同じ数値の動きが見れるか、みたいな分析ができますね。

<img width="960" alt="12.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/d76ab1b1-5de5-db1f-ecf0-8a98102ccc32.png">

物流センターだと衛生管理のお約束として日々の温度,湿度を記録していると思います。作業者さんが時間になったら温度計,湿度計の前に立って数値をエクセルシートへパチパチと入力していると思いますが、こんな感じでログを残せたら人がやる必要がなくなりますね。決められた時間だけログとる事も出来るでしょうし。

JSONデータもうまく使えば自身のアプリケーションに組み込めると思います。

#振り返って#

本音を言うと、、、GoogleSpreadSheetにIFTTTのMakersを使って記録付けたかったのですが、MakerのTriggerをオリジナルにセットアップする事が出来ず、、、*Maker*と入力してもMakerのアイコンが出てこない、、有料になったのですしょうか、、、、どなたか教えてくださると嬉しいです。

<img width="960" alt="13.png" src="https://qiita-image-store.s3.amazonaws.com/0/201155/fc4e6641-e370-713d-8b20-a25d7d828754.png">