注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。

なぜ参加するのか?

  • 専門的なサポート:購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決。

  • 学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。

  • 限定プレビュー:新製品発表や予告編に早期アクセス。

  • 特別割引:最新製品の特別割引を楽しむ。

  • フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。

👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

レッスン49: Blynkを使った侵入通知システム

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

必要なコンポーネント

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

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

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

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

COMPONENT INTRODUCTION

PURCHASE LINK

ESP32 & Development Board

購入

PIRモーションモジュール (HC-SR501)

-

1. 回路の組み立て

../_images/Lesson_12_PIR_Module_esp32_bb.png

2. Blynkの設定

2.1 Blynkの初期設定

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

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

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

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

2.2 テンプレート作成

  1. 最初に、Blynkでテンプレートを作成します。以下の手順に従って、 Intrusion Alert System テンプレートを作成してください。

  2. テンプレートに名前を付け、 ESP32 ハードウェアを選択し、 Connection TypeWiFi として選択し、 Done をクリックします。

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

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

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

  2. ポップアップで、 Virtual Pin を選択します。

  3. Virtual Pin V0AwayMode と命名します。 DATA TYPEInteger とし、 MINMAX の値を 01 に設定します。

  4. 同様に、もう一つの Virtual Pin データストリームを作成します。これを Current Status と命名し、 DATA TYPEString に設定します。

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 セクションに移動し、通知をオンにしてメールの詳細を設定します。


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

Web ダッシュボード が Intrusion Alert System と完全に連携するように調整します。

  1. Switch ウィジェットLabel ウィジェット の両方を Web ダッシュボード にドラッグして配置します。

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

  3. Switch ウィジェット の設定では、 DatastreamAwayMode(V0) に設定します。 ONLABELOFFLABEL をそれぞれ "away""home" に設定します。

  4. Label ウィジェット の設定では、 DatastreamCurrent Status(V1) に設定します。

2.6 テンプレートの保存

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

2.7 デバイスの作成

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

  2. From template をクリックして、新しいセットアップを開始します。

  3. その後、 Intrusion Alert System テンプレートを選択し、 Create をクリックします。

  4. ここで、 Template IDDevice Name、および ``AuthToken``が表示されます。これらをコードにコピーして、ESP32がBlynkと連携できるようにします。

3. コードの実行

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

  2. ``universal-maker-sensor-kitesp32Lesson_49_Blynk_based_intrusion_system``ディレクトリにある ``Lesson_49_Blynk_based_intrusion_system.ino``ファイルを開きます。または、その内容をArduino IDEにコピーすることもできます。

  3. BLYNK_TEMPLATE_IDBLYNK_TEMPLATE_NAME、および ``BLYNK_AUTH_TOKEN``のプレースホルダーを自分のユニークなIDに置き換えます。

    #define BLYNK_TEMPLATE_ID "TMPxxxxxxx"
    #define BLYNK_TEMPLATE_NAME "Intrusion Alert System"
    #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
    
  4. WiFiネットワークの ``ssid``と ``password``も入力する必要があります。

    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になる)、"Somebody here!" と表示され、メールにアラートが送信されます。

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を設定します。

    • ``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()関数

    ループ関数は、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.logEvent("intrusion_detected");``を使用してBlynkにイベントを記録します。


    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");
          }
       }
    }
    

参考