Raspberry Pi + Node-RED + センサー + ラズパイ カメラ で室内の様子を通知する

Raspberry Pi + Node-RED + センサー + メール で室内のコンディションを通知する“の続きです。

 

先日のTALKで、今回のTALKでは、“Node-RED”をインストールした“Raspberry Pi”に接続したDHT11 温度センサー モジュールとPIRセンサーモジュールを使って、部屋に人がいない時だけ、室内の温度温度をメールで伝える仕組みを作りました。

今回のTALKは、送信するメール本文にラズパイが撮影した写真 (静止画)を添付できるよう改良を加えてみます。

なお、先日のTALKと内容が重複する部分は割愛しますので、その辺りをご了解下さい。

 

< ラズパイ用のカメラをセットアップする >

ラズパイ用のカメラと言えば、解像度が8メガピクセルの”Raspberry Pi カメラモジュール【Raspberry Pi Camera V2】“が定番ですが、今回のような開発用途だと、正直言って予算オーバーですよね。今回は、スペックは解像度が5メガピクセルと劣りますが安価で、かつ設置用の簡易スタンドが付いている”LABISTS Raspberry Piカメラモジュール 1080P 5M OV5647センサー ケース付き Raspberry Pi Model 2B、3B、3B+、4Bに適用“を試してみることにしました。

この製品はRaspberry Pi 2〜4をサポートしているため普通サイズのコネクタのケーブルが2本付属しています。もし、Raspberry Pi Zeroモデルで使いたい場合は、”For raspberry pi カメラモジュール 5MP Raspberry Pi 4 model b /3 b+ / Pi Zero Camera とケース500W画素 感光チップOV5647センサー“をチョイスする選択肢もあるようです。

カメラのセットアップ方法は、ラズパイ公式カメラと同じです。詳しい内容は、”Raspberry Pi 4 4GBモデルでこれまで構築したラズパイ環境を統合化してみる (3) “ラズパイ標準カメラでビデオ監視”“をご覧下さい。

付属のカメラスタンドはこんな感じです。組立図は同封されていないので、アマゾンの商品ページに掲載されている写真を参考に自力で組み立てました。それでも10分ぐらいで完成したので難しいことはないと思います。ちなみに、本当は透明なアクリル?製ですが、保護している紙が剥がしにくかったので、そのままにしてあります。

正面から見るとこんな感じ。ラズパイのカメラ・レンズは置き場所に困るので、簡易スタンドとは言えあると便利かも。

カメラを利用する前に、ラズパイの”Raspberry Pi の設定” -> “インターフェイス”画面でカメラを有効にすることを忘れないで下さいね。

カメラのセットアップが終わったら、写真を試し撮りしてみましょう。

raspistill -o image.jpg

 

< Node-REDで写真撮影ができるノードをセットアップする >

今回は、”node-red-contrib-camerapi“という写真撮影用のノードを利用します。

“node-red-contrib-camerapi”ノードのプロパティ画面では、写真データの保存方法、写真の解像度といった基本項目の他、画像の角度、エフェクト、ISO設定、露出・ホワイトバランスなど多彩な設定が可能です。

まず始めに、撮影した写真データを一旦ファイルに保存し、ファイルからデータを読み込んだうえでメール送信するフローを考えてみます。

“node-red-contrib-camerapi”ノードのプロパティ画面は上図の通りです。ポイントは、”File Mode”欄は”Custom File Name”に設定、”File Name”に分かりやすいファイル名、”File default path”欄は”No”、”File Path”欄は分かりやすい写真ファイルの保存先パスとすることで、写真ファイルの場所を特定することです。”File Mode”欄をデフォルトの”Auto File Name”のままにしておくと、ノードが割り当てる独自のファイル名になってしまうので、後々の処理が面倒になります。

完成したフローです。”node-red-contrib-camerapi”ノードに続く”delay”ノードで15秒のタイムタグを設けているのは、写真データがファイルに保存されるまで、少々の時間を要するからです。写真の解像度によっても、保存にかかる所要時間が異なります。

“delay”ノードに続く”file in”ノードでは、指定したパスで写真データを読み込んだ後、バイナリバッファ形式で後方の”function”ノードに送ります。

