【IoT】Sigfoxネットワークで「百葉箱クラウド」作ってみた

【IoT】Sigfoxネットワークで「百葉箱クラウド」作ってみた

with コメントはまだありません

はじめに

Sigfoxネットワークで「百葉箱クラウド」作ってみた

こんにちは。ケイトです。
前回は要件定義についての記事を書かせていただきましたが、今回はタイトルのとおり、私の作ったIoTのサービス?についてご紹介したいと思います!

他の記事でご紹介していますが、最近、BS事業部での取り組みで、IoTのサービスを作ってみよう!ということになっており日々様々な活動が広がってきています。
関連記事はコチラ:
【IoT】MESH使ってIoTやってみまっし!
【IoT】MESH使ってIoTやってみまっし! ~番外編~
【IoT】MESH使ってIoTやってみまっし! ~その2~

そこで、私は前々から興味のあったIoTネットワークの『Sigfox』を使って何かできないかなぁと思い、サービスの検討を始めました。

Sigfoxってなんだ?

Sigfoxネットワークとはフランスの通信事業者「Sigfox」社が提供するグローバルIoTネットワークです。このSigfoxはIoTに特化したLPWAN(Low Power Wide Area Network)で、以下の特徴を持っています。

  • 低価格
  • 低消費電力
  • 長距離伝送

日本では京セラコミュニケーションシステムさんから提供されており、現在はカバーエリアが主要都市のみとなっていますが、2020年には全国展開される予定です。
Sigfox紹介
https://www.kccs.co.jp/sigfox/
カバーエリア確認
https://www.sigfox.com/en/coverage/

Sigfoxネットワークは1回12バイトのデータを1日最大140回しか送信できません。しかし、この規格にしているからこそ、低消費電力や低価格、通信デバイスの小型化が実現されています。主にセンサーの値を送るIoTでの利用にもってこいのネットワークですね!

さらに興味深いのが、ネットワークの利用料金の支払い方です。普通通信料といえば携帯電話の料金のように、契約して月額いくらというように毎月お金を支払うことを想像しますが、Sigfoxの利用料金は通信デバイスに年間の通信料金を含めた形で販売されています。対応機器を購入すればすぐにネットワークを利用できるのも嬉しいポイントです。

「百葉箱クラウド」を作る!

Sigfoxネットワークを使えば、固定回線や電源が引かれていないような場所でも簡単にデバイスを設置して、データを収集することができます。今回はその特徴を活かして「百葉箱クラウド」を作ることにしました。
皆さん百葉箱ってご存知ですか?そうです。小学校の校庭にある白い板でできた箱です。皆さん一度は目にしたことがあるのではないでしょうか。(知らない人はきっと若い人)
百葉箱
中には気象観測のために温度計や湿度計が入っています。もちろん普通の百葉箱は箱を開けて見ないと測定結果はわかりません。しかし!センサーとSigfoxネットワークを使えば屋外に設置されたデバイスのデータを自動的に収集し、簡単に可視化できるようになるはず。。。
ということで、温度、湿度センサーが初めからついているArduino用の通信モジュール「Sigfox Shield for Arduino」が販売されていましたので、今回はそれを使って実現していきます。

用意するもの

sigfox

  • Sigfox Shield for Arduino
  • Arduino Uno
  • USBケーブル(A-B)
  • 電池ボックス(DCプラグ出力)
  • 電池

※Arduino Uno:電子工作につかえるマイコンボード。いろんな電子部品をつなげてコントロールできます。

今回はセンサーで取得した気温と湿度の情報をグラフで参照できるようにすることを目標にしました。サービスの全てを一から作っていると時間がたりないので、既存のサービスを組み合わせて実現します。

サービス概念図

サービスの概念図、処理の流れはこのようになります。
概念図
処理の流れ

  1. Sigfox Shield for Arduino で気温と湿度測定
  2. SigfoxネットワークでSigfox Cloudにデータ送信
  3. Sigfox CloudのCallback機能でAWS IoTにデータを飛ばす
  4. AWS IoT のルールでAWS Elasticsearch Serviceへさらにデータを飛ばす
  5. Kibanaを使ってデータをグラフ化!

上記の処理を実現するために必要な準備について説明していきます。
作成手順について細かく説明していきたいところですが、とっても長くなりますし、他のサイトでも紹介されていますのでポイントだけ解説します。それでもだいぶ長いのでどうぞ最後までお付き合いください。

その1 Arduino IDEでプログラミング

