Soracom

Users

スタートガイド
Home スタートガイド スターターキット商品 IoT 体験キット 〜簡易監視カメラ〜をセットアップする Getting Started

STEP 3: 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
--- 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 .
pi@raspberrypi.local's password:
test.jpg                                      100%  121KB 121.0KB/s   00:00
$ open test.jpg

観察画像 観察画像

Windows の場合

WinSCP など、SCP できるアプリケーションをインストールすると、手元の PC に画像を転送できます。

SORACOM Napter で Raspberry Pi を Web カメラとして使う

この操作は Raspberry Pi にログインして行います。Raspberry Pi に SSH 接続したウィンドウでコマンドを実行してください。

SORACOM Napter とは

SORACOM Napter は、IoT SIM を使用したデバイスへ簡単にセキュアにリモートアクセス (Web アクセス、SSH 接続、RDP 接続) できます。サーバー環境を用意したり、IoT デバイス側にエージェントなどをインストールしたりする必要はありません。

SORACOM Napter 概要 SORACOM Napter 概要

Napter 利用料金が発生します

オンデマンドリモートアクセスを作成すると Napter 利用料金が発生します。なお、Napter には無料利用枠があるため、無料利用枠内の利用であれば、Napter 利用料金が発生しません。詳しくは、SORACOM Napter のご利用料金 を参照してください。

パッケージのインストール

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
Adding user www-data to group video
$ sudo service apache2 restart

最後に CGI プログラムをダウンロードして設置します。

$ 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]
$ sudo chmod +x /usr/lib/cgi-bin/camera

SORACOM Napter のオンデマンドリモートアクセスを作成して Raspberry Pi の Web サーバーにアクセスする

この操作は必ず Raspberry Pi に USB ドングルを取り付けた状態で行ってください

  1. IoT デバイスで動作する Web アプリにアクセスする (TLS 接続) の手順に従って、Napter のオンデマンドリモートアクセスを作成し、Raspberry Pi の Web サーバーにアクセス (TLS 接続) します。

    • Raspberry Pi に取り付けた USB モデムで利用する IoT SIM にチェックを入れて、[操作][オンデマンドリモートアクセス] の順にクリックします。
    • オンデマンドリモートアクセス画面では、以下のように設定します。
      項目説明
      [接続方法]デバイスに接続する方法 (SORACOM Air または SORACOM Arc) を選択します。SORACOM Air で追加サブスクリプションを利用している場合は、複数のサブスクリプションが表示されます。ただし、Napter で利用するサブスクリプションを選択する必要はありません。オンライン が表示されているサブスクリプションが利用されます。
      [デバイス側ポート]80 を入力します。
      [アクセス可能時間]オンデマンドリモートアクセスを維持する時間 (リモートアクセスを許可する時間) を選択します。
      [TLS]アクセス元から SORACOM までを TLS 接続にするときは、チェックを入れます。チェックを外すと、アクセス元から SORACOM までも、暗号化されていない HTTP 通信となります。
      [アクセス元 IP アドレスレンジ]デバイスにリモートアクセスできる IP アドレスレンジをグローバル IP アドレスで指定します。空欄の場合は、ユーザーコンソールを操作している PC のグローバル IP アドレスが設定されます。
    • アクセス情報が表示された画面の [HTTPS] に表示されている URL (https://xxx-xxx-xxx-xxx.napter.soracom.io:yyyyyy) をコピーします。
  2. [HTTPS] に表示された URL (https://xxx-xxx-xxx-xxx.napter.soracom.io:yyyyyy) にパス /cgi-bin/camera を加えた https://xxx-xxx-xxx-xxx.napter.soracom.io:yyyyyy/cgi-bin/camera に、お手元の PC のブラウザでアクセスします。

    リアルタイムな静止画が確認できます。

    ブラウザをリロードすると新しい画像を撮影します。カメラの位置を決定するときに便利です。 一度位置を固定したら、カメラの位置や対象物の下にビニールテープなどで位置がわかるように印をしておくとよいでしょう。 なお、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
--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]
$ sudo chmod +x take_picture.sh
$ ./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 でアクセスしてみましょう。

[HTTPS] に表示された URL (https://xxx-xxx-xxx-xxx.napter.soracom.io:yyyyyy) に /images/ パスを加えて、https://xxx-xxx-xxx-xxx.napter.soracom.io:yyyyyy/images/ にアクセスするとファイルが確認できます。

あとはこれを定期的に実行するように設定しましょう。

cron 設定

定点観測をするために、cron を設定して定期的に画像を撮影しましょう。

以下のコマンドを実行し、crontab の編集画面を開きます。

$ 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

編集画面が開いたら、以下のように追記すると、毎分撮影されます。

* * * * * ~/take_picture.sh &> /dev/null

画像サイズは場合にもよりますが、640 x 480 ピクセルでだいたい 150 KiB 前後です。毎分撮影した場合のデータ容量は、1 日に約 210 MiB 程度です。

画像を撮影する間隔が狭ければ狭いほど、タイムラプス動画にした際に滑らかな動画になります。一方で、SD カードの容量には限りがありますので、もし長期に渡り撮影をするのであれば、以下の例 1 のように 5 分ごとに撮影を行ったり、例 2 のように毎時 0 分に撮影を行ったりして、間隔を調整するとよいでしょう。

例 1:

*/5 * * * * ~/take_picture.sh &> /dev/null

例 2:

0 * * * * ~/take_picture.sh &> /dev/null

設定を書き込んだら、[Ctrl+X] を押して保存し、[y] => [Enter] を押して crontab 編集画面を閉じてください。