前方の”file in”ノードから送られてきた”msg.payload”に格納されたバイナリバッファ形式の写真データは、そのまま後方の”node-red-node-email“ノードに繋げます。

“node-red-node-email”ノードは、”msg.payload”にバイナリ形式の写真データが格納されている場合、メール本文に写真データを静止画として添付してくれます。

 

今度は、”node-red-contrib-camerapi”ノードのプロパティ画面の”File Mode”欄は”Buffered Mode”に設定してみましょう。

メモリ内の写真データで後方のノードに渡すことができるので、フロー全体がとてもシンプルになりました。

こちらも問題なくメール送信ができました。

 

< ダッシュボードに撮影した写真を表示してみる >

余談ですが、Node-REDのダッシュボード (“node-red-dashboard“)に、ラズパイのカメラで撮影した写真を掲載してみましょう。

ダッシュボードに動画や静止画を表示する”node-red-contrib-ui-media“ノードを利用します。

“node-red-contrib-ui-media”のプロパティ画面では、写真や動画が保存されるパスを指定するのですが、最初どういう意味か分かりませんでした。例は良くないですが、下図の場合は、

“./.node-red/lib/ui-media/lib/写真/stillcamera.jpg”というパスにメディアを保存するという設定になります。ですので、ダッシュボード上で、動的に表示するコンテンツを変化させたいのであれば、このパスに最新の写真などを保存し直すといったアプローチになります。

また、”node-red-contrib-camerapi”ノードのプロパティ画面の”File Mode”欄は”Custom File Name”に設定し、写真ファイルなどの名前を固定にする必要があります。

こんな感じで、ダッシュボードに表示されます。この仕組みは、何か別の用途で活用できそうですね。

※ “node-red-contrib-ui-media”でダッシュボードにコンテンツを表示するためには、一度だけラズパイまたは”Node-RED”をリブートする必要があるようです。

 

< 人感センサーと温度センサーを絡めたメール送信 >

最後に、人感センサーと温度センサーを絡め、室内に人がいない時にだけ、メール本文に室内の温湿度を記入し、室内の様子を撮った写真を添付したメールを送信するフローを完成させます。

こちらが完成したフローです。

先頭の”inject”ノードでは、1時間毎にフローを実行する設定にしました。

人感センサーのフロー部分は、前日のTALK (“Raspberry Pi + Node-RED + センサー + メール で室内のコンディションを通知する“)のまま流用しました。

温度センサーのフロー部分も基本同じですが、後方のフローに温湿度のデータを伝えたので、”change”ノードで温度がセットされている”msg.payload”の値を、新たに設けた”msg.temp”に代入しました。湿度は、もともと”msg.humidity”に格納されているので、そのまま後方に繋げます。

参考までに、今回のフローで用意したメールの素材はこんな具合です。

 

“change”ノードに続く”function”ノードで、人感センサーの検出結果をもとに判定し、室内に人がいない場合、室内の写真を撮るフローに繋げます。

 

“node-red-contrib-camerapi”ノードに続く”function”ノードでメールを作成します。

“node-red-contrib-camerapi”ノードでは、”msg.payload”に写真データが格納されている場合、メール本文は”msg.description”に記述するルールになっています。

msg.topic = '現在の写真'

msg.description = '現在の温度は' + msg.temp + '℃、湿度は' + msg.humidity +'%です';

msg.payload = msg.payload;

return msg;

 

デプロイ後、外出していると、こんな感じでメールが届きます。

 

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Raspberry Pi Camera V2
価格:3800円(税込、送料別) (2020/3/6時点)

楽天で購入

 

 

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Raspberry Pi カメラモジュールV2
価格:3357円(税込、送料別) (2020/3/6時点)

楽天で購入

 

 

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

アイオーデータ機器 Raspberry Pi NoIR Camera V2 UD-RPNOIRCAMERA
価格:4620円(税込、送料別) (2020/3/6時点)

楽天で購入

 

 

ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。

tomohiko

長年に渡りMacintosh向けの自作アプリを作り続けているPOOHです。最近はiPhone,iPad向けアプリ開発にも挑戦中。グルメ、旅行、露天風呂、写真、サイクリング、映画、STAR TREKが大好き。レトロでSFなおもちゃを大量にコレクション。プレーリードッグと同居中。

おすすめ

コメントを残す