今回使用している通信デバイスはArduinoに取り付けて使用するものになります。ArduinoにはArduino IDEという開発環境が用意されており、そちらでデバイス上のセンサーで取得した値をSigfoxネットワーク経由で送信するプログラムを作ることになります。C++風の独自言語でコーディングする必要がありますが、実はこちらのデバイス用にサンプルプログラムが公開されていますので、そちらを使えば少し設定を書き換えるだけで送信できるようになります。
その1
プログラムが完成したらPCとArduinoをUSBでつないで作成したプログラムを書き込みます。サンプルプログラムでは1分に1回送信を行うようになっていました。送信間隔については用途に合わせて設定します。(ただし1日の送信回数は140回まで)Arduinoには電源スイッチがないので、USBケーブルをつなぐ、もしくは電池を繋いでいる間はONとなり、プログラムを繰り返し実行します。

その2 SigfoxネットワークでSigfox Cloudにデータ送信

Sigfoxにはデータを保存するクラウド環境『Sigfox Cloud』が用意されています。デバイスから送信されたデータは一律こちらのクラウド環境に保存されます。Sigfoxネットワークを使い始めるに当たり、アカウントの登録が必要になりますが、登録するとこのクラウド環境が同時に使用可能となります。もちろん利用料金は通信料(つまりはデバイス本体価格)に含まれています。
Sigfox portalサイトにアクセスし、登録したアカウントでログインするとDevice Listのページで通信デバイスの接続状況が確認できます。(赤枠の部分が緑だと通信できています)複数のデバイスを管理している場合はこちらにそのデバイスが表示されます。
その2の1
Device Listでデバイスを選択すると、各デバイスの詳細を確認できます。Statisticsのページではデータが受信されているとグラフで表示されています。
その2の2

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

Sigfox Cloudには様々なパブリッククラウドサービスにデータを送信する「Callback」という機能があります。AWSを利用する場合、「AWS IoT」へのコネクタが用意されていますのでこちらを利用します。設定の手順は今回割愛しますが、以下のような設定を行います。(事前にAWSのアカウント作成が必要です)
その3
AWSに送られるデータはJSON形式になります。「Json Body」にメンバーを設定します。値にはArduinoのプログラムで送信した項目を設定します。

その4 AWS IoTのルールを設定し、Elasticsearch Serviceへさらにデータを送信する

最終的にデータをKibanaでグラフ化するためには、Sigfox Cloudから送信されたデータをAWS IoTからElasticsearch Serviceにも連携する必要があります。まずはじめにElasticsearchインスタンスを立ち上げるのですが、ここで注意点があります。Elasticsearch Serviceにも無料で使用できる枠があるのですが、立ち上げるインスタンスのタイプを間違えるとすぐに料金が発生してしまいます。とりあえず無料でやってみたい方は「t2.small.elasticsearch」を選択してください。(私は間違えました。。)
インスタンスを立ち上げが完了するとステータスがアクティブになります。エンドポイントのURLはこのあとのAWS IoT側の設定で使います。(自動で設定されます)KibanaのURLをクリックするとKibanaの画面にアクセスできます。
その4の1
次にAWS IoTのページに移動し、下記のようなRuleを作成します。ドメイン名の欄には先程作成したElasticsearchインスタンスが表示されますのでそれを選択します。Sigfox Cloudから送信した項目名に合わせてID等を設定します。また、アクセス権を付与するためにIMAロールも作成して設定してください。
その4の2
これでElasticsearchにデータが送信されるようになりました。

その5 Kibanaでグラフを作成する

Elasticsearchのインスタンス概要欄からKibanaのページにアクセスします。初めてKibanaを起動した場合、Indexの作成が必要になります。ManagementページのIndex Patternsを開き、新しいIndexを作成します。先程Rule作成の「アクションの設定」画面で「索引」に入力した内容を「Index pattern」に設定すると作成できます。
その5の1
最後の仕上げにVisualizeタブで、送られてきたデータを使ってグラフを作成します。全部英語表記で分かりづらいですが、Y-Axisに温度と湿度のデータ、X-AxisにseqNumber(通し番号)を指定すればOKです。本当はX軸に日付を指定したいのですが、タイムスタンプの項目が、UNIX時間になっていてDate型の項目として指定できないので一旦これで。その他にも、グラフの種類や色、線の太さなんかも自由に設定することができます。
その5の2
やっとグラフ化することができました!Arduinoの電源が入っている間は温度、湿度が取得され、グラフに反映されます。これでどこからでも設置場所の状態を知ることができますね!
ちなみに外に持ち出すときは、こんな感じで電池ボックスと繋げることでどこにでも持っていけます。(対応エリアの範囲内で、ですが)
その5の3

使い道

スパイグッズ
せっかく作ったサービスも具体的な使いみちがないと勿体無いですので、この仕組みを使ってできることを考えてみました。

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

最後に

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

私もこれに懲りずに、思いついたものがあったらまた作って、ここで紹介できたらと思います。
それでは!

Follow ケイト:

2014年入社。修羅の国出身。体が丈夫なことが唯一の取り柄である三十路のエンジニア。 娘二人の思春期が来るのを恐れている。