IoT家電が人気になりつつある最近ですが、IoTとは結局は何なんでしょうか…?
今回はIoTの勉強も兼ねて、Raspberry Piとカメラモジュールを購入し、LINEで確認できる屋外監視カメラを作ってみようと考えました。構成は以下の感じです。

もとより自作PCマニアの私はハード寄りの人間なので、pythonやシェルスクリプトのことはチンプンカンプンです。
そんな人間でも、ネット上のソースコードをあちこち繋げて監視カメラを自作することができました。
ソフトが分からない人間なりに、コピペだけで動作可能なコードを載せて、丁寧に解説していきます。
【STEP1】Raspberry Piとカメラモジュールの準備
用意したRaspberry Piは4B(8GB)です。正直なところ、カメラ撮影や写真をLINEに投稿する処理はとても軽いので、スペックとしてはRaspberry Pi3やZEROでも十分です。
カメラモジュールはAmazonの商品を購入しました。
LINEに送る際はファイルの上限が3MBなので、カメラは高画素過ぎても無駄になります。注意してください。
【STEP2】ハードの設定とカメラのテスト
OS入りのmicroSDを購入したため、Raspberry Piの初期設定(OSインストール)はしませんでした。
カメラモジュールは説明書通りに組み立てるだけです。カメラケーブルをRaspberry Piとカメラモジュールに繋ぐと、ハードは完成です。

Raspberry Piのケーブル装着部位は左端と真ん中の2カ所がありますが、CAMERAと書かれた真ん中の方に繋げばOKです。
試しに、ターミナルからカメラを起動するシェルスクリプト(camera.sh)を作製して、無事に写真が撮れれば成功です。
シェルスクリプト(.sh)とはコンピュータへの命令が書かれたコードで、Windowsでいうバッチファイルのことじゃ。そして、ターミナルはWindowsでいうコマンドプロンプトだ。
Raspberry PiのOSはRaspbian(Linux系)だから、Windowsと呼び方が違うのじゃ。
まずは、ターミナルを起動(CtrlとAltとTキー)して、camera.shを新規に作成します。
vi camera.sh
viが起動したら、以下のコードを手打ちしてください。
#!/bin/bash
date=$(date +%Y%m%d%H%M%S)
photo="/home/pi/画像/${date}.jpg"
#解像度を指定してカメラ起動
raspistill -w 1024 -h 768 -q 100 -o $photo
Linux系の標準テキストエディタ「vi」でシェルスクリプトを作成しておるぞ。
最初に「i」を入力して挿入モードにしてから入力することを忘れぬよう。入力が終わったら、保存して閉じる場合は「”esc”→ :wq」、保存せずに閉じる場合は「 “esc”→ :q 」だぞ。
再度、ターミナルに戻って、camera.shを実行します。
chmod +x camera.sh
./camera.sh
「chmod +x…」で実行権限を付与し、「./camera.sh」でシェルスクリプトの実行じゃ。
後は画像フォルダに撮影された写真が入っていることを確認するのだ。
一行目の「#!/bin/bash」は、シェルスクリプトのおまじないです。書かなくてもシェルスクリプトは実行できますが、難しい理由で書いた方がいいそうです。
また、viでなくテキストエディタでcamera.shを作成しても、管理者権限は使っていないので問題ありません。
【STEP3】LINE Notifyのトークンを取得
LINE Notifyより、無料でLINE公式の通知連携サービスが利用できます。
LINEアカウントでログインし、「トークンを発行する」>「1:1でLINE Notifyから通知を受け取る」と進むと、トークンを発行できます。
こちらのトークンは次のステップでシェルスクリプトに記述するので、一字一句間違えないようにコピーしておきます。
【STEP4】写真をLINEに送信させる
最後の山場です。先に作成したcamera.shに、写真をLINEに送信させる記述を追記します。
再度、camera.shをviで開いて、編集します。
vi camera.sh
camera.shを以下のように書き換えてください。
#!/bin/bash
date=$(date +%Y%m%d%H%M%S)
photo="/home/pi/画像/${date}.jpg"
token="LINE Notifyのトークン"
#解像度を指定してカメラ起動
raspistill -w 1024 -h 768 -q 100 -o $photo
#写真をLINEに送信
curl -X POST -H "Authorization: Bearer ${token}" -F "message=camera" -F "imageFile=@${photo}" https://notify-api.line.me/api/notify
「message=camera」はただのテキストメッセージじゃ。
写真だけ送ろうにも、メッセージなしではエラーになってしまうのだ。
あとは、以下のコードをターミナルに入力して、実行させます。
./camera.sh
無事にLINEに送ることができたら、あとはシェルスクリプト(camera.sh)を自動実行させるために、cronにcamera.shを登録します。
cronとはプログラムの目覚まし時計のようなものじゃ。
何分おき、何時間おきに、特定のシェルスクリプトを実行するように設定できるのだ。
再度、ターミナルに以下のコードを打ち、cronを開きます。
crontab -e
最終行に以下のコードを追記するだけです。
…(略、最終行に以下を記入)…
*/15 * * * * ./home/pi/camera.sh
毎分写真を送られても通信量が圧迫されるだけなので、15分に一度の設定にしています。こちらはお好みの設定にしてください。
【おまけ】屋外用Raspberry Piケース(自作)に入れる

ケースの詳細は以下の記事を参考にしてください。
内部は完全に密封されているので、湿気や砂塵によってRaspberry Piが故障する心配はありません。
カメラモジュールはむき出しなので、軒下など雨の当たらない屋外であれば、監視カメラとして十分に活躍できます。
まとめ
以上で定期的にカメラで写真を撮り、LINEに送信するRaspberry Pi監視カメラの完成です。
cronで自動実行できるので、Raspberry Pi起動時のロックを無くせば、電源を入れるだけで勝手に監視カメラを起動できます。
おまけのケースに入れれば、屋外でも使える監視カメラになります。Wi-Fiと電源供給は必要なので、軒下などに設置することがちょうどいいでしょう。
「電源供給もなくしたい」という方は、Raspberry Pi Picoの記事も参考にしてください。
コメント
Raspberry Pi Zero でも作成することは可能でしょうか?