SORACOM Napter で Raspberry Pi を Web カメラとして使う
Raspberry Pi に USB のカメラ(いわゆる Web カメラ)を接続してみましょう。本キットでは Buffalo 社の BSWHD06M シリーズを使用しています。
セットアップ
接続
USB カメラは、Raspberry Pi の USB スロットに接続してください。
パッケージのインストール
fswebcam というパッケージを使用します。apt コマンドでインストールしてください。
実行コマンド
sudo apt install -y fswebcam
トラブルシュート: E: Unable to fetch some archives, maybe run apt update or try with –fix-missing? と表示されたら、 sudo apt update を行ってから、再度 apt install してみてください。
コマンドラインによるテスト撮影
実際に撮影してみましょう。 -r オプションで解像度を指定する事ができます。
実行コマンド
fswebcam -r 640x480 test.jpg
実行例
pi@raspberrypi:~ $ fswebcam -r 640x480 test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test.jpg'.
scp コマンドなどを使って、PC にファイルを転送して開いてみましょう。
Mac の場合
この操作はお手元の Mac で行ってください。Raspberry Pi にログインする必要はありません。
新しい Terminal ウィンドウを開き以下のコマンドを実行します。
実行コマンド
scp pi@raspberrypi.local:test.jpg .
実行例
~$ scp pi@raspberrypi.local:test.jpg .
pi@raspberrypi.local's password:
test.jpg 100% 121KB 121.0KB/s 00:00
~$ open test.jpg
Windows の場合
WinSCP など、SCP できるアプリケーションをインストールすると、手元の PC に画像を転送できます。 もし難しければ、次に進んで Web ブラウザ経由でも確認できますので、スキップして構いません。
SORACOM Napter で Raspberry Pi を Web カメラとして使う
この操作は Raspberry Pi にログインして行います。Raspberry Pi に SSH 接続したウィンドウでコマンドを実行してください。
SORACOM Napter とは
SORACOM Napter (以降、Napter) は、IoT SIM を使用したデバイスへ簡単にセキュアにリモートアクセスすることができます。お客様はサーバー環境を用意することなく、また IoT デバイス側にエージェント等をインストールすることなく、IoT SIM を利用している IoT デバイスにリモートからセキュアな Web アクセスや SSH, RDP 接続が可能になります。
注意 SORACOM Napter を使うには追加の費用がかかります SIM 1 枚当たり 330 円 (月額) ※月に 1 度でもリモートアクセスを行った場合、月額費用が発生します。当月内は月額費用内で何度でもご利用できます。
パッケージのインストール
Raspberry Pi を Web サーバにして、アクセスした時にリアルタイムの画像を確認できるようにしてみましょう。
まず apache2 パッケージをインストールします。
実行コマンド
sudo apt install -y apache2
インストールができたら、CGI が実行できるようにします。
実行コマンド
sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/
sudo gpasswd -a www-data video
sudo service apache2 restart
実行例
pi@raspberrypi:~ $ sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/
pi@raspberrypi:~ $ sudo gpasswd -a www-data video
Adding user www-data to group video
pi@raspberrypi:~ $ sudo service apache2 restart
最後に CGI プログラムをダウンロードして設置します。
実行コマンド
sudo wget -O /usr/lib/cgi-bin/camera https://soracom-files.s3.amazonaws.com/camera
sudo chmod +x /usr/lib/cgi-bin/camera
実行例
pi@raspberrypi:~ $ sudo wget -O /usr/lib/cgi-bin/camera https://soracom-files.s3.amazonaws.com/camera
--2019-10-01 16:33:36-- https://soracom-files.s3.amazonaws.com/camera
Resolving soracom-files.s3.amazonaws.com (soracom-files.s3.amazonaws.com)... 52.219.4.73
Connecting to soracom-files.s3.amazonaws.com (soracom-files.s3.amazonaws.com)|52.219.4.73|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 374 [text/plain]
Saving to: ‘/usr/lib/cgi-bin/camera’
/usr/lib/cgi-bin/camera 100%[=====================================================================================>] 374 --.-KB/s in 0.001s
2019-10-01 16:33:36 (401 KB/s) - ‘/usr/lib/cgi-bin/camera’ saved [374/374]
pi@raspberrypi:~ $ sudo chmod +x /usr/lib/cgi-bin/camera
SORACOM Napter を有効にする
この操作は必ず USB ドングルを挿した状態で行ってください
SORACOM Napter を使うには、SIM の設定で、リモートオンデマンドアクセス を有効にする必要があります。
‘SIM 管理’ 画面で、アクセスしたい SIM を選択し [操作] > [オンデマンドリモートアクセス] を選択してください。
“デバイス側ポート” を 80 に設定し、“TLS"のチェックボタンを有効にして"OK” を選択します。
以下のような画面が出ていれば有効化に成功しています。“HTTPS: " に表示されている文字列 https://[Napter のホスト名]:[ポート番号]
をコピーします。
※SORACOM Napter ではデバイスの IP アドレス・ポート番号を SORACOM 側で変換して異なる IP アドレス・ポート番号でアクセスできるようにしています。下図の場合はユーザーからの 39105 番ポートへのアクセスをデバイスの 80 番ポートに変換します。
※“TLS” を有効にすることでアクセス元の端末 (PC など) から SORACOM プラットフォームまでを TLS で接続できます。SORACOM プラットフォームからデバイスは閉域網接続なため、セキュアなリモートアクセスを実現できます。
お手元の PC のブラウザからパス /cgi-bin/camera
を加えて https://[Napter のホスト名]:[ポート番号]/cgi-bin/camera
にアクセスしてみましょう。リアルタイムな静止画が確認できます。
リロードをするたびに、新しく画像を撮影しますので、撮影する対象の位置決めをする際などに使えると思います。 一度位置を固定したら、カメラの位置や対象物の下にビニールテープなどで位置がわかるように印をしておくとよいでしょう。 なお、SORACOM Napter のアクセス可能時間はデフォルトで 30 分です。アクセス可能時間を過ぎた場合は再度有効にしてアクセスしてください。
定点観測を行う
毎分カメラで撮影した画像を所定のディレクトリに保存してみましょう。
準備
まず保存するディレクトリを作成して、アクセス権限を変更します。
実行コマンド
sudo mkdir /var/www/html/images
sudo chown -R pi:pi /var/www/html/
スクリプトのダウンロードと実行
次にスクリプトをダウンロードしてテスト実行してみましょう。
実行コマンド
sudo wget http://soracom-files.s3.amazonaws.com/take_picture.sh
sudo chmod +x take_picture.sh
./take_picture.sh
実行例
pi@raspberrypi:~ $ sudo wget http://soracom-files.s3.amazonaws.com/take_picture.sh
--2016-07-19 02:19:01-- http://soracom-files.s3.amazonaws.com/take_picture.sh
Resolving soracom-files.s3.amazonaws.com (soracom-files.s3.amazonaws.com)... 54.231.228.9
Connecting to soracom-files.s3.amazonaws.com (soracom-files.s3.amazonaws.com)|54.231.228.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 444 [text/plain]
Saving to: ‘take_picture.sh’
take_picture.sh 100%[====================================>] 444 --.-KB/s in 0.001s
2016-07-19 02:19:01 (451 KB/s) - ‘take_picture.sh’ saved [444/444]
pi@raspberrypi:~ $ sudo chmod +x take_picture.sh
pi@raspberrypi:~ $ ./take_picture.sh
checking current temperature ... 29.75 [c]
taking picture ...
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Setting title "Temperature: 29.75 (c)".
Writing JPEG image to '201607190219.jpg'.
現在の温度を取得して、温度をキャプションとした画像を保存する事に成功しました。
同じく SORACOM Napter でアクセスしてみましょう。/images/
パスを加えて
https://[Napter のホスト名]:[ポート番号]/images/
にアクセスするとファイルができていると思います。
あとはこれを定期的に実行するように設定しましょう。
cron 設定
定点観測をするために、cron を設定して定期的に画像を撮影しましょう。
以下のコマンドを実行し、crontab の編集画面を開きます。
実行例
pi@raspberrypi:~ $ crontab -e
no crontab for pi - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]]: 1 (1を選択します)
crontab: installing new crontab
編集画面が開いたら、以下のように crontab に追記すると、毎分撮影となります。
* * * * * ~/take_picture.sh &> /dev/null
画像サイズは場合にもよりますが、640x480 ドットでだいたい 150 キロバイト前後になります。 もし毎分撮った場合には、1日に約 210MB 程度の容量となります。 画像を撮る感覚が狭ければ狭いほど、タイムラプス動画にした際より滑らかになりますが、SD カードの容量には限りがありますので、もし長期に渡り撮影をするのであれば、
*/5 * * * * ~/take_picture.sh &> /dev/null
のように5分毎に撮影を行ったり、
0 * * * * ~/take_picture.sh &> /dev/null
のように毎時0分に撮影を行ったりする事で、間隔を間引いてあげるとよいでしょう。
設定を書き込んだら、[Ctrl+X] を押して保存し、[y] => [Enter] を押して crontab 編集画面を閉じてください。