注釈
こんにちは、SunFounderのRaspberry Pi & Arduino & ESP32愛好家コミュニティへようこそ!Facebook上でRaspberry Pi、Arduino、ESP32についてもっと深く掘り下げ、他の愛好家と交流しましょう。
参加する理由は?
エキスパートサポート:コミュニティやチームの助けを借りて、販売後の問題や技術的な課題を解決します。
学び&共有:ヒントやチュートリアルを交換してスキルを向上させましょう。
独占的なプレビュー:新製品の発表や先行プレビューに早期アクセスしましょう。
特別割引:最新製品の独占割引をお楽しみください。
祭りのプロモーションとギフト:ギフトや祝日のプロモーションに参加しましょう。
👉 私たちと一緒に探索し、創造する準備はできていますか?[ここ]をクリックして今すぐ参加しましょう!
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 - 状態同期 を参照してください。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"); } } }
参考資料