画像撮影
プロジェクトの目的
ラズベリーパイで静止画像を定期的に取得し、クラウド上(GoogleDrive)にデータを蓄積していきます。
ラズパイの設定でカメラのインターフェイスが有効になっているか確認する
コマンドラインからカメラをテストする
$ raspistill - o test,jpg
その他、本コマンドの使い方についてはインターフェイス2019年7月号に詳しい(P105〜)
1.Pythonプログラムを使う方法
Pythonプログラムで静止画を撮影するためのプログラム
$ pip3 install picamera → picameraraライブラリをインストール
このサイトを参考にしました。
camera.py → 1時間ごとに静止画を撮影するプログラム
撮影した静止画をGoogleDriveに格納するためのプログラム
1) 前段と同様にpicameraライブラリをインストールしておく
$ pip3 install picamera
2) PyDriveライブラリをインストールする
$ pip3 install pydrive
そうすると、PATHに'/home/pi/.local/bin'が設定されていないという警告が出るので以下のコマンドを実行してPATHを加えておく。
$ export PATH="$PATH:/home/pi/.local/bin"
4) Google Drive APIの利用登録は別途済ませておく
5) settings.yamlの設定してファイルを作成(もしくはコピー)しておく
6) Oauth認証を行う(以下、SSHで接続して行う)
gauth.py → このコードを実行するとブラウザが起動し認証画面が表示される。
注)読み込むsettinngs.yamlの場所を指定することはできず、常にカレントディレクトリ(Pythonを起動したディレクトリ = 作業ディレクトリ)のものが読み込まれる。このため、settinngs.yamlを.pyファイルと同じディレクトリに置いておく必要がある。
7) 自動的に撮影して、その静止画をGoogle Driveに蓄積していく。
camera_upload_file.py → カメラで静止画を撮影して、そのファイルをGoogleDriveに自動的にアップロードするプログラム
注)事前にルート下に画像を格納するフォルダImageを作成しておく。また、camera_upload_file.pyプログラムのGoogleドライブIDを正しく設定しておく。gauth.pyは必ずしも事前に実行しておく必要があるわけではない。
<参考>
ラズパイ上でPythonでカメラを使うためのラズベリーパイ財団の公式HP情報
2.シェルスクリプトとrcloneで実現する方法
写真撮影のシェルスクリプトファイルを書いて、rcloneでgoogle driveに送る。これをcronで自動実行する。
コマンドラインからgoogle driveを操作する:rclone → 動作する!
ラズパイで画像をGoogleDriveにアップロードするならrclone一択じゃね?という話 (シェルスクリプトの書き方)
rcloneでGoogle Driveへのリモートバックアップを自動化する【rsyncみたいなやつ】
いるかのボックス: Raspberry PiのファイルをGoogleドライブにバックアップする (rclone インストール方法)
$ curl https://rclone.org/install.sh | sudo bash
$ rclone config
Googleドライブ用の設定についてはGoogle driveに詳細な説明がある。以下、rclone configの設定内容。
新規リモート(利用するサービス)の設定作成
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
新規リモート名の設定(任意)
name> gdrive
設定するサービス(12 / Google Drive)を選択
Storage> 12
client_idとclient_secretはブランクでOK
client_id>
client_secret>
アクセス権をフルアクセス(1 / Full access all files, excluding Application Data Folder)に設定
scope> 1
root_folder_idとservice_account_fileはブランクでOK
root_folder_id>
service_account_file>
advanced設定はしない
Edit advanced config? (y/n)
y/n> n
リモートの設定を自動でしない(ターミナルで設定しているのでnを選択)
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y/n> n
表示されるリンクをブラウザで開いて、rcloneによるアクセスを許可するとコードが表示されるのでコピーしてペーストする
Log in and authorize rclone for access
Enter verification code> *****
チームドライブとして設定しない
Configure this as a team drive?
y/n> n
設定した情報が表示されるのでOKならy
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
設定の終了
e/n/d/r/c/s/q> q
rclone コマンドで google ドライブにデータを転送する(rcloneインストール方法と使い方) (重要:エラーへの対処法)
⇒ rcloneの Client IDとClient secretを設定する。
Gdrive - API 403 userRateLimitExceeded エラーについて
※ camera_gdrive.shというシェルスクリプトを1時間ごとにcronで実行。(2020年12月)
3.サーボモーターを使ったカメラ用チルト台作成のための情報(やりかけ)
1)サーボモーターの使い方
ブルーバックスの記事 PDF P.18〜
SparkFun Hutを使う方法
Raspberry Pi カメラのパン・チルトをサーボで遠隔制御する
Setting Up the Pi Zero Wireless Pan-Tilt Camera
HiLetgo PCA9685ボードを使う方法
RaspberryPi+Python+PCA9685で複数のサーボを制御する!簡単! - KOKENSHAの技術ブログ → これを元に実装
2)WebIOPiの使い方
WebIOPiを使ってRaspberryPiのGPIOを外出先から操作する
WebIOPiを使ってブラウザからRaspberry PiのGPIOを操作してみる
「RaspberryPiで学ぶ電子工作」P.228
ラズパイ4対応 カラー図解 最新 Raspberry Piで学ぶ電子工作 作る、動かす、しくみがわかる! - ブルーバックスシリーズの特設ページ