Raspberry Pi 4で定点観測カメラを簡単に作ってみた! その2
前回、Raspberry Piをセットアップして、カメラモジュールで写真が撮れるところまで確認しました。
前回のブログ記事:RASPBERRY PI 4で定点観測カメラを簡単に作ってみた!
今回は、カメラのオプション設定、決まった時刻に自動で写真を撮る設定、Raspberry Piで撮った写真ファイルを自分のPCにコピーする方法について、自分が行った方法を紹介したいと思います。
カメラのオプション設定
前回の記事で、コマンドライン端末から”raspistill”コマンドを実行し、写真が撮れるところまで確認しました。今回はコマンドのオプションを指定して所望の出力が得られるように動作を変更します。
私が設定したオプションは以下です。
raspistill -n -rot 270 -a 12 -a "%Y-%m-%d %X" -ae 96 -o image.jpg
オプション | 説明 |
---|---|
-n | 写真を撮る際に表示されるプレビュー画面を表示しない |
-rot 270 | 写真の向きを270°回転 |
-a 12 | 写真を撮った日時を表示 |
-a “%Y-%m-%d %X” | 日時表示を”年-月-日 時刻”の様式で表示 |
-ae 96 | 日時表示の文字の大きさを32から96に変更 |
-o image.jpg | 写真を”image.jpg”というファイル名で保存 |
自動で写真を撮るのでプレビューは非表示に、窓に取り付ける向きに合わせて写真の向きを回転、写真を撮った日付を残したいので日付表示を設定しています。
決まった時刻に自動で写真を撮る設定
RasbianのようなLinux系のOSではスケジュール実行の仕組みとしてcron(クーロン)と呼ばれるアプリケーションがあるので、cronでスケジュール実行の設定を行います。※参考:Windowsであれば”タスクスケジューラ”というアプリケーションがあります。
参考:cronの設定ガイド
cronの設定に進む前に、簡単なシェルスクリプトを作成します。”raspistill”コマンド実行時に指定する出力ファイル名(上記の場合だと”image.jpg”)は写真を撮るたびに上書きされてしまうので、撮影したファイルを残すために毎回出力ファイル名を変更します。
テキストエディタを開き、以下のようなスクリプトを書きます。
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
raspistill -n -rot 270 -a 12 -a "%Y-%m-%d %X" -ae 96 -o /home/pi/my_files/Pictures/2021_home_gardening/$DATE.jpg
上記のスクリプトは”bashスクリプト”と呼ばれるもので、1行目は/bin/bashコマンドでこのスクリプトを処理して下さいっと指示しています。3行目では”DATE”変数にスクリプト実行する時点の日時を文字列(”年-月-日_時:分”)として取得して代入しています。5行目で写真を撮るコマンドをオプション付きで実行していますが、出力ファイル名として保存先フォルダと日時を付けたファイル名($DATE.jpg)を指定しています。
上記のテキストファイルをファイル名”take_a_picture.sh”などの名前で保存します。
次に作成したシェルスクリプト(“take_a_picture.sh”)を実行可能にするために、コマンドライン端末上で以下のコマンドを実行します。
chmod +x take_a_picture.sh
“chmod”コマンドはファイルの編集権限や参照権権限、実行権限を変更するコマンドで、上記では”+x”でファイルに実行権を加えています。
シェルスクリプトに実行権を加えると、下記のようにコマンドライン端末からシェルスクリプトを実行することができます。
./take_a_picture.sh
スクリプトを実行すると、”2021-05-29_0700.jpg”のようにファイル名に日付が付いた写真ファイルが作成されます。
実行するたびに新しいファイル名で保存できるようになったので、次はこのスクリプトをcronでスケジューリングします。
cronのスケジュール設定を行うには、コマンドライン端末から以下のようにcrontabコマンドを実行します。
crontab -e
”-e”オプションはスケジュール設定を実施・変更するためのオプション指定です。
テキストエディタが開くので、cronの記述形式でスケジュール設定し、実行コマンドを記載します。
cron記述形式:
分 時 日 月 曜日 コマンド
参考:cronの設定ガイド
記述例:
00 6-18 * * * /home/pi/my_files/Pictures/2021_home_gardening/take_a_picture.sh
上記では6時から18時まで毎時00分にbashスクリプト”take_a_picure.sh”を実行する設定をしています。時は6-18の範囲指定、毎日なので日、月、曜日は *(アスタリスク)としています。
cronを設定すると指定した時刻に写真が自動的に撮影され、写真ファイルが溜まっていきます。
Raspberry Piで撮った写真ファイルを自分のPCにコピーする
Raspberry Pi本体は窓に固定するため、撮った写真を直接確認することができません。そこで自分のPCからリモート接続して、撮影した写真をダウンロードします。※先日の設定でRaspberry Pi側でSSH(セキュアリモート接続)を有効にしています。
私の場合、Macを使っているのでRaspberry Piでやったのと同様にコマンドライン端末(ターミナル)を開き、以下のコマンドを実行して、写真をダウンロードしています。
rsync -utzv pi@raspberrypi:/home/pi/my_files/Pictures/2021_home_gardening/*jpg /Users/yogatami/Pictures/2021_Home_Gardenig
rsync(アールシンク)コマンドはリモートのフォルダとファイルの同期を行うコマンドで、上記ではRaspberry Pi側のフォルダ(/home/pi/my_files/Pictures/2021_home_gardening/)の全てのjpgファイルを、自分のMacのフォルダ(/Users/yogatami/Pictures/2021_Home_Gardenig/)に同期しています。
rsyncコマンドは、更新のあったファイルのみ同期してくれるので、効率的に写真をダウンロードできます。
参考:【 rsync 】コマンド(その1)――ファイルやディレクトリを同期する
時折、自分のMacで上記コマンドを実行して写真をダウンロードして確認しています。
毎回、長ったらしいコマンドを打つのは面倒なので、コマンドにエイリアス名を付け、短いコマンドで同期実行すると便利です。
参考:【 alias 】コマンド/【 unalias 】コマンド――コマンドの別名(エイリアス)を登録する/削除する
まとめ
Raspberry Piのスターターキットを使って、手軽に定点観測カメラを作ることが出来ました。私は元々Linux OSの知識があったこともあり、セットアップは1日もかからず出来ました。
Raspberry Piは小型のPC(サーバ)なので、今後他の用途でも活用できたら良いなと思っています。
その後…
ベランダの家庭菜園ですが、妻に指示され防虫ネットを被せました。元々写り込みが激しくそんなに綺麗に撮れてなかったのですが、更に見えずらくなりました。
ちょっとがっかりですが、このまま写真を撮り続けていこうと思います。