Blynkを使った侵入警報システム¶
このプロジェクトでは、受動型赤外線(PIR)センサー(HC-SR501)を使用して、簡易な住宅侵入検知システムを実演します。 Blynkアプリでシステムが「外出モード」に設定されている場合、PIRセンサーが動きを監視します。 検出された動きは、Blynkアプリで通知をトリガーし、ユーザーに潜在的な侵入を警告します。
1. 回路の構築¶
注釈
ESP8266モジュールは、安定した動作環境を提供するために高い電流が必要です。9Vの電池が接続されていることを確認してください。
2. Blynkの設定¶
注釈
Blynkに慣れていない場合は、これら2つのチュートリアルを先に読むことを強くお勧めします。 Blynkで始める方法 は、Blynkの初心者向けガイドで、ESP8266の設定とBlynkへの登録方法が含まれています。 Blynkを使用した炎警報システム は簡単な例ですが、手順の説明はより詳細です。
2.1 テンプレートの作成¶
まず、Blynkで 「Intrusion Alert System」 テンプレートを作成する必要があります。
2.2 データストリーム¶
esp8266とuno r4ボードからデータを受け取るために、 Datastreams ページで Virtual Pin 型の Datastreams を作成します。
以下の図に従ってVirtual Pin V0を作成します:
Virtual Pin V0 の名前を AwayMode に設定します。 DATA TYPE を Integer にし、MINとMAXを 0 と 1 に設定します。
以下の図に従ってVirtual Pin V1を作成します:
Virtual Pin V1 の名前を Current status に設定します。 DATA TYPE を String にします。
上記の手順に従って、2つのVirtual Pinを設定したことを確認してください。
2.3 イベント¶
次に、侵入の検出をログに記録し、メール通知を送る event を作成します。
注釈
コードの変更が必要になる可能性があるため、私の設定と一致させることをお勧めします。 EVENT CODE は intrusion_detected
として設定されていることを確認してください。
Notifications ページに移動し、メール設定を行います。
2.4 Webダッシュボード¶
侵入警報システムと対話するために Web Dashboard も設定する必要があります。
Web Dashboard ページに Switch widget と Label widget をドラッグアンドドロップします。
Switch widget の設定ページで、 Datastream を AwayMode(V0) に選択します。スイッチがオンになったときには「away home」を表示し、オフになったときには「at home」を表示するように、 ONLABEL と OFFLABEL を設定します。
Label widget の設定ページで、 Datastream を Current status(V1) に選択します。
2.5 テンプレートを保存¶
最後に、テンプレートを保存することを忘れないでください。
3. コードの実行¶
ultimate-sensor-kit\iot_project\wifi\02-Intrusion_alert_system
のパスの下で02-Intrusion_alert_system.ino
ファイルを開くか、このコードを Arduino IDE にコピーしてください。"Intrusion Alert System"のテンプレートを使用して、Blynkデバイスを作成します。その後、
BLYNK_TEMPLATE_ID
、BLYNK_TEMPLATE_NAME
、およびBLYNK_AUTH_TOKEN
を自分のものに置き換えてください。#define BLYNK_TEMPLATE_ID "TMPxxxxxxx" #define BLYNK_TEMPLATE_NAME "Intrusion Alert System" #define BLYNK_AUTH_TOKEN "xxxxxxxxxxxxx"
使用するWiFiの
ssid
とpassword
も入力する必要があります。char ssid[] = "your_ssid"; char pass[] = "your_password";
適切なボードとポートを選択したら、 書き込み ボタンをクリックします。
シリアルモニターを開き(ボーレートを115200に設定)、成功した接続などのプロンプトが表示されるまで待ちます。
注釈
接続時に
ESP is not responding
というメッセージが表示された場合は、以下の手順に従ってください。9Vの電池が接続されていることを確認します。
RSTピンを1秒間GNDに接続してESP8266モジュールをリセットし、その後抜きます。
R4ボードのリセットボタンを押します。
時折、上記の操作を3〜5回繰り返す必要がある場合もありますので、ご注意ください。
4. コードの説明¶
設定とライブラリ
こちらでBlynkの定数と認証情報を設定します。ESP8266 WiFiモジュールとBlynkに必要なライブラリをインクルードしています。
#define BLYNK_TEMPLATE_ID "TMPxxxx" #define BLYNK_TEMPLATE_NAME "Intrusion Alert System" #define BLYNK_AUTH_TOKEN "xxxxxx-" #define BLYNK_PRINT Serial #include <ESP8266_Lib.h> #include <BlynkSimpleShieldEsp8266.h>
Wi-Fiの設定
Wi-Fi認証情報を設定し、ESP01モジュールとのソフトウェアシリアル通信を構築します。
char ssid[] = "your_ssid"; char pass[] = "your_password"; SoftwareSerial EspSerial(2, 3); #define ESP8266_BAUD 115200 ESP8266 wifi(&EspSerial);
PIRセンサーの設定
PIRセンサーが接続されているピンを定義し、状態変数を初期化します。
const int sensorPin = 8; int state = 0; int awayHomeMode = 0; BlynkTimer timer;
setup()関数
この関数では、PIRセンサーを入力として初期化し、シリアル通信を設定し、Wi-Fiに接続し、Blynkを構成します。
timer.setInterval(1000L, myTimerEvent)
を使用して、setup()内でタイマー間隔を設定します。ここでは、myTimerEvent()
関数を 1000ms ごとに実行するように設定しています。
void setup() { pinMode(sensorPin, INPUT); Serial.begin(115200); EspSerial.begin(ESP8266_BAUD); delay(10); Blynk.config(wifi, BLYNK_AUTH_TOKEN); Blynk.connectWiFi(ssid, pass); timer.setInterval(1000L, myTimerEvent); }
loop()関数
loop関数では、BlynkとBlynkタイマー関数を繰り返し実行します。
void loop() { Blynk.run(); timer.run(); }
Blynkアプリとの対話
これらの関数は、デバイスがBlynkに接続されたとき、およびBlynkアプリの仮想ピンV0の状態が変わったときに呼び出されます。
デバイスがBlynkサーバーに接続するたび、またはネットワークの状態が悪いために再接続するたびに、
BLYNK_CONNECTED()
関数が呼び出されます。Blynk.syncVirtual()
コマンドは、単一の仮想ピンの値のリクエストです。指定された仮想ピンはBLYNK_WRITE()
呼び出しを実行します。詳細は、 Blynk - State Syncing を参照してください。BLYNKサーバー上の仮想ピンの値が変更されると、
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 }
データの処理
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"); } } }
参考資料