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

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

![IMG_0364.png](https://qiita-image-store.s3.amazonaws.com/0/154355/2504caba-bdff-0ac7-ffe3-f07c1ab49a4b.png)

#搭載センサー
* 加速度センサ（MMA8451Q）
* 温湿度・気圧センサ（BME280）

#必要なもの
* [Sigfox Shield for Arduino](https://soracom.jp/products/sigfox/sigfox_shield_for_arduino/)
* [Arudino UNO](http://ssci.to/789)

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

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

![s100.png](https://qiita-image-store.s3.amazonaws.com/0/154355/28612f16-a9fb-8ce8-c280-a7ec9bf9f304.png)

![s101.png](https://qiita-image-store.s3.amazonaws.com/0/154355/22ff70fe-b6f7-67db-3ba7-1e764fd5d1c2.png)

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

![s102.png](https://qiita-image-store.s3.amazonaws.com/0/154355/c0caf749-7571-848d-ee44-2ae2f9742736.png)

#Lambdaの作成
続いてLambdaの作成を行います。関数の作成をクリックしてください。
![s103.png](https://qiita-image-store.s3.amazonaws.com/0/154355/b7af904f-0d4a-6e05-cf95-06400b9d52fb.png)

一から作成をクリック
![s104.png](https://qiita-image-store.s3.amazonaws.com/0/154355/916a13f3-68c8-bf75-58ef-f6665717ba15.png)

好きなロール名を入力してください。
![s105.png](https://qiita-image-store.s3.amazonaws.com/0/154355/94a2eb3e-8666-c1dd-442e-e28c499cd6a0.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](https://qiita-image-store.s3.amazonaws.com/0/154355/7f2382d5-c37c-aac7-2adb-b3cc016ce138.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](https://qiita-image-store.s3.amazonaws.com/0/154355/39973773-1720-d6a3-197c-a3d5f7528ef4.png)

好きなAPI名を入力してください
![s108.png](https://qiita-image-store.s3.amazonaws.com/0/154355/d4ba0954-c2c1-1aef-afdf-c9f2d52db60e.png)

メソッドの作成をクリックしてください
![s109.png](https://qiita-image-store.s3.amazonaws.com/0/154355/76f57b3c-e90e-6c78-592c-34beff73abb6.png)

POSTを選択しましょう
![s110.png](https://qiita-image-store.s3.amazonaws.com/0/154355/68edfc41-a689-0655-668d-484d50acd22a.png)

###POSTのセットアップ
![s111.png](https://qiita-image-store.s3.amazonaws.com/0/154355/daa235b5-ae9a-0b5e-f380-324a54e87a24.png)

OKをクリックしましょう
![s112.png](https://qiita-image-store.s3.amazonaws.com/0/154355/887bf4af-1b7f-4042-25b0-729a8036485d.png)

メソッドリクエストをクリック
![s113.png](https://qiita-image-store.s3.amazonaws.com/0/154355/f6b27666-5f46-ecb7-6364-3dd036c4d3ba.png)

ヘッダーの追加をクリックして、SORACOMから送られてくる「X-SORACOM-TIMESTAMP」を設定します。
![s114.png](https://qiita-image-store.s3.amazonaws.com/0/154355/9b7dd3a8-ff09-f0c6-bef2-4c5b009a4d43.png)

APIキーの必要性をtrueにする
![s115.png](https://qiita-image-store.s3.amazonaws.com/0/154355/50692d43-36db-d6b5-c26d-fc80c4643299.png)

総合リクエストをクリック
![s116.png](https://qiita-image-store.s3.amazonaws.com/0/154355/72a03557-f34a-cd5c-9597-d4d2b33fc378.png)

本文マッピングテンプレートにある`マッピングテンプレートの追加`をクリックして
Content-Typeに`application/json`を入力
![s117.png](https://qiita-image-store.s3.amazonaws.com/0/154355/abb95f6b-4458-8344-0e91-4515b1fa35c5.png)

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

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

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

![s119.png](https://qiita-image-store.s3.amazonaws.com/0/154355/18f18707-1df4-03de-6534-7ca3cf2d9442.png)

![s120.png](https://qiita-image-store.s3.amazonaws.com/0/154355/8a5127d1-1c01-a932-1f22-66c917cdb084.png)

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

![s121.png](https://qiita-image-store.s3.amazonaws.com/0/154355/d82bf8d7-515a-8cb6-ace1-6fbec1435ce2.png)

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

![s122.png](https://qiita-image-store.s3.amazonaws.com/0/154355/9d1a54d2-7b7d-c5ed-fb33-adb478338e35.png)

ステージ名を「prod」にしてデプロイボタンをクリック
![s123.png](https://qiita-image-store.s3.amazonaws.com/0/154355/4d330f43-9926-ea7d-937b-59879f3c9507.png)

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

![s124.png](https://qiita-image-store.s3.amazonaws.com/0/154355/da689a17-e0d1-8ff5-3922-867d739335aa.png)

好きなAPI名を入力して保存ボタンをクリック
![s125.png](https://qiita-image-store.s3.amazonaws.com/0/154355/b8046ab4-0c29-24d1-8825-d1537e371b11.png)

「使用量プランに追加」をクリック
![s126.png](https://qiita-image-store.s3.amazonaws.com/0/154355/ab34285f-897e-0841-efaa-c5ee94e94f84.png)

作成ボタンをクリック
![s127.png](https://qiita-image-store.s3.amazonaws.com/0/154355/d7a85889-0f7f-3dd6-8342-477ed2ccb135.png)

２つのチェックを外してください
![s128.png](https://qiita-image-store.s3.amazonaws.com/0/154355/9a98d26e-374e-f536-985d-f465c5d16ed7.png)

対象のAPIをステージ名を選択します
![s129.png](https://qiita-image-store.s3.amazonaws.com/0/154355/9aa98a94-6457-cf2f-3134-ac71e2daf985.png)

最終的にこうなっていればOK
![s130.png](https://qiita-image-store.s3.amazonaws.com/0/154355/66eaa0d9-c86a-d100-8bf5-03064bd4d603.png)

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

![s131.png](https://qiita-image-store.s3.amazonaws.com/0/154355/108a493e-93f6-1eda-ad29-8e0eca70c40a.png)

適当にグループ名を入力しましょう
![s132.png](https://qiita-image-store.s3.amazonaws.com/0/154355/8382bcee-60b8-c1b8-af06-26d40d78299b.png)

###SORACOM Air for Sigfox 設定
シールドから送られてくるバイナリデータをパースする為の設定です。
![s133.png](https://qiita-image-store.s3.amazonaws.com/0/154355/a8181845-350d-7682-e10f-14c58e2276f9.png)

###SORACOM Beam 設定
HTTPSのエントリポイントを設定します
![s134.png](https://qiita-image-store.s3.amazonaws.com/0/154355/88dd3428-5bb7-240e-2a63-405299992817.png)

![s135.png](https://qiita-image-store.s3.amazonaws.com/0/154355/ec3ff0f8-8aae-780b-20fc-9ba63d0b8d0d.png)

###事前共有鍵の設定
![s136.png](https://qiita-image-store.s3.amazonaws.com/0/154355/987d91a1-4a88-5482-bc7d-db4994d5583b.png)

###カスタムヘッダを追加
![s137.png](https://qiita-image-store.s3.amazonaws.com/0/154355/bbd4f661-0c15-da6b-d5c3-9b4a0c11448e.png)

![s138.png](https://qiita-image-store.s3.amazonaws.com/0/154355/528d3b5a-4c6e-6b35-ccbb-d51a8dfa1733.png)

最終的には下記のような感じです
![s139.png](https://qiita-image-store.s3.amazonaws.com/0/154355/01b12edb-7436-8f67-64f7-fadf31179ff4.png)

#Sigfoxデバイス管理
![s140.png](https://qiita-image-store.s3.amazonaws.com/0/154355/1b647f15-7baa-628a-eba5-24173748719d.png)

![s141.png](https://qiita-image-store.s3.amazonaws.com/0/154355/e4b3f13a-47e7-e4c9-800c-5b663f24f3f7.png)

![s142.png](https://qiita-image-store.s3.amazonaws.com/0/154355/e364af0f-a053-0227-0e75-bc04639fcb46.png)

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

![s143.png](https://qiita-image-store.s3.amazonaws.com/0/154355/c5325c7b-84bc-8570-4dd5-4b10ea38ac5b.png)

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