mbed と Parse で作る高齢者世帯安否確認システム
2017年1月末の Parse.com サービス終了に伴い以下の記事を追加しました。他サービスへの移行に関する情報等を記述しています。
個人的に、高齢者世帯の安否を日常的に静かに確認できる仕組みがほしいと思っていました。要件として想定していたのは次の二点。現地にはインターネットへの接続環境が整っています。
- 現地での被監視感や拘束感が希薄であること
- 情報を自分でハンドリングできること
以前から頭の中でときどきそういうループを巡らせていたのですが、先日ふとマイコンとクラウドサービスを組み合わせて利用することを思いつきました。折からの「モノのインターネット(Internet of Things : IoT)」の潮流にも合致するためその視点からも面白そうです。
マイコン方面には今までほとんど馴染みがなかったのですが、情報収集を経て選択した mbed マイコンボードを利用することでフロントエンドの装置本体もそれを動かすためのプログラムも手早く作ることができました。バックエンドにはメジャーな BaaS のひとつである Parse を利用しサーバ側処理もシンプルに仕上げています。必要な費用は装置材料分のおよそ 1万円程度(2015年2月現在)のみでクラウドサービスは手元では無料枠内でゆったりと使えており、今後もいろいろ手を加えていくつもりです。なかなか便利なものになったので現時点での内容と構成を紹介します。離れて暮らす家族を気に懸けておられる方のご参考となれば幸いです。
全体像を図に示します。
動作の様子
装置の動きとクラウドサービスとの連携の様子を以下の動画に収めています。
動画1:装置が人間を検知すると Parse サーバへデータを送出
動画の内容
(無音 1分15秒)
動画2:装置の「緊急ボタン」が長押しされるとその場でメール通知
動画の内容
(環境音+ブザー音あり 30秒)
mbed について
ARM 社 によって開発された mbed は ARM マイコン搭載のコンピュータボードと専用の開発環境によって構成され「高速プロトタイピングツール」のキャッチフレーズの通りシンプルな手順で手早く扱うことができるように設計されています。現在さまざまな mbed ボードが販売されていますが、今回選んだのはもっとも代表的な「mbed NXP LPC1768」です。Cortex-M3 プロセッサを載せたこの単三電池二本分ほどの大きさのボードには多様な入出力ポートに加えイーサネット用コントローラまでもが実装されています。
※NXP fan 様による公式 mbed 開発者サイト上の記事
初めて mbed に触れる場合は mbed.org へのユーザ登録が必要です。製品に同梱の USB ケーブルで mbed LPC1768 を PC へ接続するとボード上のストレージがマウントされます。ストレージ上の「MBED.HTM」をブラウザへロードするとユーザ登録画面へ遷移するのでそこへ必要な情報を投入します。登録が完了すると mbed のオンラインコンパイラをブラウザから利用できるようになります。C, C++ でコードを記述し「Compile」ボタンを押すとサーバ側でビルドが行われ、そこで生成された実行形式をダウンロード 〜 mbed の USB ストレージへコピーしてボードのリセットボタンを押下するとプログラムが実行されます。そこから先は、コードを編集したり既存のライブラリをインポートしたり mbed ボードを装着した回路に手を加えたり、、といった手順の繰り返しです。作法どおり最初はまずあれこれサンプルコードをビルドして動かしたりそれに手を加えて試したりということから始めました。なお、mbed ボードのコントローラは USB 仮想シリアルポート経由でホスト PC とのシリアル通信をサポートしており PC 側でターミナルアプリを使えばデバッグにも便利です。
mbed の世界ではコミュニティが発展しており様々な資産が共有されています。わかり易く有用な記事・文書も数多く存在するのでとても参考になります。
※菅工房様による公式 mbed 開発者サイト上のノート
※田内康様による公式 mbed 開発者サイト上の PDF 文書
装置について
製作した装置の材料と組み立て方、制御用プログラムについて説明します。
材料
(※価格はいずれも2015年1月時点の税込額)
- マイコンボード mbed NXP LPC1768 ¥5,800 秋月電子通商
- 焦電型赤外線センサーモジュール (SB612A) ¥600 秋月電子通商
- LAN コネクタ (mbed用イーサネット接続キット) ¥514 スイッチサイエンス
- IC 温度センサ (LM61BIZ) ¥200 (4個入) 秋月電子通商
- 電子ブザー (PKB24SPCH3601) ¥150 秋月電子通商
※不要なら省略可 - ブレッドボード (EIC-801) ¥257 スイッチサイエンス
- ジャンプワイヤ (固いオス〜オス) ¥257 (70本入) スイッチサイエンス
- ジャンプワイヤ (柔らかいオス〜メス) ¥691 (50本入) スイッチサイエンス
- 赤色 LED ¥350 (100個入) 秋月電子通商
※不要ならカーボン抵抗とともに省略可 - 75 Ω カーボン抵抗 ¥100 (100本入) 秋月電子通商
※不要なら LED とともに省略可 - 押しボタン・ピンコネクタ・導線 近所のホームセンターで 5〜600 円くらいで購入
※不要なら省略可 - 適当なケース 廃物利用
※LAN ケーブルと DC 5V USB-Aタイプ の AC アダプタは手持ちのものを利用
組み立て
LAN コネクタである「mbed用イーサネット接続キット」の組み立てのみハンダづけが必要ですが、その他の配線・パーツの取り回しはすべてブレッドボード上で行うため材料が揃っていれば装置の組み立ては簡単です。写真のようにブレッドボード上の配線には固いジャンプワイヤ、センサやブザーの接続にはオス−メスの柔らかいジャンプワイヤを使いました。実体配線図をあわせて掲載します。(クリックで拡大)
むき出しのままでは扱いにくいので前に買った PC 用パーツの外箱を再利用して簡単なケースを用意しました。素材が薄いプラスチックと紙なので加工しやすく耐久性もそれなりにありそうです。
焦電型赤外線センサモジュールは白いレンズの部分を露出しないと機能しないためサイズに合わせてケースに切り込みを入れました。測定誤差軽減のために IC 温度センサも外に引き出しています。外観を不透明にしているのは設置先での存在感を抑えるためで、LED は動作確認用と割り切りトラブルが起こった場合のみ点滅状態を見ることにしています。
プログラム
上記の装置構成にあわせて作成した mbed LPC1768 用プログラムを以下の場所で公開しています。
- Anpi - a mercurial repository - developer.mbed.org
※mbed 公式の各ライブラリに加え HTTPS 通信用に次のライブラリを使用しています
HTTPClient - a mercurial repository - developer.mbed.org
装置には識別用に任意の名前をつけることができます。名前は mbed ボードの USB ストレージ上の "id.txt" ファイルに記述します。この名前は装置が人を検知した際に Parse サーバへ送出する情報のひとつとして扱われます。
装置が人を検知するたびに Parse サーバへデータを送るのは不経済なので、データ送出の最短間隔を以下の定義で指定しています。
#define HTTPS_REQUEST_INTERVAL 1800 // 30分
クラウドサービスについて
装置の対向処理用に用意した Parse 用のサーバコードと、そのコードからメール送信のために呼び出している Mailgun サービスについて説明します。
Mailgun の準備
Mailgun は多くのプログラミング言語に対応したクラウドメールサービスです。REST API セットに加え Python, Ruby, Java, C#, PHP 用のライブラリが公開されており、自作のコードで簡単にメール送信をハンドリングできる便利なサービスなので今回の話題とは無関係にアカウントを作って試してみるのも良いでしょう。サインアップ時にクレジットカード情報の入力は不要です。
Mailgun にアカウントを作成すると一件の「Sandbox Domain」が割り当てられます。この Mailgun Subdomain はテスト用とされておりメール送信は 300件/日までという制約がありますが、自前のドメインがあればそれを登録することでこの制約はなくなります。なお、無料枠はこの記事の時点で 10,000件/月までとなっています。[詳細]
ちなみに手元では今のところ一日 300件もメールを送信できればまず十分なのでひとまず Sandbox Domain をそのまま使っています。
Parse からの Mailgun API 呼び出しにおいては Mailgun アカウントに紐付けられた「API Key」を使用します。Parse は Mailgun と公式に連携しているためごくシンプルなコード記述で Mailgun API を呼び出すことができます。
Parse の準備
Parse は Facebook 傘下の Parse.com が開発・運営する現在もっともメジャーな BaaS(Backend as a Service) のひとつです。ユーザ管理・データストア・スマホへのプッシュ通知・アクセス解析・ホスティング・SNS 連携・位置情報連携など多くの機能から構成されており対象プラットフォーム・言語も広範です。無料枠も広く 30リクエスト/秒まで、プッシュ通知 100万件/月までは無料、また、アクセス解析機能も自由に利用できます。[詳細]
一般に BaaS の主な目的はアプリケーションの対向サーバ側機能を代替・補完することにあり、サーバの管理運用やサーバ側コード開発に踏み込むコストを抑制しアプリ本体の開発に注力可能となることが利用者にとってのメリットですが、Parse にはサーバ上でユーザコードを実行することのできる「Cloud Code」というしくみが用意されています。これを利用することで標準の機能のみではカバーできない固有の要件に対応できる余地が大きくなり、また、フロントエンドのアプリケーションを一切伴わず所定のサーバコードのみを Parse サーバ上で実行するといった使い方も可能となります。今回作った装置は Parse サーバ上に設置した自作コードをそのまま呼び出して必要な処理を行っています。このように目的に応じて柔軟に利用できることが Parse の魅力のひとつと言ってよいでしょう。
Parse サーバ用に作成したコードを https://github.com/mkttanabe/Anpi で公開しています。このコードを自分の Parse アカウント環境で使用する手順を以下に記述します。
1. 「Anpi」アプリと「Detected」クラスの作成
Parse へログイン後、[Dashboard] - [Create a new App] をクリックして「Anpi」という名前のアプリを作成し同アプリの [Core] へ移動
[Dashboard] - [Anpi] - [Core] - [Data] の [+ Add Class] をクリックして Custom タイプの「Detected」クラスを作成
※ここでいう「クラス」とは Parse 用語であり、「テーブル」の概念とほぼ同じものです
[+Col] ボタンをクリックして Detected クラスに次の各カラムを追加。カラム並びは任意に調整可
装置から受信した人検知情報はこの Detected クラスのデータとして保存されます。
2. Parse コマンドラインツールの導入と Cloud Code のセットアップ
Parse 用の開発を行う PC には専用のコマンドラインツールの設置が必要です。公式ドキュメント「Cloud Codeとは」の冒頭の説明にそって開発環境へツールをインストールします。インストールが終わったら任意の開発用フォルダへ移動し「parse new」コマンドで「Anpi」アプリ用 Cloud Code の雛形を生成します。
$ parse new Anpi Email: your@mail.com Password: 1:Anpi Select an App: 1
github.com/mkttanabe/Anpi 下の Parse/Anpi/cloud/main.js の内容を開発用フォルダ下の Anpi/cloud/main.js へ上書きし、冒頭の下記の箇所を自分の Mailgun ドメインと API Key、送信先とするメールアドレスで書き換えます。
var MAILGUN_DOMAIN = 'sandboxXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org'; var MAILGUN_KEY = 'key-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; var MAILGUN_TO = 'Makoto Tanabe <XXXXXXXXXXXXX@XXXXX.XXXX>'; var MAILGUN_FROM = 'Safety Alert <postmaster@' + MAILGUN_DOMAIN + '>';
開発用フォルダ下の Anpi/ へ移動しそこから「parse deploy」コマンドを実行すると配下の各ファイルが Parse サーバへ転送されます。
$ cd Anpi $ parse deploy Uploading source files Finished uploading files New release is named v1
Parse サーバへ転送したコードの動作は 公式ドキュメント「Cloud Codeとは] - [はじめに] - [シンプルな関数] に記述された方法で確認できます。
3. ジョブの登録
上の手順で deploy した main.js には Detected クラス上の直近 30件のデータをメールでレポートするためのジョブ用関数「report」が含まれています。 ジョブの登録・編集・削除は [Dashboard] - [Anpi] - [Core] - [Jobs] から行います。図の UI から任意の内容で設定可能です。
※無料枠の Parse アカウントでは複数のジョブを同時に実行することはできません
以上の手順・設定で、今回作成した mbed ベースの装置本体と各クラウドサービスが連携して稼動します。アイディア次第で応用も可能でしょう。こういう仕組みを低コストで自作できる時代になりました。
(tanabe)