iroiro

電子工作など色々試したことの備忘録

Raspberry Piで写真を撮ってcronでDropboxに定時アップする

はじめに

チューリップの球根を買ったので、その成長の過程を見るために自動的に毎日写真を撮ってDropboxへアップします。

使用するもの

カメラを接続する

カメラのケーブルをRaspberry PiHDMIポートの右横に挿す。

青色がHDMIポートの反対側に。

 

次のコマンドでファームウェアを最新のものにアップデート。
$ sudo apt-get update
$ sudo apt-get upgrade

 

Raspberry Pi のメインメニュー→[設定]→[Raspberry Piの設定]を選択し、
設定画面の[インターフェース]タブを開く→カメラを有効に。


次のコマンド例で写真が撮れる。
$ raspistill -o /home/pi/Pictures/test.jpg -w 800 -h 600

 

★ところが実際には写真が撮れず数時間を試行錯誤に費やす。。

カメラのクリアケースへの収まりがかなり悪く、その影響でカメラ側のケーブルの接触不良になっていたことが原因だった。てっきり、はんだ付けされているとの思い込みが良くなかった。ケースをヤスリで削って対応。アマゾンの他評価も同じ。。

f:id:tsakaidesu:20181103222123j:plain

Dropboxの事前準備

パソコンからDropboxのdeveloperサイトにログイン。
https://www.dropbox.com/developers/apps


ログインしたページの右上にある[Create app]ボタンを押し、下記の設定。
> 1. Choose an API → Dropbox APIを選択。
> 2. Choose the type of access you need → Full Dropboxを選択。
> 3. Name your app → 任意の名称を入力。
[Create App]ボタンを押す。
[Generate]ボタンを押してAccess tokenを生成。

生成されたAccess tokenは後で入力する。

Dropbox-Uploaderのダウンロード

次のコマンドでダウンロード、権限付与。

$ sudo git clone https://github.com/andreafabrizi/Dropbox-Uploader/
$ cd /Dropbox-Uploader/
$ sudo chmod 755 dropbox_uploader.sh

 

次のコマンド例でダウンロードファイルを移動、実行。
$ sudo mv dropbox_uploader.sh /usr/bin/

$ /usr/bin/dropbox_uploader.sh

 

下記のメッセージが出るので事前に取得したAccess tokenを入力。
# Access token:

 

次のコマンド例でアップロードテスト実行。
$ /usr/bin/dropbox_uploader.sh upload /home/pi/Pictures/test1.jpg test1.jpg

 

下記サイトにファイルがアップされている。
https://www.dropbox.com/h

 

★もし、Access tokenの入力を間違って再設定したい時は下記を実行。
$ /usr/bin/dropbox_uploader.sh unlink

 カメラ撮影とアップロードのスクリプト作成

次のコマンド例でスクリプトを生成。

$ nano /home/pi/Desktop/camera.sh

 

次の内容で作成する。

#!/bin/sh
DATE=$(date +"%Y-%m-%d_%H%M")
raspistill -o /home/pi/Pictures/$DATE.jpg -w 800 -h 600
/usr/bin/dropbox_uploader.sh -f /home/pi/.dropbox_uploader upload /home/pi/Pictures/$DATE.jpg /cam/$DATE.jpg
rm /home/pi/Pictures/*.jpg

 

★上記「.dropbox_uploader」は設定ファイル(隠しファイル)でユーザのホームディレクトリにある。クロンで実行する場合には下記 -f がないとダメ。

 

次のコマンドで実行権限付与。
$ sudo chmod +x /home/pi/Desktop/camera.sh

 

次のコマンドでテスト。
$ /home/pi/Desktop/camera.sh

クロンの事前準備(ログ出力する設定)

次のコマンドで設定ファイルを開く。

 $ sudo nano /etc/rsyslog.conf

 
下記のコメントを有効に。

# cron.* /var/log/cron.log

 

rsyslog サービスを再起動して設定を反映。

sudo /etc/init.d/rsyslog restart

 

ログレベルを設定するためにcron の設定ファイルを開く。

$ sudo nano /etc/default/cron

 

下記のコメントを有効にして値を編集。全部記録する設定にする。

# EXTRA_OPTS="-L 15"

 

cron サービスを再起動して設定を反映する。

$ sudo /etc/init.d/cron restart

 

下記のログを確認する。

/var/log/cron.log

クロンでスクリプトを定期実行

次のコマンドを実行。nano エディタを選択。

$ crontab -e

 

下記を追加して保存(毎日8:30に実行)。

30 8 * * * sudo sh /home/pi/Desktop/camera.sh

 

なお5分毎に実行する時 & ログ出力 は次のコマンド。

*/5 * * * * sudo sh /home/pi/Desktop/camera.sh 1>> /home/pi/Desktop/cam.log 2>> /home/pi/Desktop/camerr.log

 

次のコマンドで設定内容を確認できる。

$ crontab -l  ←(エル) 

 

次のコマンドでクロンの起動有無を確認できる。

/etc/init.d/cron status

 

クロンを起動する時。
$ sudo /etc/init.d/cron start

 

クロンを再起動する時。

$ sudo /etc/init.d/cron restart

 

クロンでメールのエラー出た時(postfixをインストール)
$ sudo apt-get install postfix

 

結果

近くにコンセントなく、モバイルバッテリーを使ったが、2晩持たない。。

写真は下図の通り。球根の左はテンポドロップで、一緒に結晶を確認しています。

f:id:tsakaidesu:20181103221143j:plain