はじめに

こんにちは。ケイトです。
前回は要件定義についての記事を書かせていただきましたが、今回はタイトルのとおり、私の作ったIoTのサービス?についてご紹介したいと思います!
他の記事でご紹介していますが、最近、BS事業部での取り組みで、IoTのサービスを作ってみよう!ということになっており日々様々な活動が広がってきています。
関連記事はコチラ:
【IoT】MESH使ってIoTやってみまっし!
【IoT】MESH使ってIoTやってみまっし! ~番外編~
【IoT】MESH使ってIoTやってみまっし! ~その2~
そこで、私は前々から興味のあったIoTネットワークの『Sigfox』を使って何かできないかなぁと思い、サービスの検討を始めました。
Sigfoxってなんだ?
- 低価格
- 低消費電力
- 長距離伝送
日本では京セラコミュニケーションシステムさんから提供されており、現在はカバーエリアが主要都市のみとなっていますが、2020年には全国展開される予定です。
Sigfox紹介
https://www.kccs.co.jp/sigfox/
カバーエリア確認
https://www.sigfox.com/en/coverage/
Sigfoxネットワークは1回12バイトのデータを1日最大140回しか送信できません。しかし、この規格にしているからこそ、低消費電力や低価格、通信デバイスの小型化が実現されています。主にセンサーの値を送るIoTでの利用にもってこいのネットワークですね!
さらに興味深いのが、ネットワークの利用料金の支払い方です。普通通信料といえば携帯電話の料金のように、契約して月額いくらというように毎月お金を支払うことを想像しますが、Sigfoxの利用料金は通信デバイスに年間の通信料金を含めた形で販売されています。対応機器を購入すればすぐにネットワークを利用できるのも嬉しいポイントです。
「百葉箱クラウド」を作る!
皆さん百葉箱ってご存知ですか?そうです。小学校の校庭にある白い板でできた箱です。皆さん一度は目にしたことがあるのではないでしょうか。(知らない人はきっと若い人)

中には気象観測のために温度計や湿度計が入っています。もちろん普通の百葉箱は箱を開けて見ないと測定結果はわかりません。しかし!センサーとSigfoxネットワークを使えば屋外に設置されたデバイスのデータを自動的に収集し、簡単に可視化できるようになるはず。。。
ということで、温度、湿度センサーが初めからついているArduino用の通信モジュール「Sigfox Shield for Arduino」が販売されていましたので、今回はそれを使って実現していきます。
用意するもの

- Sigfox Shield for Arduino
- Arduino Uno
- USBケーブル(A-B)
- 電池ボックス(DCプラグ出力)
- 電池
※Arduino Uno:電子工作につかえるマイコンボード。いろんな電子部品をつなげてコントロールできます。
今回はセンサーで取得した気温と湿度の情報をグラフで参照できるようにすることを目標にしました。サービスの全てを一から作っていると時間がたりないので、既存のサービスを組み合わせて実現します。
サービス概念図

処理の流れ
- Sigfox Shield for Arduino で気温と湿度測定
- SigfoxネットワークでSigfox Cloudにデータ送信
- Sigfox CloudのCallback機能でAWS IoTにデータを飛ばす
- AWS IoT のルールでAWS Elasticsearch Serviceへさらにデータを飛ばす
- Kibanaを使ってデータをグラフ化!
上記の処理を実現するために必要な準備について説明していきます。
作成手順について細かく説明していきたいところですが、とっても長くなりますし、他のサイトでも紹介されていますのでポイントだけ解説します。それでもだいぶ長いのでどうぞ最後までお付き合いください。
その1 Arduino IDEでプログラミング

