カメラ付き Raspberry Pi Zero WH で画像を Dropbox にアップロードする方法

前書き

Raspberry Pi Zero WH (以降、ラズパイゼロ) に取り付けたカメラで写真 (画像) を撮るところまでセットアップが終わったら、その画像をどうするかを考えます。

画像がラズパイゼロの中にあるままだと閲覧しにくく、且つ扱いも難しいのでどこかに移動させることを考えました。色々やり方はあると思いますが、この記事ではラズパイゼロから Dropbox に画像をアップロードする方法について書いていきます。

ラズパイゼロが Wi-Fi でネットワークに繋がっていることを前提にしています。

ラズパイゼロの設定は ssh でログインしてコマンド操作で行いますが、Dropbox の設定 (API 設定) はパソコンからブラウザーを使って行います。

手法

GitHub に公開されている Dropbox-Uploader という bash スクリプトを使います。

以下のページにひと通り目を通すことをおススメします。

Dropbox-Uploader

https://github.com/andreafabrizi/Dropbox-Uploader/

本投稿で書いていくこともこのページの内容をベースにしています。

Dropbox-Uploader の設定方法

まず git コマンドで取ってくる

ラズパイゼロに ssh でログインしたら Dropbox-Uploader のスクリプト + 他を git コマンドで取ってきます。(curl でも取ってこれるようです)

$ pwd
/home/pi
$ mkdir bash
$ cd !$
cd bash
$ git clone https://github.com/andreafabrizi/Dropbox-Uploader.git
Cloning into 'Dropbox-Uploader'...
remote: Enumerating objects: 1020, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 1020 (delta 12), reused 15 (delta 5), pack-reused 993
Receiving objects: 100% (1020/1020), 355.66 KiB | 646.00 KiB/s, done.
Resolving deltas: 100% (540/540), done.
$ ls -l
合計 4
drwxr-xr-x 3 pi pi 4096 12月 25 04:59 Dropbox-Uploader
$ cd Dropbox-Uploader/
$ ls -l
合計 136
-rw-r--r-- 1 pi pi 8444 12月 25 04:59 CHANGELOG.md
-rw-r--r-- 1 pi pi 297 12月 25 04:59 Dockerfile
-rw-r--r-- 1 pi pi 322 12月 25 04:59 Dockerfile.pi
-rw-r--r-- 1 pi pi 35147 12月 25 04:59 LICENSE
-rw-r--r-- 1 pi pi 9373 12月 25 04:59 README.md
-rwxr-xr-x 1 pi pi 8680 12月 25 04:59 dropShell.sh
-rwxr-xr-x 1 pi pi 52505 12月 25 04:59 dropbox_uploader.sh
-rwxr-xr-x 1 pi pi 2592 12月 25 04:59 testUnit.sh
$ chmod 744 dropbox_uploader.sh 
$ ls -l !$
ls -l dropbox_uploader.sh
-rwxr--r-- 1 pi pi 52505 12月 25 04:59 dropbox_uploader.sh
$

Dropbox-Uploader の正体は dropbox_uploader.sh というファイルです。git コマンドで取ってきた後 chmod コマンドで実行権限を付与しています。

Dropbox-Uploader を設定する

はじめて dropbox_uploader.sh を実行すると、以下のようにガイダンス (手順) が表示されるので、それに沿って設定していく流れになります。

$ ./dropbox_uploader.sh

This is the first time you run this script, please follow the instructions:

(note: Dropbox will change their API on 2021-09-30.
When using dropbox_uploader.sh configured in the past with the old API, have a look at README.md, before continue.)

1) Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps
2) Click on "Create App", then select "Choose an API: Scoped Access"
3) "Choose the type of access you need: App folder"
4) Enter the "App Name" that you prefer (e.g. MyUploader21060942425799), must be unique

Now, click on the "Create App" button.

5) Now the new configuration is opened, switch to tab "permissions" and check "files.metadata.read/write" and "files.content.read/write"
Now, click on the "Submit" button.

上記の 1 〜 5 までを順に簡単に説明していきます。
1 は Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps なので、Dropbox の API のページ https://www.dropbox.com/developers/apps にアクセスして Dropbox にログインします。ラズパイゼロは GUI がない (ブラウザーがない) のでパソコンを使って Dropbox にログインします。

Dropbox にログインしようとすると 2 段階認証が必要となりました。

メールボックスに以下が届いていましたのでこのコード (292902) を入力して Dropbox にログインしました。

2 は Click on “Create App”, then select “Choose an API: Scoped Access” なので Create app をクリックします。

3 は “Choose the type of access you need: App folder” です。 App folder にチェックを入れます。

4 は Enter the “App Name” that you prefer (e.g. MyUploader20150932426789), must be unique となっています。アプリの名前を決めてくださいということなので入力します。

PiUploader20221225 というアプリ名にしてみました。Create app をクリックします。

