IoTネットワークの新たな選択肢「Sigfox」を使ってセンサーデータをAWS IoTに送ってみた
まいどでございます。大阪の市田です。
最近、IoT向きの無線ネットワークとしてLPWA(Low Power Wide Area)と総称される新しいタイプの無線通信が注目を集めています。その中で幾つかのLPWA規格が存在しますが、今回は新しく登場した「Sigfox」(シグフォックス)について、使い方を交えてご紹介したいと思います。
Sigfoxの概要
フランスのSigfox社が2009年から提供しているIoT用のネットワークで、国内では京セラコミュニケーションシステム株式会社(以下、KCCSと表記)が事業者としてサービスを提供しています。
特徴
特徴としては、低電力、長距離電装、低価格といった点があり、IoT分野での利用に非常に向いています。
- 低電力
- 電池で数年間稼働することが可能
- 低価格
- 1回戦(1デバイス)あたり年間数百円〜
- 長距離伝送
- 最大50km程度
注意点としては、メッセージのサイズや1日あたりの通信回数に上限(140回)があるので、センサーデータを10分に1回送信するような使い方になります。(10分単位の場合、24時間で144回の通信が必要)
提供エリア
利用可能なエリアについては、国内でも都市部を中心に提供範囲が比較的広く、私の所属オフィスである大阪エリアもほぼカバーしています。2018年までに全国の主要都市で利用可能にする計画があるので、現時点で利用不可な場所でも今後利用できるようになる可能性があります。
カバーエリアはSigfoxのサイトで確認することが出来ます。青色の部分が利用可能な範囲です。
Sigfoxクラウド
また、Sigfoxクラウドというものが提供されており、特別な設定なしでセンサーからのデータを可視化することができたり、通信する時にSIMなども必要ないので、すぐに利用することができます。
今回のテスト環境
このSigfoxに対する通信モジュールとして、Arduinoのシールド「Sigfox Shield for Arduino」が先日発売されました。もちろん技適の認定済みです。
また、標準で加速度センサや、温湿度センサ、気圧センサを搭載しているのですぐに利用することができる他、GROVEコネクタも搭載しているので、その他の各種センサーも簡単に接続することが可能です。
購入については、国内ではソラコム社またはスイッチサイエンス社から可能です。
今回は、このシールドを用いてSigfoxを試してみました。ちなみに、このシールドはSigfoxの通信料が1年間無料です。
それでは早速試していきたいと思います!
購入先の違いによる注意点
試す前に注意点があります。
本ブログでの紹介内容は、スイッチサイエンス社から購入したことを前提としています。ソラコム社から購入した場合は直接Sigfoxのバックエンドにアクセスできないので、予めご注意下さい。
ソラコム社から購入した場合は、下記を参考にしてみて下さい。
Sigfox Shield for Arduino をセットアップする | Getting Started | SORACOM Developers
Sigfoxシールドの準備
まずは先程の写真のようにArduinoと接続しておきましょう。写真のものは「Arduino Uno」です。
電源はUSB経由で取ることができるので、USBケーブルでMacにつなげておきます。
デバイス側の準備はこれで完了です。
Sigfoxクラウドへの登録
次に、Sigfoxクラウド(Sigfox Backend Cloud)に端末の登録が必要になります。
まず、Sigfoxシールドからデバイス情報を事前に取得しておきます。本体にQRコードのシールが貼ってあり、それを読み取ることでデバイスID(HEX)とPAC情報を確認できるようになっています。
下記の部分にあるQRコードをスマホ等で読み取って下さい。
尚、iOS11では標準カメラで読み取れますが、今回の場合は読み取ることが出来ませんでした。その為、スマホで写真を撮って、下記のアプリで写真から読取りすることで確認できました。
次に下記のURLから、Sigfoxクラウドにアクセスして登録を行います。
https://backend.sigfox.com/activate/Unabiz
アクセスできたら「Pick your country」タブを選択してください。
画面をスクロールしていって、下記のように「JAPAN KYOCERA」を見つけてクリックします。
次に「Device information」をクリックするとデバイス情報を入力する欄があるので、先程QRコードから読み取った「DEVICE ID」と「PAC」の値を入力します。
次に、アカウント情報を入力して登録します。
登録が完了すれば下記のような画面が表示されます。表示されているメッセージの通り、登録したメールアドレス宛に確認メールが送られているのでそちらを確認しましょう。
次のようなメールが届いていることを確認します。
メールにはパスワード設定用のURLが記載されているので、そのURLからパスワードを設定して下さい。
これでSigfoxクラウドにアクセスできますが、最初に利用規約の確認画面が出るので内容を確認して、問題無ければ「Accept」をクリックしてください。
ログインできれば、下記のように登録したデバイスが見えていると思います。
Arduino開発環境の準備
次にArduino開発環境を準備します。ここでは既にPCに「Arduino IDE」がインストールされているものとします。まだインストールしていない場合は、下記からインストールしておきましょう。
今回のSigfoxシールドの利用には別途専用のライブラリが必要なので、下記よりZipファイルをダウンロードします。
UnaBiz/unabiz-arduino: Arduino library for connecting UnaShield to SIGFOX network
Arudino IDEを起動してライブラリをインクルードしてください。画面はMacのものですがWindowsでも同様かと思います。
確認として、「スケッチ例」に「unabiz-arduino-master」が登録されていればOKです。
keepaliveの設定
Sigfoxクラウドの登録が完了しましたが、デフォルトの状態では「keep-alive」の設定が無いので、Sigfoxクラウドにデータを送ることができません。
そこで、管理画面からkeepaliveの設定を行います。「DEVICE TYPE」のページにアクセスしてください。
該当のタイプをクリックして「Edit」を選択します。
次の画面で「Keep-alive」という項目があるので「30」(分)を設定します。
これでkeepaliveの設定は完了です。
Why is the communication status black? - ask Sigfox
サンプルプログラムの実行
Arduino IDEにライブラリのインストールが完了していたら、サンプルプログラムが利用可能になっているので、スケッチ例から「DemoTestUnaShieldV2SRCZ3」を選択します。
下記の部分を環境に合った内容に修正します。基本的にデフォルトのままで問題ないかと思いますが、static const Country country
についてはCOUNTRY_JP
を指定するようにしましょう。
修正ができたら「右向き矢印」のアイコンをクリックしてArduinoに書き込みます。正常に書き込みができればOKです。
Sigfoxクラウド上で確認
Arduinoの書き込みが完了している時点で、すでにデータをSigfoxクラウドに送信しているはずなので、確認してみます。
まずはデバイス側の状況を確認します。デバイス側はArduinoのコンソールから確認できます。コンソールはArduino IDEの画面の右上にある虫眼鏡のアイコンをクリックして起動します。
コンソールが起動すると、下記のようなメッセージが断続的に出力されていればOKです。「tmp」が温度表示になります。
次に、Sigfoxクラウドでも確認してみましょう。管理画面の「STATISTICS」でデータがグラフで可視化されています。
AWSにデータを送ってみる
Sigfoxクラウドには「CALLBACK」という機能があり、自分のサーバやAWS等のパブリッククラウドにデータを送ることができます。
AWSの場合だと「AWS IoT」と「Amazon Kinesis」へのコネクタが既に用意されているので、今回はこれを使って「AWS IoT」に接続してみたいと思います。基本的な手順は下記の通りです。
CALLBACKの設定
Sigfox側でCloudformationのテンプレートが用意されているのでそれを実行しましょう。まずはSigfoxクラウドの「DEVICE」のページから「Device Type」をクリックします。
次の画面のでメニューから「CALLBACKS」をクリックして下さい。
最初は何も登録されていないので、「New」をクリックして新規追加します。
カスタム設定や用意された設定がいくつかあるので「AWS IoT」を選択します。
CloudFormationのStack起動のリンクがあるので、それをクリックしてスタックを起動しましょう。後で「External Id」が必要なので、ここでひかえておきます。
CloudFormationの画面に移るので、最初はそのまま「Next」をクリックします。
次はパラメータ設定です。
特に「AWSAccuntId」と「ExternalId」はデフォルトのものが入っているので、必ず更新して下さい。後、「TopicName」は、AWS IoTにpublishするトピック名の指定です。
スタックの作成が完了したら「Outputs」の内容を確認しておきましょう。この情報をSigfoxクラウド側に登録します。
Sigfoxクラウドの画面に戻って、CloudFormationで確認した「ARN Role」と「Topic」を入力しましょう。Regionは東京リージョンを利用しています。
次の「Json Body」欄には下記の内容を入力しておきましょう。
{ "device" : "{device}", "data" : "{data}", "time" : "{time}", "snr" : "{snr}", "station" : "{station}", "avgSnr" : "{avgSnr}", "lat" : "{lat}", "lng" : "{lng}", "rssi" : "{rssi}", "seqNumber" : "{seqNumber}" }
DynamoDBの準備
ここまでの作業でAWS IoTへデータを送る部分までの構築が完了しました。今回はAWS IoTで受けたデータをDynamoDBに保存してみます。
DynamoDBのコンソールでテーブルを作成しておきます。
テーブル名は適当なものして下さい。プライマリーキーを下記図のように設定します。
AWS IoTとDynamoDBの連携
作成したDynamoDBにデータを流せるようにします。まずはAWS IoTのコンソールから「Act」をクリックして、ルールを作成します。
ルール名と説明は適当なものを入力して下さい。AttributeとTopicフィルターは下記のように設定します。TopicフィルターはCloudFormationで指定したトピック名にします。
アクション先として「DynamoDBへのインサート」を選択します。
テーブル名は事前に作成した「sigfox」を選択します。その他の設定は下記のように設定してください。
最後に、AWS IoTにDynamoDBへのアクセス権限を付与します。今回は新たにIAM Roleを作成しました。
設定ができたらアクションを追加します。
「Create rule」をクリックしてルールを作成します。
作成後の画面です。
以上でAWS側の作業が完了しました。
SigfoxシールドからデータをDynamoDBに確認
これで準備が整ったので、実際にデータを飛ばして確認してみます。データ送信には特別な操作はありません。Sigfoxシールドが付いたArduinoの電源を入れるだけです。
Arduinoを起動してSigfoxクラウドと通信できていれば、Sigfoxクラウド上でステータスが緑色になっていると思います。
しばらくしてから、下記のようにDynamoDB側にデータが入っていればOKです!
最後に
Sigfoxシールドを使うと簡単にセンサーデータをクラウド上に送る事ができました。
1年間無料で、カバーエリアも順次拡大するようなので、是非試して頂ければと思います。
以上です。