プログラムが完成したらPCとArduinoをUSBでつないで作成したプログラムを書き込みます。サンプルプログラムでは1分に1回送信を行うようになっていました。送信間隔については用途に合わせて設定します。(ただし1日の送信回数は140回まで)Arduinoには電源スイッチがないので、USBケーブルをつなぐ、もしくは電池を繋いでいる間はONとなり、プログラムを繰り返し実行します。
その2 SigfoxネットワークでSigfox Cloudにデータ送信
Sigfox portalサイトにアクセスし、登録したアカウントでログインするとDevice Listのページで通信デバイスの接続状況が確認できます。(赤枠の部分が緑だと通信できています)複数のデバイスを管理している場合はこちらにそのデバイスが表示されます。

Device Listでデバイスを選択すると、各デバイスの詳細を確認できます。Statisticsのページではデータが受信されているとグラフで表示されています。

その3 Sigfox CloudからAWSにデータを送信する「Callback」設定をする

AWSに送られるデータはJSON形式になります。「Json Body」にメンバーを設定します。値にはArduinoのプログラムで送信した項目を設定します。
その4 AWS IoTのルールを設定し、Elasticsearch Serviceへさらにデータを送信する
インスタンスを立ち上げが完了するとステータスがアクティブになります。エンドポイントのURLはこのあとのAWS IoT側の設定で使います。(自動で設定されます)KibanaのURLをクリックするとKibanaの画面にアクセスできます。

次にAWS IoTのページに移動し、下記のようなRuleを作成します。ドメイン名の欄には先程作成したElasticsearchインスタンスが表示されますのでそれを選択します。Sigfox Cloudから送信した項目名に合わせてID等を設定します。また、アクセス権を付与するためにIMAロールも作成して設定してください。

これでElasticsearchにデータが送信されるようになりました。
その5 Kibanaでグラフを作成する

最後の仕上げにVisualizeタブで、送られてきたデータを使ってグラフを作成します。全部英語表記で分かりづらいですが、Y-Axisに温度と湿度のデータ、X-AxisにseqNumber(通し番号)を指定すればOKです。本当はX軸に日付を指定したいのですが、タイムスタンプの項目が、UNIX時間になっていてDate型の項目として指定できないので一旦これで。その他にも、グラフの種類や色、線の太さなんかも自由に設定することができます。

やっとグラフ化することができました!Arduinoの電源が入っている間は温度、湿度が取得され、グラフに反映されます。これでどこからでも設置場所の状態を知ることができますね!
ちなみに外に持ち出すときは、こんな感じで電池ボックスと繋げることでどこにでも持っていけます。(対応エリアの範囲内で、ですが)

使い道

せっかく作ったサービスも具体的な使いみちがないと勿体無いですので、この仕組みを使ってできることを考えてみました。
- 農業
最近は「スマート農業」というワードがあるくらい農業へのIoT活用が盛んになってきています。この仕組でビニールハウスなどの環境データを「見える化」することができると思います。すでにその手のサービスがいろいろとあると思いますが、Sigfoxを使えば電源やネット回線を引く必要がないので、とても手軽にIoTを始めることができます。 - スパイグッズ
Arduinoを使っていますので、他にも様々なセンサーを取り付けることが可能です。GPSモジュールを取り付ければ位置情報を送信することも可能です。素行が悪い人の車にこっそり設置して位置情報を・・・なんてことも。
実はGPSを取り付けて動作させる実験もしているのですが、そのご紹介はまたの機会にしたいと思います。 - 高齢者の見守り
高齢者の自宅の環境測定を行うことで、生活の異常を検知することができます。こちらもわざわざ固定回線を引かずに済むので安価に実現できます。
最後に

実はこの仕組みを作るにあたって、使用した機器やサービスはこれまで一度も触ったことがありませんでした。なので、全て調べながらの手探りでここまでやってきました。覚えてないくらい時間を費やしてしまったのですが、その分グラフが表示できたときはとても感動しました!(いろいろな方の解説ページを参考にさせていただきました。先人の知恵に感謝。)
みなさんも「こういうサービスあったらいいのになぁ」と思うことがあったら、是非自分で作ってしまいましょう!やる気さえあればどんなに難しいことでも、案外実現できてしまいますよ。
私もこれに懲りずに、思いついたものがあったらまた作って、ここで紹介できたらと思います。
それでは!