2013年8月2日金曜日

RaspberryPi #10 WebカメラをWeb越しに操作してみよう

第8回にてWebカメラからのキャプチャ画像を定期的にDropboxにアップするようにした。cronで10分周期にセットしたけれども、「今のタイミングのキャプチャが欲しい!」ということもある。この場合はどうするか。

自宅のブロードバンドルータに接続したRaspberryPiには当然グローバルIPアドレスなんてセットしていない。ブロードバンドルータから割り当てられたプライベートIPアドレスにネットワーク越しにアクセスする方法は簡単には実現できそうにない。
というわけで方法としてはRaspberryPi側から「なんか指示ありませんか?」と定期的にポーリングをしかける方法しかないのだ。

ここではDropboxのフォルダを10秒周期チェックして、「shot」というフォルダがあるとそのタイミングでキャプチャをアップロードする、という仕様にした。
そのシェルが以下の通り。

#!/bin/bash

while :
do
        /home/pi/Dropbox-Uploader/dropbox_uploader.sh list | grep shot
        if [ $? -eq 0 ] ; then
                fswebcam -d /dev/video0 -p YUYV -D 2 -S 16 -r 640x480 --jpeg 75 /home/pi/shoot.jpg
                /home/pi/Dropbox-Uploader/dropbox_uploader.sh upload /home/pi/shoot.jpg /shoot.jpg
                /home/pi/Dropbox-Uploader/dropbox_uploader.sh delete /shot/
        fi
        sleep 10
done

パスやファイル名は適宜読み替えてほしい。
ここでは10秒周期にしているが、最後のsleepを短くすればよりリアルタイムに近い形で反応できるだろう。Dropboxに怒られるかもしれないが。

で、起動時にこれを起動しておいてもらおう。
sudo vi /etc/rc.local
としてrc.localファイルに以下の記述を追加する。尚、ここでは上記作成スクリプトを「manual_shot.sh」としている。

sudo -u pi /home/pi/manual_shot.sh &

sudoでユーザpiとして実行していることに注意。
Dropbox-Uploaderのセットアップ時にDropboxのAppキーなどを設定したが、実行ユーザが異なると再設定が必要になるので、セットアップを実行したユーザで実行する必要がある。