8.9 Blynkを利用した侵入通知システム

このプロジェクトでは、PIRモーションセンサー(HC-SR501)を使用したシンプルな自宅侵入検出システムを紹介します。 Blynkアプリを通じてシステムを「外出」モードに設定すると、PIRセンサーが動きを監視します。 検出された動きはBlynkアプリに通知を送り、ユーザーに潜在的な侵入を警告します。

必要な部品

このプロジェクトでは、以下のコンポーネントが必要です。

全てのキットを購入することは非常に便利です。リンクはこちらです:

名前

このキットのアイテム

リンク

ESP32 Starter Kit

320+

ESP32 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

ESP32 WROOM 32E

BUY

ESP32カメラ拡張ボード

-

ジャンパーワイヤ

BUY

PIR動きセンサーモジュール

BUY

1. 回路組立

../../_images/iot_9_blynk_bb.png

2. Blynk設定

2.1 Blynkの初期化

  1. BLYNK にアクセスし、 START FREE を選択します。

    ../../_images/09_blynk_access.png
  2. メールアドレスを入力して登録プロセスを開始します。

    ../../_images/09_blynk_sign_in.png
  3. メールで登録を確認します。

    ../../_images/09_blynk_password.png
  4. 確認後、 Blynk Tour が表示されます。「スキップ」を選択することをおすすめします。 Quick Start も表示された場合は、これもスキップすることを検討してください。

    ../../_images/09_blynk_tour.png

2.2 テンプレートの作成

  1. Blynkでテンプレートを作成します。次の指示に従って Intrusion Alert System テンプレートを作成します。

    ../../_images/09_create_template_1_shadow.png
  2. テンプレートに名前を割り当て、ハードウェアを ESP32 として選択し、 Connection TypeWiFi として選択し、 Done を選択します。

    ../../_images/09_create_template_2_shadow.png

2.3 データストリームの生成

設定したテンプレートを開き、2つのデータストリームを作成しましょう。

  1. New Datastream をクリックします。

    ../../_images/09_blynk_new_datastream.png
  2. ポップアップで Virtual Pin を選択します。

    ../../_images/09_blynk_datastream_virtual.png
  3. Virtual Pin V0AwayMode と名付けます。 DATA TYPEInteger とし、 MINMAX の値を 01 に設定します。

    ../../_images/09_create_template_shadow.png
  4. 同様に、別の Virtual Pin データストリームを作成します。 Current Status と名付け、 DATA TYPEString に設定します。

    ../../_images/09_datastream_1_shadow.png

2.4 イベントの設定

次に、侵入が検出された場合にメール通知を送信するイベントを設定します。

  1. Add New Event をクリックします。

    ../../_images/09_blynk_event_add.png
  2. イベントの名前と特定のコードを定義します。 TYPE には Warning を選択し、イベント発生時に送信されるメールの短い説明を書きます。通知の頻度も調整できます。

    注釈

    EVENT CODEintrusion_detected として設定されていることを確認してください。これはコードで事前に定義されているため、変更がある場合はコードも調整する必要があります。

    ../../_images/09_event_1_shadow.png
  3. Notifications セクションに移動して通知をオンにし、メールの詳細を設定します。

    ../../_images/09_event_2_shadow.png

2.5 Webダッシュボードの微調整

侵入アラートシステムと Web Dashboard が完璧に連動するようにすることが重要です。

  1. Switch widgetLabel widgetWeb Dashboard にドラッグ&ドロップします。

    ../../_images/09_web_dashboard_1_shadow.png
  2. ウィジェット上にカーソルを合わせると、3つのアイコンが表示されます。設定アイコンを使用してウィジェットのプロパティを調整します。

    ../../_images/09_blynk_dashboard_set.png
  3. Switch widget の設定で、 DatastreamAwayMode(V0) に設定します。 ONLABELOFFLABEL にそれぞれ 「away」「home」 を表示するように設定します。

    ../../_images/09_web_dashboard_2_shadow.png
  4. Label widget の設定で、 DatastreamCurrent Status(V1) に設定します。

    ../../_images/09_web_dashboard_3_shadow.png

2.6 テンプレートの保存

最後に、テンプレートを保存するのを忘れないでください。

../../_images/09_save_template_shadow.png

2.7 デバイスの作成

  1. 新しいデバイスを作成する時が来ました。

    ../../_images/09_blynk_device_new.png
  2. From template をクリックして新しいセットアップを開始します。

    ../../_images/09_blynk_device_template.png
  3. 次に、 Intrusion Alert System テンプレートを選択し、 Create をクリックします。

    ../../_images/09_blynk_device_template2.png
  4. ここでは、 Template IDDevice NameAuthToken が表示されます。これらをコードにコピーして、ESP32がBlynkと連携できるようにします。

    ../../_images/09_blynk_device_code.png

