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のサイトで確認することが出来ます。青色の部分が利用可能な範囲です。

Coverage | Sigfox

300-sigfox-area

Sigfoxクラウド

また、Sigfoxクラウドというものが提供されており、特別な設定なしでセンサーからのデータを可視化することができたり、通信する時にSIMなども必要ないので、すぐに利用することができます。

今回のテスト環境

このSigfoxに対する通信モジュールとして、Arduinoのシールド「Sigfox Shield for Arduino」が先日発売されました。もちろん技適の認定済みです。
また、標準で加速度センサや、温湿度センサ、気圧センサを搭載しているのですぐに利用することができる他、GROVEコネクタも搭載しているので、その他の各種センサーも簡単に接続することが可能です。

購入については、国内ではソラコム社またはスイッチサイエンス社から可能です。

301-sigfox-sield

今回は、このシールドを用いてSigfoxを試してみました。ちなみに、このシールドはSigfoxの通信料が1年間無料です。
それでは早速試していきたいと思います!

Sigfoxシールドの準備

まずは先程の写真のようにArduinoと接続しておきましょう。写真のものは「Arduino Uno」です。
電源はUSB経由で取ることができるので、USBケーブルでMacにつなげておきます。

302-usb-sigfox-mac

デバイス側の準備はこれで完了です。

Sigfoxクラウドへの登録

次に、Sigfoxクラウド(Sigfox Backend Cloud)に端末の登録が必要になります。

まず、Sigfoxシールドからデバイス情報を事前に取得しておきます。本体にQRコードのシールが貼ってあり、それを読み取ることでデバイスID(HEX)とPAC情報を確認できるようになっています。

下記の部分にあるQRコードをスマホ等で読み取って下さい。

尚、iOS11では標準カメラで読み取れますが、今回の場合は読み取ることが出来ませんでした。その為、スマホで写真を撮って、下記のアプリで写真から読取りすることで確認できました。

QRコードリーダー PRO - App Store

03-sigfox

次に下記のURLから、Sigfoxクラウドにアクセスして登録を行います。

https://backend.sigfox.com/activate/Unabiz

アクセスできたら「Pick your country」タブを選択してください。

01-dev-kit-activation-country

画面をスクロールしていって、下記のように「JAPAN KYOCERA」を見つけてクリックします。

02-select-japan

次に「Device information」をクリックするとデバイス情報を入力する欄があるので、先程QRコードから読み取った「DEVICE ID」と「PAC」の値を入力します。

04-device-info

次に、アカウント情報を入力して登録します。

05-accout-datail

登録が完了すれば下記のような画面が表示されます。表示されているメッセージの通り、登録したメールアドレス宛に確認メールが送られているのでそちらを確認しましょう。

06-finish

次のようなメールが届いていることを確認します。

07-mail-password

メールにはパスワード設定用のURLが記載されているので、そのURLからパスワードを設定して下さい。

08-change-your-password

これでSigfoxクラウドにアクセスできますが、最初に利用規約の確認画面が出るので内容を確認して、問題無ければ「Accept」をクリックしてください。

09-tcu

ログインできれば、下記のように登録したデバイスが見えていると思います。

10-associated

Arduino開発環境の準備

次にArduino開発環境を準備します。ここでは既にPCに「Arduino IDE」がインストールされているものとします。まだインストールしていない場合は、下記からインストールしておきましょう。

Arduino - Software

今回のSigfoxシールドの利用には別途専用のライブラリが必要なので、下記よりZipファイルをダウンロードします。

UnaBiz/unabiz-arduino: Arduino library for connecting UnaShield to SIGFOX network

10-unabiz

Arudino IDEを起動してライブラリをインクルードしてください。画面はMacのものですがWindowsでも同様かと思います。

11-install-zip-library

確認として、「スケッチ例」に「unabiz-arduino-master」が登録されていればOKです。

12-sketch

keepaliveの設定

Sigfoxクラウドの登録が完了しましたが、デフォルトの状態では「keep-alive」の設定が無いので、Sigfoxクラウドにデータを送ることができません。

そこで、管理画面からkeepaliveの設定を行います。「DEVICE TYPE」のページにアクセスしてください。

110-keepalive-1

該当のタイプをクリックして「Edit」を選択します。

111-keepalive-2

次の画面で「Keep-alive」という項目があるので「30」(分)を設定します。

112-keepalive-3

これでkeepaliveの設定は完了です。

Why is the communication status black? - ask Sigfox

サンプルプログラムの実行

Arduino IDEにライブラリのインストールが完了していたら、サンプルプログラムが利用可能になっているので、スケッチ例から「DemoTestUnaShieldV2SRCZ3」を選択します。

