Sigfox Shield for ArduinoのデータをAWSに送信する

Sigfox Shield for ArduinoのデータをAWSに送信してみました。
スイッチサイエンス社では在庫が無かったので、SORACOMさんから購入しました。
様々なセンサーがこのシールドには搭載されています。
単体でネットワークに繋がるので、直ぐにIoTを試すことが出来ます。

IMG_0364.png

搭載センサー

  • 加速度センサ(MMA8451Q)
  • 温湿度・気圧センサ(BME280)

必要なもの

準備

SORACOM社から購入しているので、購入後セットアップは下記を参照してください。
https://dev.soracom.io/jp/start/sigfox_hw_unashield-v2s/#_ga=2.210765397.1366760851.1509329125-812912311.1499217908

DynamoDBテーブル作成

まずデータを保存するためのテーブルをAWSのDynamoDBに作成します。

s100.png

s101.png

項目
テーブル名 SigfoxDemo
プライマリキー timestamp(数値型)

s102.png

Lambdaの作成

続いてLambdaの作成を行います。関数の作成をクリックしてください。
s103.png

一から作成をクリック
s104.png

好きなロール名を入力してください。
s105.png

IAMのインラインポリシーを下記のように設定しました。
Resourceのテーブル名はIDは各々の設定を入力してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "dynamodb:PutItem"
            ],
            "Resource": "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXX:table/SigfoxDemo",
            "Effect": "Allow"
        }
    ]
}

関数コードを入力

関数が出来たら、関数コードを入力部分をクリックしてコードを追加しましょう

s118.png

// initialize SDK and document client
var AWS = require("aws-sdk");
var docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = function(event, context) {

  // SORACOMから送られてくるタイムスタンプ取得
  event.item.timestamp = event.timestamp;

  // build API parameter
  var params = {
    Item: event.item,
    TableName: 'SigfoxDemo'    /*対象のテーブル名*/
  };

  // call PutItem operation
  docClient.put(params, function(err, data){
    if (err)
      context.fail(err);
    else
      context.succeed({Item: event.item, Result:'success'});
  });
};

API Gatewayの設定

APIの作成をクリックしてください。

s107.png

好きなAPI名を入力してください
s108.png

メソッドの作成をクリックしてください
s109.png

POSTを選択しましょう
s110.png

POSTのセットアップ

s111.png

OKをクリックしましょう
s112.png

メソッドリクエストをクリック
s113.png

ヘッダーの追加をクリックして、SORACOMから送られてくる「X-SORACOM-TIMESTAMP」を設定します。
s114.png

APIキーの必要性をtrueにする
s115.png

総合リクエストをクリック
s116.png

本文マッピングテンプレートにあるマッピングテンプレートの追加をクリックして
Content-Typeにapplication/jsonを入力
s117.png

送られてくるデータをこれで取得する

{
    "timestamp":$input.params('X-SORACOM-TIMESTAMP'),
    "item":$input.json('$')
}

テスト

これでうまくDynamoDBに書き込まれるかテストを行ってみます。

s119.png

s120.png

これでDynamoDBに書き込まれたはずです。
ここで書き込まれなかった場合はロールの設定を見直してみましょう。DBアクセス権限が無い場合があります。

s121.png

デプロイする

作成したAPIをデプロイしましょう

s122.png

ステージ名を「prod」にしてデプロイボタンをクリック
s123.png

APIキー作成

APIキーを作成しましょう。

s124.png

好きなAPI名を入力して保存ボタンをクリック
s125.png

「使用量プランに追加」をクリック
s126.png

作成ボタンをクリック
s127.png

2つのチェックを外してください
s128.png

対象のAPIをステージ名を選択します
s129.png

最終的にこうなっていればOK
s130.png

AWSとSORACOM Beamを紐付ける

ここからは、SORACOMさんの管理画面から操作していき、作成したAWSと紐付けていきます。
管理画面のSigfoxグループをクリックしてください。

s131.png

適当にグループ名を入力しましょう
s132.png

SORACOM Air for Sigfox 設定

シールドから送られてくるバイナリデータをパースする為の設定です。
s133.png

SORACOM Beam 設定

HTTPSのエントリポイントを設定します
s134.png

s135.png

事前共有鍵の設定

s136.png

カスタムヘッダを追加

s137.png

s138.png

最終的には下記のような感じです
s139.png

Sigfoxデバイス管理

s140.png

s141.png

s142.png

実行する

ここまで完了したら、Sigfox Shield for Arduinoに電源を繋いで起動してみましょう
するとDynamoDBにセンサー値が書き込まれるかと思います。

s143.png

まとめ

比較的簡単にAWSとの接続が出来ました。しかも1年間は通信料が無料という特典付きです!
USBの電池ボックスとケースを作成すればサーバーの温度を測れる簡易センサーが作れると思います。
是非お試しあれ!

続きを読む