概要
- 新型コロナの影響で環境センシングデバイス、可視化ツールの需要が高まっている。
- 前回「IoT-DX-Kit」を使って、スマホのFlutterアプリ上で気温、湿度を可視化してみた。
- 今回はクラウド(AWS)上にデータ蓄積を行う。
- EC2インスタンスやRDB、S3を使わない方法を試してみた。
AWSのCloudWatchにデータが温湿度データが蓄積されている様子
用意するもの
- IoT-DX-Kit マイコンボード
- DHT22 温湿度センサー
- AWSアカウント
環境構築
(1)Flutterをインストール
https://www.arduino.cc/en/main/software
(2)Flutter Blueをインストール
https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library
(3)AWSアカウントを作成
構成
APIサーバーを作らず、API Gateway宛に届いたPOSTデータを契機にLambdaがCloudWatchに書き込むようにする
プログラミング
Lambdaにて、POSTされたデータをCloudWatchに書き出すスクリプトを書いておく
LambdaはデフォルトでCloudWatch Logにログを書き出すようになっているのでIAM設定の必要はなし
名前:(任意)
ランタイム:Node.js 14.x
アクセス権限:AWS ポリシーテンプレートから新しいロールを作成
ロール名:(任意)
テストイベントの作成」からテストを作って、実行後ステータス200で正常終了することを確認する
exports.handler = (event, context, callback) => {
console.log("callback response " + JSON.stringify(event['body-json']));
callback(null, {"message":"Received!"});
};
API GatewayでAPIリソース(/reciever)を追加する
Flutter側で、API Gatewayより発行されたURLにに温湿度データをPOSTする処理を追加する
API Gatewayでは、x-api-key
ヘッダーでアクセス制限をかけておく
Future<void> sendjson(data) async {
final url =
"https://abcabcabc.execute-api.ap-northeast-1.amazonaws.com/test-receiver-999-105/receiver";
Map requestBody = {
"temperture": (data.getInt8(0) + data.getInt8(1) / 100),
"humidity": (data.getInt8(2) + data.getInt8(3) / 100),
"datetime": DateTime.now().toString()
};
String body = json.encode(requestBody);
print(body);
http.Response response =
await http.post(Uri.parse(url), body: body, headers: {
"Content-Type": "application/json",
"x-api-key": "abcabcabcabcabcabcabcabcabcabcabcabcabcabcabc"
});
var res = json.decode(response.body);
print(res);
}
検証
ダッシュボードからウィジェットを追加すればグラフ表示も可能
次回に向けて
- 蓄積したデータを他のAWSサービスを利用して分析に使うことを考えてみる