ラズパイで定期的に撮影してGoogleDriveにアップ

はじめに

少し後に長期間自宅を空けるのでラズパイで定点カメラを作ります。
外から直接参照しようとすると、明るくないセキュリティの部分に不安があるのでGoogleDriveにアップロードしてそこで参照出来る様にします。

用意したモノ

動くRaspberyy Pi Model B+ ( OS:raspbian )
純正のカメラ ( https://amzn.to/2GkzC0D )

カメラを接続

カメラをラズパイに接続します。
接続するのはHDMI端子のところです。 破損させたりしない様に注意しながら引き上げます。 カメラを接続する時の向きは、HDMI端子側に銀色の部分が見える様にするのが正しい様です。

接続後、カメラの機能を有効にします。

$ sudo raspi-config

とすると設定画面が表示されるので

と進んでカメラの機能を有効にします。

カメラ撮影の確認

以下のコマンドで写真を撮影出来るか確認します。

$ raspistill -o test.jpg
$ ls -l
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Desktop
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Documents
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Downloads
drwxr-xr-x 2 pi pi    4096 11月 13 22:45 MagPi
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Music
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Pictures
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Public
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Templates
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Videos
-rw-r--r-- 1 pi pi 3262251  2月  4 00:38 test.jpg
drwxr-xr-x 3 pi pi    4096  2月  1 23:52 tool

な感じで撮影できていればOKです。
画像の確認は、ラズパイの画面で確認するか抜き出してきて確認するかで行います。

UPLOADの準備

写真を撮影出来たので、次はGoogleDriveにファイルをアップロードできる様にします。
GoogleDriveAPIを利用して自前で実装する事も可能だと思うのですが、現状あまり時間が無いので凄い人が公開してくれているモノを利用させていただきます。

gdrive
https://github.com/prasmussen/gdrive

README.mdでラズパイ向けのダウンロードパスを確認し、curlでダウンロードします。

# ダウンロード
$ curl -L -o gdrive-linux-rpi "https://docs.google.com/uc?id=0B3X9GlR6EmbnVXNLanp4ZFRRbzg&export=download"
# 実行権限付与
$ chmod +x gdrive-linux-rpi
$ ls -l
合計 6076
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Desktop
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Documents
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Downloads
drwxr-xr-x 2 pi pi    4096 11月 13 22:45 MagPi
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Music
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Pictures
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Public
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Templates
drwxr-xr-x 2 pi pi    4096 11月 13 23:11 Videos
-rw-r--r-- 1 pi pi 6180256  2月  4 23:27 gdrive-linux-rpi # ←ダウンロードしたファイル
drwxr-xr-x 3 pi pi    4096  2月  1 23:52 tool
# 好みの場所に移動
$ mv ./gdrive-linux-rpi /usr/bin

使いやすい様に”gdrive”とかでエイリアスを作っておくと便利だと思います。
ラズパイの場合は”~/.bash_aliases”に書いておけば良さそうです。

alias gdrive="gdrive-linux-rpi"

まずは認証を行う必要があるので、List取得用のコマンドを発行します。

$ gdrive list

すると、認証が必要だからとかと一緒にURLが表示されるのでブラウザにコピペしてアクセスし、認証を行い表示されるコードを貼り付けて認証を完了します。

アップロードの準備は出来たので、試しにアップロードを行ってみます。

# ディレクトリIDはブラウザでGoogleDriveにアクセスして対象ディレクトリを表示した時のURLで確認。
$ gdrive upload --parent [ディレクトリID] [アップロードファイル]

上記でアップロードされればOKです。

定期実行する為のShellを作成

定期実行はcronを利用する予定なので、Shellを作成し処理をまとめます。
流れとしては、

・ファイル名取得
・取得したファイル名で写真撮影
・取得したファイル名のファイルをアップロード

だけです。
以下、そのサンプルです。
写真ファイルを保存するディレクトリや、カレントディレクトリはお好みで。

#!/bin/bash

# ファイル名取得
# 形式:yyyyMMdd-hhmmss.jpg 
PIC_NAME="`date +%Y%m%d-%H%M%S`.jpg"
# 撮影
raspistill -o $PIC_NAME
# アップロード
# ※Shellの中ではエイリアスを使えない
gdrive-linux-rpi upload --parent [ディレクトリID] $PIC_NAME

作成したShellに実行権限を付与し、実行して撮影→アップロードが出来れば成功です。
尚、連続でやりすぎるとGoogleDriveAPIの制限に引っかかってエラーが発生します。 条件はいまいち不透明です…。

cron設定

次にcronの設定を行い、作成したShellを定期実行される様にします。

$ crontab -e

で、cronの設定を表示し、

*/5 * * * * [Shellをフルパス指定]

な感じで設定します。
上記の例だと5分おきにShellがキックされます。 cronの設定は、解りやすく解説しているページが多数ありますので、そちらを参照下さい。

おわりに

ここまでで定期的に撮影してGoogleDriveにアップロードが行われると思います。
簡単な処理で外出先から家の中を確認出来るので、それなりに使える…? と思っていますが、いざ何かがあったらどうしたら良いのか…という点に気付きました。 あまり確認しない方が良い気がしてきました。

今回はアップロードの部分を便利なgdriveに頼らせていただきましたが、近い内に勉強を兼ねて自前で実装したいと思います。

参考

ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です