12-2-demo

下記の部分を環境に合った内容に修正します。基本的にデフォルトのままで問題ないかと思いますが、static const Country countryについてはCOUNTRY_JPを指定するようにしましょう。

13-define-tranceiver

修正ができたら「右向き矢印」のアイコンをクリックしてArduinoに書き込みます。正常に書き込みができればOKです。

14-done

Sigfoxクラウド上で確認

Arduinoの書き込みが完了している時点で、すでにデータをSigfoxクラウドに送信しているはずなので、確認してみます。

まずはデバイス側の状況を確認します。デバイス側はArduinoのコンソールから確認できます。コンソールはArduino IDEの画面の右上にある虫眼鏡のアイコンをクリックして起動します。

204-2-console

コンソールが起動すると、下記のようなメッセージが断続的に出力されていればOKです。「tmp」が温度表示になります。

204-arduino-console

次に、Sigfoxクラウドでも確認してみましょう。管理画面の「STATISTICS」でデータがグラフで可視化されています。

205-statistics

AWSにデータを送ってみる

Sigfoxクラウドには「CALLBACK」という機能があり、自分のサーバやAWS等のパブリッククラウドにデータを送ることができます。

AWSの場合だと「AWS IoT」と「Amazon Kinesis」へのコネクタが既に用意されているので、今回はこれを使って「AWS IoT」に接続してみたいと思います。基本的な手順は下記の通りです。

Connect your devices to AWS IoT using the Sigfox network | The Internet of Things on AWS – Official Blog

CALLBACKの設定

Sigfox側でCloudformationのテンプレートが用意されているのでそれを実行しましょう。まずはSigfoxクラウドの「DEVICE」のページから「Device Type」をクリックします。

15-select-device-type

次の画面のでメニューから「CALLBACKS」をクリックして下さい。

16-callbacks

最初は何も登録されていないので、「New」をクリックして新規追加します。

17-callbacks-new

カスタム設定や用意された設定がいくつかあるので「AWS IoT」を選択します。

18-select-awsiot

CloudFormationのStack起動のリンクがあるので、それをクリックしてスタックを起動しましょう。後で「External Id」が必要なので、ここでひかえておきます。

101-launch-stack

CloudFormationの画面に移るので、最初はそのまま「Next」をクリックします。

20-select-template

次はパラメータ設定です。
特に「AWSAccuntId」と「ExternalId」はデフォルトのものが入っているので、必ず更新して下さい。後、「TopicName」は、AWS IoTにpublishするトピック名の指定です。

102-parameter

スタックの作成が完了したら「Outputs」の内容を確認しておきましょう。この情報をSigfoxクラウド側に登録します。

103-cfn-outputs

Sigfoxクラウドの画面に戻って、CloudFormationで確認した「ARN Role」と「Topic」を入力しましょう。Regionは東京リージョンを利用しています。

104-setting-callback

次の「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のコンソールでテーブルを作成しておきます。

25-create-db

テーブル名は適当なものして下さい。プライマリーキーを下記図のように設定します。

26-table

AWS IoTとDynamoDBの連携

作成したDynamoDBにデータを流せるようにします。まずはAWS IoTのコンソールから「Act」をクリックして、ルールを作成します。

27-create-rule

ルール名と説明は適当なものを入力して下さい。AttributeとTopicフィルターは下記のように設定します。TopicフィルターはCloudFormationで指定したトピック名にします。

28-add-action

アクション先として「DynamoDBへのインサート」を選択します。

29-select-action

30-config

テーブル名は事前に作成した「sigfox」を選択します。その他の設定は下記のように設定してください。

31-create-new-role

最後に、AWS IoTにDynamoDBへのアクセス権限を付与します。今回は新たにIAM Roleを作成しました。

32-create-role

設定ができたらアクションを追加します。

33-add-action

「Create rule」をクリックしてルールを作成します。

34-create-rule

作成後の画面です。

35-sigfox-rule

以上でAWS側の作業が完了しました。

SigfoxシールドからデータをDynamoDBに確認

これで準備が整ったので、実際にデータを飛ばして確認してみます。データ送信には特別な操作はありません。Sigfoxシールドが付いたArduinoの電源を入れるだけです。

Arduinoを起動してSigfoxクラウドと通信できていれば、Sigfoxクラウド上でステータスが緑色になっていると思います。

200-devicelist

しばらくしてから、下記のようにDynamoDB側にデータが入っていればOKです!

202-dynamodb

203-item

最後に

Sigfoxシールドを使うと簡単にセンサーデータをクラウド上に送る事ができました。
1年間無料で、カバーエリアも順次拡大するようなので、是非試して頂ければと思います。

以上です。