5 は Now the new configuration is opened, switch to tab “permissions” and check “files.metadata.read/write” and “files.content.read/write” です。

これはアプリ (具体的には dropbox_uploader.sh) が Dropbox でどういう操作ができるのか、その権限を設定します。

まず permissions タブをクリックします。

そして、Files and folders の下にある

  • files.metadata.write
  • files.metadata.read
  • files.content.write
  • files.content.read

にチェックを入れて、Submit をクリックします。

ここまでで 1 〜 5 が終わりました。

最後は 6 です。App key と App secret を入力するよう求められます。

6) Now to tab "settings" and provide the following information: 

App key: 
App secret:

ブラウザー側で App key と App secret を確認してコピペします。

そうすると、以下の青字 URL にアクセスして表示されるアクセスコードを入力するように (Please provide the access code: の箇所) 求められます。

App key: 01x2abc345defgh 
App secret: 9zxyts8wpqru7l6 
Open the following URL in your Browser and allow suggested permissions: https://www.dropbox.com/oauth2/authorize?client_id=01x2abc345defgh&token_access_type=offline&response_type=code 
Please provide the access code: Ixlw7a-hAQbCVRYUJKxOxdwLymnQPbvy5or3NE_Acd7

> App key: 01x2abc345defgh 
> App secret: 9zxyts8wpqru7l6
> Access code: 'Ixlw7a-hAQbCVRYUJKxOxdwLymnQPbvy5or3NE_Acd7'. Looks ok? [y/N]: y 
The configuration has been saved. 
$

上記青字 URL にアクセスすると、以下の確認が表示されます。

続行する をクリックすると、以下の画面が表示されます。許可 をクリックします。

そうすると、以下のようにアクセスコード Ixlw7a-hAQbCVRYUJKxOxdwLymnQPbvy5or3NE_Acd7 が表示されます。

これを Please provide the access code: の箇所で入力したわけです。

ここまでやると Dropbox-Uploader の設定は完了です。

ここからは、ラズパイゼロからファイルをアップロードできるようになったかを確認していきます。

Dropbox のどこにアップロードされるのか?

ラズパイゼロからファイルをアップロードする前に、そもそも Dropbox のどこにアップロードされるのかについて書いておきます。

ここまでの設定を行うことで Dropbox のトップに「アプリ」というディレクトリーができます。以下の画像は、これをスマホの Dropbox アプリから確認したときのものです。

さらにこの「アプリ」ディレクトリーの中にアプリ名のディレクトリーが作られます。

↑ の手順で PiUploader20221225 というアプリを作ったので、この名前のディレクトリーが「アプリ」ディレクトリーの中に作られます。

上記の画像では更に日付ディレクトリー (20221225) が作られていますが、このように任意のディレクトリーを作ってそこに保存するなんてことができるようになっています。

ラズパイゼロから Dropbox に画像をアップロードする方法

ファイルをアップロードする方法は GitHub のページ にサンプルコマンドが記載されているので、それを見ながらやるのが良いと思います。

以下に僕が実行したサンプルコマンドを載せておきます。

$ ./dropbox_uploader.sh upload /var/log/motion/image/*.jpg /
> Uploading "/var/log/motion/image/20221225-052015-01.jpg" to "/20221225-052015-01.jpg"... DONE
> Uploading "/var/log/motion/image/20221225-052015-02.jpg" to "/20221225-052015-02.jpg"... DONE
> Uploading "/var/log/motion/image/20221225-052016-00.jpg" to "/20221225-052016-00.jpg"... DONE
> Uploading "/var/log/motion/image/20221225-052016-01.jpg" to "/20221225-052016-01.jpg"... DONE
> Uploading "/var/log/motion/image/20221225-052016-02.jpg" to "/20221225-052016-02.jpg"... DONE
> Uploading "/var/log/motion/image/20221225-052017-00.jpg" to "/20221225-052017-00.jpg"... DONE
> Uploading "/var/log/motion/image/20221225-052017-01.jpg" to "/20221225-052017-01.jpg"... DONE
$

dropbox_uploader.sh を実行して ファイルをアップロードするよう 1 個目の引数 upload で指定しています。

その後ろにある 2 個目の引数 /var/log/motion/image/* がアップロード対象のファイルです。ラズパイゼロの /var/log/motion/image ディレクトリー配下にあるファイルをすべてアップロードするよう指定しています。

3 個目の引数 / は、アップロード先のディレクトリー指定です。/ と書くことで、「アプリ」ディレクトリーの中にあるアプリ名ディレクトリーにファイルがアップロードされます。

dropbox_uploader.sh に upload の代わりに mkdir を指定すれば、Dropbox 側にディレクトリー (たとえば日付ディレクトリーとか) を作ることが可能なので僕の場合はこれと組み合わせて使っています。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください