3G定点カメラを作りたい方向けの過不足ない記事を書きたいと思ってまとめました。うまくいったかはわかりませんが。
ハードウェアのセットアップについては普通に長々書いていますので、そちらに興味がない方は直接ソフトウェアのセットアップに移ってください。
だいたいだれかやっていることのまとめですが、レーザーカッターにアクセスできる方のために、突っ張り棒用のラズパイアタッチメントのデータもつけちゃいます。
使ったもの
・Raspberry Pi 2 Model B
・Raspberry Pi カメラモジュール
・3GPI(Raspberry Pi 向け3G通信モジュール)
・SORACOM Air SIM
・つっぱり棒 NSW-10 by 平安伸銅工業 (直径約22mm)
・Dropbox Uploader と Dropboxアカウント(あらかじめ作っておいてください)
ハードウェアのセットアップ
なにはともあれラズパイです。前回うっかりVer.1を使って顰蹙を買ったので、よく部屋を探してみたらありましたよ。目下ベストセラー(?)のラズパイ2 Model B。やっぱこれだね!
4連USBがとても素敵。
まずさっさとカメラモジュールをつけてしまいます。白いところを持ち上げて、カメラモジュールの接点を差し込んだら白いところをぱちんと押し込んで完了です(音はしません ^^;)
そして、とにかく簡単にラズパイを3G接続させようと思ったらメカトラックスの3GPI一択です。その簡単さは折り紙付きです。ソフトウェアの設定を一切する必要なく、シールドを取り付けるだけで本当に3Gにつながります。3GPIの内容物はこんな感じです。
3GPIを使う場合は、自分でSDカードにOSイメージを焼く必要はありません。すでにRaspbianが書きこまれたSDカードが同梱しているので、それをラズパイに挿せば完了です。ラズパイ2 Model BはMicro SDなので、アタッチメントを外してちっちゃい方だけラズパイに挿入します。
私がたまたま持っていたSIMはSORACOM AirのナノSIMだったので、アダプターを付けて標準SIMサイズにした上で3GPIに装着しました。
全体をくみ上げるとこんな感じになります。
右奥に写っているUSBケーブルはラズパイと3GPIとの通信用で、電源用ではないので注意してください。電源は左側に写っているものだけです。つまり3GPI側にだけ電源を供給すれば、ラズパイ本体の方にはそちらから電源供給されます。ラズパイ本体の電源よりも安定だそうです。
最後にこれをつっぱり棒にくっつけます。以下のようなアタッチメントを作りました。
ラズパイに取り付けるとこんな感じになります。
つっぱり棒にパチッとくっつけられます。
このアタッチメントは、5mm厚の白アクリル板をレーザーカッターで切断して作っています。元データはこちらにあります。平安伸銅工業さんのNSW-10という、直径約22mmのつっぱり棒用に試行錯誤して作りましたが、ちょっとした厚さやたわみの違いですぐ破損してしまうので、うまくいったとしてせいぜい仮留め程度だと考えて下さい。カッターの種類によっても、うまくいったりいかなかったりかもしれません。きちんと止めるには、紐みたいのでぐるぐるするとかガムテープで留めるとかの方がよいと思います。
余談ですが、現在おうちハック界ではつっぱり棒がブームになっています。IoTはインターネット・オブ・つっぱり棒だという説もあるくらいです。家の中のいろんなところにガジェットを配置できてとても便利なので、ぜひいろいろアイデアを考えてほしいと思います。
ソフトウェアのセットアップ
以下のコマンドは、ブラウザを使うところ以外は全てラズパイのコンソールで入力するものです。
ラズパイに直接ディスプレイやキーボードをつないで操作してもいいですし、リモートからsshで入って操作しても構いません。
カメラの有効化
デフォルトだとカメラが有効になっていないので有効化します。
sudo raspi-config
で出てくるリストから「Enable camera」を選び、最後に請われるままにリブートします。
再起動が完了すると、以下のコマンドで写真が撮れるようになっています。
raspistill -o cam.jpg
Dropboxにファイルをアップロードする設定
次に撮った写真をDropboxにアップロードするようにします。残念ながらラズパイではWindowsやLinux版のように、特定のフォルダにファイルを置くだけで自動的にファイルがアップロードされるようなクライアントソフトは提供されていないので、 Andrea Fabriziさんが作られている「Dropbox Uploader」というソフトを使って、コマンドラインで明示的にアップロードを行うようにします。
※この記事も参考にさせていただきました。
まずDropbox Uploaderを落としてきます。どこでもいいのですが、一時的なフォルダ感のある/tmp以下にしてみました。もちろんホームディレクトリでも問題ありません。
cd /tmp
git clone https://github.com/andreafabrizi/Dropbox-Uploader/
使うのはdropbox_uploader.shというスクリプトのみなので、これを/usr/local/binに置いておきます。これでインストール完了です。
sudo cp Dropbox-Uploader/dropbox_uploader.sh /usr/local/bin
早速走らせてみます。
dropbox_uploader.sh
すると
# App key:
とプロンプトが出て停止すると思います。ここに入力する情報を次に作るので、しばらくこのままにしておきます。
上の方にやることリストが出ているので、それを実施します。ブラウザでhttps://www.dropbox.com/developers/appsを開くように言われているので、PCなどからここを開いて自分のアカウントでログインすると、Dropboxのアプリを作成するページになります。
そこで「Create App」をクリックします。いくつか設定項目があります。以下のようにしてください。
-
Choose an API
「Dropbox API」か「Dropbox Business API」が選べますが、ビジネスをする気はないので「Dropbox API」 -
Choose the type of access you need
「App folder」にします。 -
Name your app
任意ですが、すでに他の人が使っている名前とかぶっていはいけないので、適当に試行錯誤しながらオリジナルな名前を付けてください。ここでは「RaspberryPi_MyRoom4649」という名前にしました。
最後にライセンス条項に同意するチェックを入れて「Create App」ボタンを押すと、アプリが作成されて情報が表示されるので、この中に含まれているApp keyとApp Secret(Showというリンクをクリックすると表示されます)を、先ほどのdropbox_uploader.shのプロンプトにひとつづつ入力します。
すると、Permission typeを聞かれますので、aと入力してEnter。
次に、これでよいか確認が出るので、yと入力してEnterします。
最後にまたもう一つurlが表示され、そこにアクセスしてと言われるので、PCのほうのブラウザでもう一度それを開きます。
ブラウザではアクセスを許可するか問い合わせられているので、「許可」ボタンを押します。
できたくさいです。
ラズパイのコンソールに戻って、Enterを押せば完了です。
Dropboxのフォルダ内にアプリ/RaspberryPi_MyRoom4649 というフォルダができ、Dropboxから連携した旨メールが届きます。
では、いよいよラズパイで撮影した写真をDropboxにアップロードしてみましょう。
この記事の最初の方で撮った写真がcam.jpgというファイル名で残っているはずなので、これをアップロードします。
できたようですね。Windowsで、アップロードされたファイルがローカルに落とされた時の通知が出ました。
定時実行
ここまでできたら、あとはこれを定期的に実行するだけです。
まず、写真を撮ってDropboxにアップロードするシェルスクリプトを作りましょう。以下のファイルを/home/pi/shoot
に保存してください。
raspistill -w 320 -h 240 -o cam.jpg
timestamp=`date +%F_%H-%M-%S`
/usr/local/bin/dropbox_uploader.sh upload /home/pi/cam.jpg $timestamp.jpg
raspistill
はデフォルトでは背伸びをして2592 x 1944もの大画像をセーブしてしまうため、320 x 240でセーブするようにオプションを指定します。
このファイルをcronで定期的に呼ぶようにしましょう。
crontab -e
と打ちこんでエディタを起動し、最後の行に次のように書いてください。(この記事を参照しました)
*/15 * * * * /bin/bash /home/pi/shoot
nanoエディタを使った場合、セーブして終了するにはctrl-X
,Y
,[Enter]
です。
これで15分間隔でshootが呼ばれ、画像ファイルがDropboxに自動的にあがっていきます。
使ってみた
このようにカメラをぶら下げる形だと、180°回転した画像になってしまうので、shootの一行目のraspistillにオプションを追加して、回転をキャンセルするといいでしょう。
raspistill -vf -w 320 -h 240 -o cam.jpg
追記:-hfをすると左右反転してしまうとのことでオプション減らしました。Ichiro_Tsujiさんありがとうございます!!
他にもいろいろオプションを足せばフィルタかけたりもできるみたいですね!
まとめ
ラズパイを定点カメラにしてDropboxに写真をあげるなんてのはもはや定番のサンプルプログラムと言えるかもしれませんが、3GPIを使うことで屋外だろうが車の中だろうがキャンプ中だろうが、電源さえ取れれば定点カメラ撮影をすることができます。
また、突っ張り棒と組み合わせれば、設置できる場所も飛躍的に増えると思います。ぜひ使ってみてください!