3. コードの実行

  1. コードを実行する前に、Arduino IDEの Library Manager から Blynk ライブラリをインストールしてください。

    ../../_images/09_blynk_add_library.png
  2. iot_9_intrusion_alert_system.ino ファイルを開きます。このファイルは、 esp32-starter-kit-main\c\codes\iot_9_intrusion_alert_system ディレクトリ内にあります。内容をArduino IDEにコピーすることもできます。

  3. BLYNK_TEMPLATE_IDBLYNK_TEMPLATE_NAMEBLYNK_AUTH_TOKEN のプレースホルダーを独自のIDに置き換えてください。

    #define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
    
  4. また、WiFiネットワークの ssidpassword を入力する必要があります。

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  5. 正しいボード(ESP32 Dev Module)とポートを選択し、 Upload ボタンをクリックしてください。

  6. シリアルモニターを開き(ボーレートを115200に設定)、成功した接続メッセージが表示されるのを待ちます。

    ../../_images/09_blynk_upload_code.png
  7. 接続に成功したら、Blynkでスイッチをアクティブにすると、PIRモジュールの監視が開始されます。動きが検出されると(状態が1になる)、"誰かがここにいる!"と表示され、あなたのメールにアラートが送信されます。

    ../../_images/09_blynk_code_alarm.png

4. コードの説明

  1. 設定とライブラリ

    ここでは、Blynkの定数と資格情報を設定します。また、ESP32とBlynkに必要なライブラリを含めます。

    /* Comment this out to disable prints and save space */
    #define BLYNK_PRINT Serial
    
    #define BLYNK_TEMPLATE_ID "xxxxxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
    #include <WiFi.h>
    #include <WiFiClient.h>
    #include <BlynkSimpleEsp32.h>
    
  2. WiFi設定

    あなたのWiFiの資格情報を入力してください。

    char ssid[] = "your_ssid";
    char pass[] = "your_password";
    
  3. PIRセンサー設定

    PIRセンサーが接続されているピンを設定し、状態変数を初期化します。

    const int sensorPin = 14;
    int state = 0;
    int awayHomeMode = 0;
    BlynkTimer timer;
    
  4. setup()関数

    この関数はPIRセンサーを入力として初期化し、シリアル通信を設定し、WiFiに接続し、Blynkを設定します。

    • setup()timer.setInterval(1000L, myTimerEvent) を使用してタイマーの間隔を設定します。ここでは myTimerEvent() 関数を毎 1000ms 実行するように設定しています。 timer.setInterval(1000L, myTimerEvent) の最初のパラメータを変更することで myTimerEvent 実行の間隔を変更できます。


    void setup() {
    
        pinMode(sensorPin, INPUT);  // Set PIR sensor pin as input
        Serial.begin(115200);           // Start serial communication at 115200 baud rate for debugging
    
        // Configure Blynk and connect to WiFi
        Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
    
        timer.setInterval(1000L, myTimerEvent);  // Setup a function to be called every second
    }
    
  5. loop()関数

    loop関数はBlynkとBlynkタイマー関数を継続的に実行します。

    void loop() {
       Blynk.run();
       timer.run();
    }
    
  6. Blynkアプリとのやり取り

    これらの関数は、デバイスがBlynkに接続したとき、またはBlynkアプリの仮想ピンV0の状態に変更があったときに呼び出されます。

    • デバイスがBlynkサーバーに接続するたび、またはネットワーク状況が悪いために再接続するたびに、 BLYNK_CONNECTED() 関数が呼び出されます。 Blynk.syncVirtual() コマンドは単一の仮想ピン値のリクエストを行います。指定された仮想ピンは BLYNK_WRITE() コールを実行します。

    • BLYNKサーバー上の仮想ピンの値が変更されると、 BLYNK_WRITE() がトリガされます。


    // This function is called every time the device is connected to the Blynk.Cloud
    BLYNK_CONNECTED() {
        Blynk.syncVirtual(V0);
    }
    
    // This function is called every time the Virtual Pin 0 state changes
    BLYNK_WRITE(V0) {
        awayHomeMode = param.asInt();
        // additional logic
    }
    
  7. データ処理

    myTimerEvent() 関数は毎秒 sendData() を呼び出します。Blynkで外出モードが有効になっている場合、PIRセンサーをチェックし、動きが検出された場合にBlynkに通知を送ります。

    • ラベルのテキストを変更するには、 Blynk.virtualWrite(V1, "Somebody in your house! Please check!"); を使用します。

    • イベントをBlynkに記録するには、 Blynk.logEvent("intrusion_detected"); を使用します。


    void myTimerEvent() {
       sendData();
    }
    
    void sendData() {
       if (awayHomeMode == 1) {
          state = digitalRead(sensorPin);  // Read the state of the PIR sensor
    
          Serial.print("state:");
          Serial.println(state);
    
          // If the sensor detects movement, send an alert to the Blynk app
          if (state == HIGH) {
            Serial.println("Somebody here!");
            Blynk.virtualWrite(V1, "Somebody in your house! Please check!");
            Blynk.logEvent("intrusion_detected");
          }
       }
    }
    

参考文献