C++
Arduino

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

More than 1 year has passed since last update.

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

背景

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

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

環境

マイコン:ESPr Developer
ESP-WROOM-02がwifiで通信が出来るESP-WROOM-02 Wi-Fiモジュール。にUSBと接続して電圧変換してくれる開発ボードです。

センサー:SHT31
-40℃~+125℃まで対応。0℃~90℃であれば±0.2℃で計測してくれる、、、らしい

統合開発環境:Aruduino

ログをアップデートするサイト:thingspeak
無料登録で、グラフ化、CSV出力できる

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

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

過程

thingspeakの準備

なにはともあれ、まずthingspeakに登録。

3.png

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

5.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/

14.png

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

7.png

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

9.png

10.png

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

11.png

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

12.png

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

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

振り返って

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

13.png