リアルタイムで温度監視

S字フックを併用すればどこでも設置できます

はじめに

 ペットを飼育している部屋の温度や湿度をリアルタイムで計測してブラウザで閲覧できたら楽しいなと考えていました。基本的にはエアコンや赤外線ランプなどで温度管理しているつもりでいるのですが、各個体が動き回っている空間の温度や湿度がどうなっているのかはこれまで調べたことはありませんでした。せいぜい、余っている棒温度計でチラ見する程度でした。

 そこで、最近Arduinoの機能とWiFiモジュールとが一体になった、ESP8266チップを搭載した製品の存在を知りました。これと温度センサとを併用すれば、データをクラウドに転送することができそうです。データを視覚化するサービスとしてAmbientを知りましたので、これを活用すれば、温度や湿度をリアルタイムで把握できそうです(無料なのが驚きです)。

 温度センサは、I2C通信型のセンサのSHT31(Sensirion製)を選びました。理由は、(1) 小さい。(2) 16ビット値、などです(ただ、同類のセンサと比べると若干高い)。温度と湿度との1の位の数値は信頼できるであろうと考えました。

準備するもの

 今回の試作のために準備したものの一覧です。
 適度に小さく、追加工のしやすさから、100円ショップにあるプラ容器から選びました(ダイソーとかセリアとかCanDoとか巡って探しました。100円ショップの品揃えを侮るなかれ!)。
 USBケーブル(Type AとminiB)は、パソコンからスケッチをESPr WROOM-02に書き込むために使うものです。書き込みが終わり、パソコンが不要になったら、USBケーブルACアダプタを使って電気を供給し独立運用とします。

  • ESPr WROOM-02 (スイッチサイエンス)
  • SHT31温湿度センサ (秋月電子)
  • プラ容器 (セリア)
  • USBケーブル(Type Aとmini B)
  • USBケーブルACアダプタ (家電量販店)
  • 基板(サンハヤト ICB-88) (マルツ電子)
  • はんだごて
  • はんだ線
  • M3ねじとかスペーサとか
  • テーブルドリル (プロクソン製 No.28128)

下準備

  • ambientにユーザー登録し、チャンネルIDとwriteKeyを得る。
  • ESPr WROOM-02のMACアドレスを調べ、それをルーターに登録して通信できるようにする(ルーターにMAC制限かけている場合)。
  • SHT31センサのI2Cアドレスを確認する(デフォルトは0x44)
  • Arduino IDEのBoard ManagerにESPr WROOM-02の定義ファイルを読み込ませる。
  • セリアで買ってきたプラ容器に穴開け作業。
プラ容器に穴あけ作業完了後
実装完了
裏側

スケッチ

 全体の流れを書き出しました。シリアル通信に関わるところや、エラーチェックの部分は省いて記述しています。SHT31のスケッチは秋月電子で公開されているソースを流用させていただいています。
 ルーターのSSIDとパスワードは各自の設定に置き換えてください。また、channelIdとwritekeyとも、ambientのマイページで確認して転記してください。SHT31のI2Cアドレスはデフォルトのまま使用したので、0x44を使用しています。
 Ambientのルールで、一日に転送できるデータは3000点までだそうです。それを考慮して、1分毎にデータを転送するようにしました(データ点数は24時間で1440点)。
 グラフが描画されるページはデフォルトではクローズです。公開するように設定することもできるようです。

#include <ESP8266WiFi.h>
#include “AE_SHT31.h
#include <Wire.h>
#include “ambient.h”

const char* SSID = “○○○”;
const char* PASSWORD = “△△△”;
unsigned in channelId = ◎◎◎;
const char* writekey = “□□□”;

WiFiClient client;
AE_SHT31 sht31(0x44);
Ambient ambient;

void setup(){
Wire.begin(SDA, SCL); //空きポートを設定する
    WiFi.begin(SSID, PASSWORD);
SHT31.SoftReset();
SHT31.Heater(0);
}
void loop(){
    float temp, humid;

    SHT31.GetTempHum();

    temp = SHT31.Temprature();
    ambient.set(1, temp);

    humid = SHT31.Humidity();
    ambient.set(2, humidity);

    ambient.send();
    delay(60000);
}

いよいよブラウザで閲覧!

 Arduino IDEのシリアルモニタでデータが正しく出力されていれば、下に示すようにグラフが描画されています。結構簡単にできてしまいますので、様々なセンサを活用して気象データとかを収集することもできそうな感じです。
(2019年2月3日 記)

ブラウザで閲覧した状態

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です