SORACOM IoT レシピ:IoTで手軽な監視カメラシステム
Raspberry Pi と USB カメラで作る「定点カメラデバイス」
公開日: 2020年4月
レシピ難易度:★★★★☆
お家のペットやご家族の見守りがしたい、防犯用にカメラを取り付けたいと思ったことはありませんか?既製品のネットワークカメラを購入することでも簡単に実現できますが、本レシピではIoTテクノロジーを体験しながらDIYで監視カメラシステムを作成することを支援します。
IoTのプロトタイピング用途から実際のビジネス現場活用の用途まで幅広く採用されるマイクロコンピュータの Raspberry Pi を使いますので、IoTシステムの構築を学ぶ目的にも適しています。
Raspberry Pi 用 OS Raspbianの操作など、プログラミングの基礎知識が必要になります。プログラミングの基礎知識をお持ちの方による作業が必要なレシピになりますので予めご了承ください。
全体構成
使用する SORACOM サービス
- データ通信サービス SORACOM Air
- データ収集・蓄積サービス SORACOM Harvest Data
- ダッシュボード作成・共有サービス SORACOM Lagoon
本レシピを行うのに必要な時間、概算費用
本レシピは以下の通りです。
- 必要な時間: 約150分
- 概算費用: 約23,710円
※ 概算費用: ハードウェアや SORACOM を始めとした各種サービスの概ねの費用 (送料などの付帯費用や無料枠適用は考慮しないものとしています)
このコンテンツの進め方
上から内容を読み進みながら作業を行なっていきます。また左サイドに追従する目次からページ内の移動が可能です。
本コンテンツは現状のままで提供され、株式会社ソラコムは、誤りがないことの保証を含め、明示であると黙示であるとを問わず、本コンテンツの記載内容につき、いかなる種類の表明も保証も行いません。
掲載情報の閲覧及び利用により、利用者自身、もしくは第三者が被った損害に対して、直接的、間接的を問わず、株式会社ソラコムは責任を負いかねます。
本コンテンツを実践する中で用意された機器、利用されたサービスについてのご質問は、それぞれの機器やサービスの提供元にお問い合わせをお願いします。機器やサービスの仕様は、本コンテンツ作成当時のものです。
株式会社ソラコムが提供する機器・サービスについてのご質問はフォームで受け付けております。機器・サービスご利用前の導入相談は https://soracom.jp/contact/ に、機器・サービスご利用開始後のサポートは、SORACOMユーザーコンソール内のサポートサイトから「リクエストを送信」(要ログイン)にてお問い合わせください。
Copyright (c) 2023 SORACOM, INC.
準備
本レシピを行うためには以下のものをご用意ください。
ハードウェア
品名 | 数量 | 価格 | 備考 |
IoT 体験キット 〜簡易監視カメラ〜 | 1 | 19,778円 | キットの中には以下のものが含まれています。それぞれを個別に準備しても構いません。 ・Raspberry Pi 3 Model B+ 本体 x 1台 ・Raspberry Pi 3 用電源アダプタ x 1個 ・microSD (16GB以上) x 1枚 ・AK-020 (USB ドングル型モデム) x 1個 ・SORACOM 特定地域向け IoT SIM (plan-D 標準サイズ) x 1枚 ・Web カメラ (UVC 対応品) x 1個 ・温度センサー x 1つ (本レシピでは使いません) ・抵抗10kΩ x 1つ (本レシピでは使いません) |
microSD カードリーダー | 1 | 約1,600円 | Raspberry Pi OS をmicroSD に書き込む際に使用します。 |
有線 LAN (USB 型のアダプタ等形状問わず) | 1 | 約1,600円 | パソコンと Raspberry Pi の通信に使用します。 |
有線 LAN ケーブル | 1 | 約500円 | パソコンと Raspberry Pi の通信に使用します。 |
パソコン | 1 | ― | インターネット接続が可能でサイトへの接続が自由であること。Google Chrome 等の最新ブラウザーが利用可能な事。有線 LAN が接続できること。 |
Raspberry Pi は 4 model B でも動作確認できています。その際、電源アダプタは Raspberry Pi 4 対応のものをご用意ください。
※ 金額はレシピ作成時となります。金額は税込み・送料別です。その他は参考価格となります。
ご購入について
ハードウェアは以下よりご購入いただけます。
- IoT 体験キット 〜簡易監視カメラ〜
- microSD カードリーダー: エレコム カードリーダー MR3-C008BK
- 有線 LAN アダプタ : BUFFALO 有線LANアダプター LUA4-U3-AGTE-NBK
- 有線 LAN ケーブル : Amazon ベーシック LAN ケーブル
その他必要なもの
必要なもの | 費用 | 作成方法など |
SORACOM アカウント | 無料※ | SORACOM アカウントの作成 (JP) |
※ アカウント作成・維持の費用の料金です。
IoT 体験キット 〜簡易監視カメラ〜 が届いたら
IoT 体験キット 〜簡易監視カメラ〜(以下、IoT 体験キット) に同梱されている SIM は、SORACOM に登録することで通信が出来るようになります。そのため、まず IoT 体験キットに同梱されている SIM を SORACOM へ登録をしましょう。
※ すでに登録済み、もしくは登録済みの別の SIM を利用する場合は次へお進みください。
登録の方法は通販サイトやイベント等で入手した SIM を登録する (JP)をご覧ください。約5分で完了します。
登録が完了すると SIM 管理の一覧に表示されますので、確認ください。
Raspberry Pi 用 OS “Raspbian” を microSD に書き込む
Raspberry Pi Imager をダウンロードします。
Raspberry Pi のダウンロードページを開き、OS に合った Raspberry Pi Imager をダウンロードします。
Raspberry Pi Imager をインストールします。
Windows の場合
ダウンロードした imager.exe
を実行し、インストーラーの指示に従ってインストールを完了します。
インストール完了時の “Run Raspberry Pi Imager” はチェックを外した状態で[Finish]をクリックします。
macOS の場合
ダウンロードした imager.dmg
を実行し、 Raspberry Pi Imager を Applications (アプリケーション) フォルダへコピーします。
インストールが完了したら、Finder のデバイスに表示されている Raspberry Pi Imager は不要となります。取出しをしてください。
Raspberry Pi Imager を利用して microSD カードに書き込む
以下の場所にダウンロードされている”Raspberry Pi Imager”を起動します。
Windows | [スタートメニュー]> “Raspberry Pi Imager” |
macOS | [Finder]>[アプリケーション フォルダ]> “Raspberry Pi Imager” |
macOS で初回起動時に「インターネットからダウンロードされたアプリケーションです」のダイアログが表示された場合は[OK]をクリックして進めてください。
[OSを選ぶ]をクリックし[Raspberry Pi OS (other)]>[Raspberry Pi OS Lite (64-bit)]を選択します。
次に[ストレージを選ぶ]をクリックし[Generic MassStorageClass Media]を選択します。
次に右下の歯車マークをクリックし各種設定を行います。
macOSでは「Wifiのパスワードをシステムのキーチェーンから読み取って設定しますか?」というダイアログが出てくる場合があります。[Yes]から情報を入力すると、現在使用しているWi-Fiのパスワードが自動で入力されます。
はじめに[ホスト名][SSHを有効化する][ユーザー名とパスワードを設定する][Wi-Fiを設定する][ロケール設定をする]の5項目にチェックをつけます。
その後、以下のように入力してください。
項目 | 入力する内容 |
---|---|
ホスト名 | 初期設定の通り raspberrypi とします。 |
SSHを有効化する | 「パスワード認証を使う」にチェックを入れます。 |
ユーザー名とパスワードを設定する | [ユーザー名]を pi とします。 [パスワード]はこちらから安全なパスワードを生成し入力します。 ※ユーザー名は自由に設定可能です。パスワードは忘れないようにしてください。 |
Wi-Fiを設定する | [SSID]には Raspberry Pi から接続したいWi-FiのSSIDを入力します。 [パスワード]には、SSIDに対応するパスワードを入力してください。 [Wifiを使う国]は「JP」を選択してください。 ※SSIDの初期値には、パソコンで接続中のWi-FiのSSIDが表示されています。そのまま利用する場合には変更不要です。 |
ロケール設定をする | [タイムゾーン]に自分のお住まいの場所(日本の場合「Asia/Tokyo」) [キーボードレイアウト]に「us」が表示されていることを確認してください。 |
特に職場の Wi-Fi を利用する際には、ネットワーク管理者の了解を取るようにしてください。また、Wi-Fi 接続時に Web ブラウザ等による認証が必要なネットワークは利用できません。
以上の設定が終わったら[保存]をクリックし内容を保存します。
[書き込む]から書き込みを行い、完了したら microSD カードを取り出してください。
Raspberry Pi の起動から SSH ログイン、OS の最新化まで
Raspberry Pi の電源 ON
microSD を Raspberry Pi に取り付けます
少し残りますが奥までしっかりと刺さっていれば問題ありません。
有線 LAN で Raspberry Pi とパソコンを接続
Raspberry Pi の有線 LAN ポートと、パソコンの有線 LAN ポートをケーブルで接続します。
Raspberry Pi に microUSB (電源ケーブル) を接続
ケーブルを挿すと、電源 ON となります。(電源スイッチのようなものがありません)
しばらく経過(約1~2分)すると macOS もしくは Windows 10 (または Windows 11) から Raspberry Pi へリモートログイン出来るようになります。
SSH リモートログインの方法
Windows の場合
スタートメニューから「コマンドプロンプト」を起動します。
コマンドプロンプトで以下のように入力して実行します。
ssh pi@raspberrypi.local
Are you sure you want to continue connecting (yes/no)?
との問いには yes と入力します。- 初期パスワードはRaspberry Pi Imagerを使って設定したものを用います。
Windows 10の以前の場合(Windows 10 の最新版でない場合も同様)は、 Windows 用 Apple iTunes をインストールしないと Host not found となり、接続ができない場合があります。 (原因は mDNS が必要なため)
また、Raspberry Pi の電源が ON になる前にパソコンと有線 LAN で接続しないと、SSH リモートログインできない場合があります。
macOS の場合
[Finder]>[アプリケーション]>[ユーティリティ]>[ターミナル]を起動します。
Spotlight (検索) から “Terminal.app” を探して起動する方法もあります。
Terminal.app で以下のように入力して実行します。
ssh pi@raspberrypi.local
Are you sure you want to continue connecting (yes/no)?
との問いには yes と入力します。- 初期パスワードはRaspberry Pi Imagerを使って設定したものを用います。
OS の最新化
以降は Windows、macOS 共通の作業です。
Raspberry Pi へ SSH リモートログインしたあと、Raspberry Pi 側で以下を一行ずつ実行します。
sudo timedatectl set-timezone Asia/Tokyo sudo apt update && sudo apt upgrade -y sudo systemctl reboot
最後の1行で再起動となります。
SSH リモートログイン終了の方法
Raspberry Pi 側で以下を実行します。
exit
これで終了となります。コマンドプロンプト、もしくは Terminal.app を閉じることができます。
電源 OFF の方法
電源を OFF にする場合は SSH リモートログインした後、Raspberry Pi 側で以下を実行します。
sudo systemctl poweroff
この後 1分ほど経過して緑色 LED の点滅が止んだら microUSB ケーブルを抜きます。これで OFF にできます。
USB カメラの動作を確認する
Raspberry Pi 起動し SSH リモートログインが出来ることを確認してください。以降は、特に断りを入れない場合は SSH リモートログイン後の Raspberry Pi 側で実行します。
USB カメラを認識しているか確認する
USB カメラを Raspberry Pi に接続します。接続先 USB ポートはどこでも構いません。
USB カメラが接続されている状態で、 以下を実行します。
v4l2-ctl --list-devices
このような出力ならば USB カメラが認識できています。
bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 BUFFALO BSWHD06M USB Camera : (usb-3f980000.usb-1.1.2): /dev/video0 /dev/video1
Cannot open device … と表示されてしまったら?
以下のように出力された場合は USB カメラが認識できていません。
bcm2835-codec-decode (platform:bcm2835-codec):
/dev/video10
/dev/video11
/dev/video12
Cannot open device /dev/video0, exiting.
USB カメラを挿し直したり、他のカメラと変更してみてください。
もし認識できていない場合は以下のように Cannot open device ...
と表示されます。USB カメラを挿し直したり、他のカメラと変更してみてください。
USB カメラを動かしてみる
USB カメラの認識ができている事が確認できたら、以下を一行ずつ実行します。
sudo apt install fswebcam -y fswebcam -q --device /dev/video0 test1.jpg python3 -m http.server 8000
簡易的な Web サーバが Raspberry Pi 上で起動しました。
ここでホスト側のブラウザから http://raspberrypi.local:8000
を開き、ファイル一覧の中に表示された test1.jpg をクリックします。
カメラの画像が確認できればカメラが正常に動作している確認となります。
Raspberry Pi 側に戻り CTRL + C
を押して、Webサーバを止めます。
SORACOM Air によるインターネット接続
Raspberry Pi へ SSH リモートログインが出来ることを確認してください。以降は、特に断りを入れない場合は SSH リモートログイン後の Raspberry Pi 側で実行します。
setup_air.sh の実行
USB ドングル型モデムで SORACOM Air によるインターネット接続の一連の設定を自動化する setup_air.sh を実行します。
以下を一行ずつ実行してください。
curl -O https://soracom-files.s3.amazonaws.com/setup_air.sh sudo bash setup_air.sh
setup_air.shのダウンロードができない場合は?curl
の後の -O
は大文字のオーです。数字のゼロではないのでご注意ください。
USB ドングル型モデム (AK-020) に SIM を取り付け、Raspberry Pi に接続する
以下の図を参考に取り付けてください。
Raspberry Pi の USB ポートはどこでも構いませんが、この後に接続する USB カメラとの位置で競合しないようにしてください。USB ドングル型モデム、USB カメラ共に Raspberry Pi の電源が ON 状態でもいつでも抜き挿し可能です。
接続を確認する
USB ドングル型モデムの LED を注視し、接続状態(AK-020であれば緑色の点滅)になったのを見計らって、以下を実行します。
ping -c 4 pong.soracom.io
この時、期待される出力は以下の通りです。
PING pong.soracom.io (100.127.100.127) 56(84) bytes of data. 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=1 ttl=64 time=75.6 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=2 ttl=64 time=58.8 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=3 ttl=64 time=55.4 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=4 ttl=64 time=43.4 ms
これで Raspberry Pi から SORACOM Air を通じてインターネット接続が可能になりました。
カメラの画像を SORACOM Harvest Files にアップロードする
IoT ファイルの保管サービス「SORACOM Harvest Files」へ、定点カメラの画像をアップロードできるようにします。
SORACOM ユーザーコンソールにログインした後[Menu]>[SIM 管理]とクリックして SIM 管理画面を開きます。
USB ドングル型モデムに取り付けた SIM にチェックを付け、[操作]>[所属グループ変更]とクリックします。
SORACOM の便利な使い方: 複数の SIM を同時に扱う
チェックをつける対象を複数にすれば、一度の複数の SIM を対象に操作が可能です。
「新しい所属グループ」のプルダウンボックスをクリックした後、[新しいグループを作成…]をクリックします。
「グループ作成」のグループ名を入力して[グループ作成]をクリックします。
項目 | 例 | 備考 |
グループ名 | site-viewer | 自由に入力可能です。日本語も設定可能です。 |
新しい所属グループが先ほど作成したグループになっていることを確認したら[グループ変更]をクリックします。
自動的に SIM 管理画面に戻ります。
SIM の「グループ」に先ほど作ったグループが設定されていることを確認してください。
以上で、グループの作成と所属の作業は完了です。
SIM 管理画面から、先ほど割り当てたグループ名をクリックします。
[SORACOM Harvest Files 設定]をクリックし設定画面を開いた後、[ON]をクリックして設定できるようにします。その後以下のように設定します。
項目 | 値 |
デフォルトパス | /online-seminar/:time.jpg |
ロール | (空) |
最後に[保存]をクリックしてください。
SORACOM Harvest Files へテストでアップロードしてみる
以下を一行ずつ実行します。
fswebcam -q --device /dev/video0 test2.jpg curl -X POST -H 'Content-Type: image/jpeg' --data-binary '@test2.jpg' harvest-files.soracom.io
SORACOM Harvest Files 上にファイルができているか、確認します。
これで、カメラの画像を手動で SORACOM Harvest Files にアップロードできるようになりました。
送信先は harvest-files.soracom.io
と固定なのに、ファイルは上書きされないの?
SORACOM Harvest Files には「プレースホルダ機能」があります。これは「デフォルトパス」に書かれたルールに従って、アップロードされた時の情報に自動的に置き換えられるものです。今回は :time
というプレースホルダを利用しました。これはアップロード時の日時に自動置換されるため、アップロードの日時が異なればファイル名も異なるため、上書きされることはありません。
ファイルを作らずに直接送信できないか?
先ほどの例だと test2.jpg というファイルを作ってから送信するようにしていました。そうなると、Raspberry Pi 上でファイルの管理を行う手間が発生します。OS の “パイプ” を使うことで解決できます。
fswebcam -q --device /dev/video0 - | curl -X POST -H 'Content-Type: image/jpeg' --data-binary '@-' harvest-files.soracom.io
こうすることで、fswebcam の撮影データを直接 curl へ横流ししてアップロードができます。SORACOM Harvest Files のデフォルトパスのプレースホルダ機能と合わせると、Raspberry Pi 上でのファイル管理が一切不要となるため便利です。
SORACOM Harvest Files と SORACOM Lagoon を連動させる (Harvest Data での確認まで)
SORACOM Harvest Files は「ダウンロード」することでファイルの中身を確認できます。ところが画像ファイルであれば SORACOM Lagoon でも直接表示する事ができるので、連動させてみます。
SORACOM Harvest Files の追加設定
SIM 管理画面から、先ほど割り当てたグループ名をクリックします。
[SORACOM Harvest Files 設定]をクリックし設定画面を開いた後、Harvest Data 連携設定を[ON]にしたあと、追加で以下の設定します。
項目 | 値 |
保存対象のパス | /online-seminar/ |
最後に[保存]をクリックしてください。
SORACOM Harvest Files へテストでアップロードしてみる
以下を実行します。
fswebcam -q --device /dev/video0 - | curl -X POST -H 'Content-Type: image/jpeg' --data-binary '@-' harvest-files.soracom.io
SORACOM Harvest Data を確認する
SORACOM Lagoon と SORACOM Harvest Files の連携は「SORACOM Harvest Data に格納されているデータを SORACOM Lagoon が読み取る」ことで実現しています。
そのため、SORACOM Harvest Data にデータが作成されているかを確認します。
[Menu]>[SIM 管理]とクリックして SIM 管理画面を開きます。
SORACOM Harvest Data でデータの表示を行いたい SIM (USB ドングル型モデムに挿した SIM) にチェックを付け、[操作]>[データを確認]とクリックします。
以下のようにデータテーブルに url
が入ってれば成功です。
SORACOM Lagoon でダッシュボードを作成する(有効化まで)
設定と設置が完了したら、蓄積されたデータを SORACOM Lagoon で活用していきます。
SORACOM Lagoon 用語解説
ここで SORACOM Lagoon で使われる用語を解説します。
用語 | 意味 |
プラン | SORACOM Lagoon の契約プランです。プランによって機能と料金が異なり、今回は無料の Free プランを利用します。SORACOM Lagoon のご利用料金に機能や料金の比較表があります。 |
SORACOM Lagoon ユーザー(Lagoon ユーザー) | SORACOM Lagoon へログインするためのユーザー( ID とパスワードの組)です。 SORACOM ユーザコンソールへのログインとは異なるユーザ一覧となり、皆さん自身で登録・削除が可能です。ダッシュボードやパネルを編集できる「編集可能」と表示専用の「読み取り」の2段階の権限を設定できます。作成可能数はプランによります。 |
リソースの種類 | 表示するデータの種別です。SORACOM Lagoon では以下の4つの中から選び、その中からノード(SIMや回線)を選択します。 ・Air = SORACOM Air for セルラー (SORACOM IoT SIM) ・Lora = SORACOM Air for LoRaWAN デバイス ・Sigfox = SORACOM Air for Sigfox デバイス ・Device = SORACOM Inventory デバイス 今回はSIMなので、「Air」の SIM を選択します。 |
パネル (Panel) | パネルはデータを表示する領域です。データソースとメトリクスを指定すると、そのメトリクス(たとえば SIM )のデータをパネルで使えるようになります。様々なパネルが存在します。 |
ダッシュボード (Dashboard) | 複数のパネルを束ねて「1枚の画面」にしたものがダッシュボードです。共有の画面表示単位となります。 |
アラート (Alert) | リソースのメトリクスデータに対して条件を設定し、その条件を満たしたら通知を行う仕組みの事です。 |
データリフレッシュ | SORACOM Harvest から SORACOM Lagoon へデータが反映される事、もしくは反映タイミングとなります。反映タイミングはプランによります。 |
SORACOM ユーザーコンソールの[Menu]>[データ収集・蓄積・可視化]>[SORACOM Lagoon]とクリックします。
[SORACOM Lagoon の利用を開始する]をクリックします。
プランのうち Free の[選択する]ボタンクリックし、[次へ]をクリックします。
SORACOM Lagoon ユーザーの初期ユーザーに設定するパスワードを入力した後、[利用開始]をクリックします。
SORACOM Lagoon ユーザーの初期ユーザの ID は?
ID は SORACOM ユーザコンソールにログインしたときのメールアドレスが使われることになります。そのため、ここではパスワードのみ設定することになります。SORACOM ユーザコンソールへのログインとは異なるパスワードを設定する事を強くお勧めします。
利用開始がクリックできない場合は?
パスワードの条件が不足しています。全てに✔がつくようにパスワードを設定してください。
SORACOM Lagoon の有効化に成功すると、以下のように SORACOM Lagoon コンソールへのリンクが表示されます。
この画面を SORACOM Lagoon 管理画面と呼びます。SORACOM Lagoon 管理画面は、SORACOM Lagoon が有効化されている間は [Menu]>[データ収集・蓄積・可視化]>[SORACOM Lagoon]で表示する事ができます。
SORACOM Lagoon でダッシュボードを作成する(パネル作成まで)
SORACOM Lagoon コンソールへのログイン
SORACOM Lagoon 管理画面の[Lagoonコンソール]ボタンをクリックします。
メールアドレス (SORACOM ユーザコンソールへログインする際のメールアドレス) と、SORACOM Lagoon 初期ユーザ作成時に利用したパスワードでログインします。
ログインに成功すると、以下のような画面が表示されます。
背景を白くしたい
SORACOM Lagoon の標準では背景が黒となっています。これは設定で変更が可能です。左下のアイコンにカーソルを合わせて表示される[Preferences]をクリックします。
設定画面に “UI Theme” を “Light” に変更して[Save]ボタンをクリックすると、背景が白くなります。
作成アイコンにカーソルを乗せると表示される「Create」メニューから[Dashboard]をクリックします。
その後、保存アイコンのクリックで名前を付けて保存できます。適宜保存しておきましょう。
「Add Panel」→「Add an empty panel」でパネルを追加します。
可視化の種類 (Visualization) に SORACOM Dynamic Image Panel を選択します。
以下の設定をします。
タブ | 項目 | 作業・設定 |
Query | Metric | 1. USB ドングル型モデムに挿した SIM を選択(上記画像内では “demo sim” となっているところ) 2. “Standard” をクリックし “Table” に変更する(上記画像内は変更前) |
Setting | Mode | 1. “Harvest Files” を選択する |
Name | 1. “A-url” を選択する | |
Keep Aspect Ratio | 1. 有効にする (縦横比が維持されます) |
“A-url” が表示されない場合は?
Query タブの Metrics で “Table” への変更がされているか確認してください。”Standard” のままでは “A-url” が選べません。
最終的には以下のようになります。”Save” ボタンをクリックして保存しておきましょう。
SORACOM Harvest Data に蓄積された最新データに url
が含まれていれば、その URL にしたがって SORACOM Lagoon は画像を表示します。 /v1/files/...
のURLは SORACOM Harvest Files を指すため、Harvest Files の画像を表示する仕組みです。
これで、「画像が送信されたら SORACOM Lagoon に最新画像が表示される」が実現できました。
ただし、肝心の画像送信が手動ですので、最後に自動化します。
タイマーで定期的にカメラ撮影を行い、SORACOM Harvest Files へアップロードする
カメラの撮影管理
撮影指示を受ける側
以下を一行ずつ実行します。
sudo loginctl enable-linger $USER curl -O https://gist.githubusercontent.com/ma2shita/e0545e6c1b51ac32026f1ae197226512/raw/ee292aaba9f319167e4de50a599725fdb959e34c/camera_shooting.bash curl -O https://gist.githubusercontent.com/ma2shita/c79aad276c0b0f3eccb8e0040b5bc106/raw/2fc0171be99191d3b67490d3d167db42ffac1b1a/camera_shooting@.service curl -O https://gist.githubusercontent.com/ma2shita/61ba5f98b3e50a025e0b51a43417d6e2/raw/258c0b8749cbba6ac3f4164049997e974ef14553/camera_shooting.socket systemctl --user enable $PWD/camera_shooting.socket systemctl --user enable $PWD/camera_shooting@.service systemctl --user start camera_shooting.socket journalctl --user --unit camera_shooting.socket --line 1
最後の journalctl で期待される出力は以下の通りです。
-- Journal begins at Fri 2022-01-28 12:22:22 JST, ends at Mon 2022-02-07 20:23:07 JST. -- Feb 07 20:23:07 raspberrypi systemd[777]: Listening on Shooting camera server (listener).
カメラの撮影指示をする側
期待通りであれば、続けて以下を実行します。
sudo apt install netcat-openbsd echo "shooting!" | nc 127.0.0.1 19000 journalctl --user --unit "camera_shooting@*.service" --line 8
最後の journalctl で期待される出力は以下の通りです。
-- Journal begins at Fri 2022-01-28 12:22:22 JST, ends at Mon 2022-02-07 20:46:00 JST. -- Feb 07 20:46:00 raspberrypi systemd[677]: Started Shooting camera server (implementation) (127.0.0.1:53164). Feb 07 20:46:00 raspberrypi bash[2505]: /home/pi/camera_shooting.bash Feb 07 20:46:00 raspberrypi bash[2505]: Taking a Photo! Feb 07 20:46:00 raspberrypi bash[2505]: % Total % Received % Xferd Average Speed Time Time Time Current Feb 07 20:46:00 raspberrypi bash[2505]: Dload Upload Total Spent Left Speed Feb 07 20:46:00 raspberrypi bash[2505]: [237B blob data] Feb 07 20:46:00 raspberrypi bash[2505]: /home/pi/camera_shooting.bash END Feb 07 20:46:00 raspberrypi systemd[677]: camera_shooting@6-127.0.0.1:19000-127.0.0.1:53164.service: Succeeded.
うまく動作していれば、また新たな画像が SORACOM Harvest Files にアップロードされているので、SORACOM Lagoon 上で確認することができます。
{"message":"Harvest files is disabled. Please set { enabled: true }"}
と表示されたら?
SORACOM Harvest Files の設定が完了してません。SIM グループの設定や SORACOM Harvest Files の設定を見直してください。
タイマー管理
期待通りであれば、続けて以下を一行ずつ実行します。
curl -O https://gist.githubusercontent.com/ma2shita/ce40d5794146dbd147d5cb63eb3eb841/raw/22248196a776adac0b92d995865e3eebbd6f412a/timer_shooting.bash curl -O https://gist.githubusercontent.com/ma2shita/7004d3f35f03a67815e734042eea9cf2/raw/4d5cbc3985a9dd4bbd494ee3b6da6b306d4aa7b1/timer_shooting.service curl -O https://gist.githubusercontent.com/ma2shita/97519a3f0a6cb936f7480b5de11dc444/raw/9d607f3a86f1bcae07e824b821c284e0a5e30f53/timer_shooting.timer systemctl --user enable $PWD/timer_shooting.timer systemctl --user enable $PWD/timer_shooting.service systemctl --user start timer_shooting.timer
これで、10分に1回カメラ撮影がされて SORACOM Harvest Files にアップロードされるようになりました。
次回の起動までの残り時間といった状態は以下のコマンドで確認できます。
systemctl --user status timer_shooting.timer
この章で行った構成の相関図
※ gpio6_shooting については Appendix で解説します。
あとかたづけと注意事項
本レシピでは費用がかかるサービスを利用しています。
本項をよく読み、必要な操作や解除作業を行うようにして、想定外の費用が掛からないようにしてください。
費用について
ここで記載している金額は全て税込み、送料別となります。
SORACOM プラットフォームの利用料金
サービス/機能 | 料金 |
SORACOM Air (plan-D) | 基本料: 11円/日通信料: 0.22円~/MB(今回の利用であれば 100MB 以内で収まる範囲) |
SORACOM Harvest Files | 当該月内にアップロードが完了したファイルの合計ファイルサイズ1GBごとに 220 円。 SORACOM Harvest FIles は一般的なファイル管理サービスとは異なり「データ転送量」に応じた課金体系です。保管されているファイル(サイズ)には費用は発生しません。例えば先月に1GBのファイルのアップロードを行った場合、1GBの転送に関して課金されます。翌月の転送が0バイトだった場合、先月の1GB分は保管されていますが、このファイルには費用は発生しません。また、SORACOM Harvest Files の “Harvest Data 連携” にて作成されたデータは SORACOM Harvest Data の課金対象外となっています。(今回の利用であれば 1GB(=220円)以内で収まる範囲) |
SORACOM Lagoon | 今回は Free プラン(無料)を使用しました。 |
※ 費用詳細はリンク先をご確認ください。
無料利用枠について
SORACOM サービスでは一部サービスにおいて無料枠が設定されています。たとえば SORACOM Air for セルラーであればアカウント毎で30円/月の通信分や、SORACOM Harvest Data であれば31日分の書込みリクエストなどです。料金詳細に「無料利用枠」として掲載されていますので、ご確認ください。
グループ解除
SORACOM Harvest Data 等、「機能が有効になっているグループに所属している SIM × 費用」となっているサービスにおいては、「機能を OFF にする」することで費用の発生を抑えることができます。またもう1つの方法として「グループに所属している SIM の数を減らす(= 解除する)」事でも費用を抑える事ができます。
グループ解除の方法はグループからの解除 (JP)をご覧ください。
SORACOM Lagoon の解約
SORACOM Lagoon はオンラインで解約が可能です。 Free プランであれば有効化しておいても費用は発生しませんが、長期に渡って利用しない場合には解約も選択いただけます。
解約の方法はSORACOM Lagoon の解約(JP)をご覧ください。
次のステップ
本レシピでは、安価なデバイスを用いて定点カメラの仕組みを SORACOM サービスと組み合わせて実現しました。本来であればファイルサーバや画像を見るためのアプリケーション開発が必要なところを、様々組み合わせることで実現しています。今回は「全てをクラウドに送って、そこで利用する」方式でしたが、「デバイス上で判定してからクラウドと通信する」といったエッジコンピューティングの流れもあります。どちらにしても、カメラは高度なセンシングデバイスとして、より発展していくことが考えられます。
よくあるご質問はLet’s try IoT プロトタイピング ~ 定点カメラデバイスを作ろう 〜 動画とQAのご紹介でご案内しています。こちらもご覧ください。
Appendix: GPIO からの信号をきっかけにカメラ撮影(gpio6_shooting)
GPIO からの信号をきっかけにカメラ撮影が可能です。例としてタクトスイッチを利用しています。お手元にタクトスイッチとGPIOに接続するためのケーブル(ジャンパーワイヤーケーブル)を追加で用意、接続してください。
スイッチの両端と、GPIO の GND ピンと BCM ピンの 6 番をそれぞれ接続します。
白色側が GND、赤色側が BMC ピンの 6番です。
「抵抗」は無くても大丈夫なの?
Raspberry Pi 3 modeb B+ は 内部にプルアップ/プルダウン抵抗を持っており、それを有効化しておくことでタクトスイッチのようなセンサーを直接接続することが可能です。
また、同様のセンサーとしては CdS セル(フォトトランジスタ; 光量の強弱で抵抗値が変化)するものや、磁気式リードスイッチといったものがあり、これらの入力をトリガーに GPIO の値を変化させることが可能です。
以下を一行ずつ実行します。
curl -O https://gist.githubusercontent.com/ma2shita/22d5161ee03da4971560bb96078a1596/raw/4a0eda10603a44434e48778d6d07b81f19970fd5/gpio6_shooting.bash bash gpio6_shooting.bash
テストをしてみます。
タクトスイッチは押されると GPIO が 1 から 0
に変化します。そのため、この変化を捉えて、値が 0 だった時には TCP localhost:19000 を呼び出す(= camera_shooting を起動する) ようになっています。値が 1 の時には変化が合ったことのみ表示し、何も行いません。
動作の様子は以下の通りです。
Trigger on gpio6_shooting.bash Diff!: 1 -> 0 shooting! gpio6_shooting.bash End. Trigger on gpio6_shooting.bash Diff!: 0 -> 1 gpio6_shooting.bash End.
あとはこのプログラム(gpio6_shooting.bash
)がバックグラウンドで起動するようにします。以下を一行ずつ実行します。
curl -O https://gist.githubusercontent.com/ma2shita/8ee3f93a209025433c5a44bddbcdaaba/raw/2d62931aadf85807b98c3d356617798fc942ce2c/gpio6_shooting.service systemctl --user enable $PWD/gpio6_shooting.service systemctl --user start gpio6_shooting.service
動作確認は実際に動作させてみたり、あとは journalctl --user でログを確認してください。