enebular chainでサ○タを捕獲する作戦


この記事はenebular Advent Calendar 2019の1日目です。

素敵なクリスマスになるようにがんばって書きます。

enebular x クリスマス

最初にenebularときいて思いつくのは星雲鎖ですよね。
星雲鎖と書いてネビュラチェーン。
アンドロメダ瞬の必殺技ですね。

今回はサンタクロース捕獲装置としてenebular chainを作ってみました。

仕組み

侵入者に対してはやはり窓際対策が有効と思われます。

窓が開く → 警報

これで行きましょう。

システム概要

enebularはFirebaseやTwitter連携がカンタンという噂なので、その辺りを使ってみます。

  • enebular chainにM5StickCを取り付けて加速度を得ます。
  • 加速度から得た窓の開け閉め情報をコード(0,1)でFirebaseに送ります。
  • Firebaseの情報を定期的にenebularで取り寄せます。
  • 窓が開いている情報が得られたらTwitterに通知します。

Firebaseの設定

こちらの記事を参考にしました!
https://blog.enebular.com/firebase/m5stack-firebase-enebular-collaboration/

M5SticC

上記記事のFirebaseとM5Stackのやり取りの部分に加えて、M5StickCに搭載されている加速度センサMPU6886について記載してます。

窓が開いた場合にaccYが大きくなるようにしました。
accYがしきい値を越えた時にFirebaseのデータを書き換えることにしました。
*面倒なので時間で勝手に戻るようにしました。

#include <M5StickC.h>
#include <IOXhop_FirebaseESP32.h>
#include <WiFi.h>

#define WIFI_SSID "XXXXXXXX"
#define WIFI_PASSWORD "XXXXXXXX"

#define FIREBASE_DATABASE_URL "XXXXXXX"

float accX = 0;
float accY = 0;
float accZ = 0;
float gyroX = 0;
float gyroY = 0;
float gyroZ = 0;
float temp = 0;

void setup() {
  // put your setup code here, to run once:
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextSize(1);
  M5.Lcd.setCursor(40, 0);
  M5.Lcd.println("<<GUARD>>");
  M5.Lcd.setCursor(0, 15);
  M5.Lcd.println("  X       Y       Z");
  M5.MPU6886.Init();

    // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();

  // WiFi Connected
  Serial.println("\nWiFi Connected.");
  Serial.println(WiFi.localIP());
  M5.Lcd.println("WiFi Connected.");
  M5.Lcd.println("");

  Firebase.begin(FIREBASE_DATABASE_URL);
  Firebase.stream("/M5Stack/message", [](FirebaseStream stream) {
    String eventType = stream.getEvent();
    eventType.toLowerCase();

    Serial.print("event: ");
    Serial.println(eventType);
    if (eventType == "put") {
      String path = stream.getPath();
      String data = stream.getDataString();
      Serial.print("data: ");
      Serial.println(stream.getDataString());
    }
  });

  Firebase.setString("/M5Stack/message", "start");

}

int i = 0;

void loop() {
  M5.MPU6886.getAccelData(&accX,&accY,&accZ);
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.printf("%.2f   %.2f   %.2f",accX * 1000,accY * 1000,accZ * 1000);
  M5.Lcd.setCursor(140, 45);

  delay(100);

    if(accY*1000 > 400) {

    // Firebaseへ送信
    Firebase.setInt("/M5Stack/status", 0);

    delay(5000);

    // Firebaseへ送信
    Firebase.setInt("/M5Stack/status", 1);

    delay(1000);
  }

  }

enebular

Firebaseから来たコードにSwitchをフィルタ代わりにしてTwitterに繋ぎこみました。

FirebaseもTwitterも連携が超簡単でした!
なんかアカウント入れてログインするだけ、みたいな簡単さです。
*残念ながらTwitterはConfirmationメールが来なくて時間切れでした。。

enebular chain テスト

ドアが閉まっていると

accYが245くらい

ドアが開くと

accYが440くらい

窓の開け閉めを一往復するとデバッグ画面がcodeをキャッチ
*Twitterできなかったのでデバッグのみです。

enebular chainできました!

enebular x Firebase x M5StickC でサンタクロース侵入検出装置 enebular chain が完成しました。

enebular chain でサンタクロースの侵入にすぐに気づけますね!
侵入者とはいえサンタクロース、日頃の感謝を伝えるなり、お茶を差し入れるなり平和的なコミュニケーションを望みます。

まとめと振り返り

  • enebular で簡単に侵入者検出装置ができる!
  • enebular の連携はログインレベルで超簡単!Firebase使える!
  • M5StickC は小さいのに偉い!
  • ArduinoJsonのバージョン注意
  • Twitter連携はenebular側は簡単だけど、Twitter側のレスポンスがなんか、、、
  • Noodl使い忘れた!

Advent Calendar初参戦でしたが楽しいですね!
でもこのへんで許してください。

今年の6月にIoTをいじり始めて半年が経ちましたが、それこそ星雲のごとく多くの出会いに恵まれて大変充実した2019年でした。
みなさんありがとうございます。

こたつみかんより感謝をこめて
もりけん