こんにちは!園部です。

「IoTのためのクラウドシステム構築」の続きです。今回はセンサデータのクラウドストレージへの保存をやっていきます!

◇ 全体の流れ

  • S3のバケットを作成する

  • IoTCoreのモノを作成する

  • IoTCoreのルールを設定する

  • センサデータをAWSに送るプログラムを作成し、実行する

※ 前提としてAWSアカウントは持っているものとします

1.S3のバケット作成

  • AWSマネージメントコンソール(マネコン)からS3サービスを開き、バケットの作成ボタンを押す。

  • バケット名を入力し、任意のリージョンを選択してバケット作成ボタンを押す。

S3バケットの作成

記事内画像

2.IoTCoreのモノを作成する

  • IoTCoreサービスを開き、左メニューの”管理”→”すべてのデバイス”→”モノ”を選択する

  • モノを作成ボタンを押し、一つのモノを作成を選択する

  • モノのプロパティ画面でモノの名前を入力し、他はそのまま次へ

  • デバイス証明書画面で”新しい証明書を自動生成”を選択し、次へ

  • 証明書にポリシーをアタッチ 画面で、今回はとりあえずIoTフルアクセスのついたポリシーを作成してアタッチする

  • 証明書とキーをダウンロードダイアログが出るので、デバイス証明書、鍵、ルート証明書をダウンロードする

IoTCoreモノの証明書ダウンロード

記事内画像

※ 証明書、鍵関連のファイルはクラウドとデバイスを繋ぐ際に重要なファイルなので必ずダウンロードしてください。

3.IoTCoreのルールを設定する

  • IoTCoreの画面、左メニューの”メッセージのルーティング”→”ルール”を選択し、ルールを作成ボタンを選択する

  • ルール名を入力し次へ

  • SQL ステートメントを設定画面で”SQLステートメント”に「SELECT * FROM ’任意のトピック’」を記入する。今回はトピック名を’SENDtoS3’にし次へ

  • 作成ボタンを押しルール作成完了

IoTCoreのルールを設定する

記事内画像

※ IAMロールはとりあえずS3フルアクセスがついていれば良いです

4.センサデータをAWSに送るプログラムを作成し、実行する

■ AWS接続用のClientConfigファイルを作成する

clientConfig.py

  • clientName = ‘your client name’

  • endpoint_path = ‘XXXXXXXXXXXXXXX-XXX.iot.ap-XXXXXXX.amazonaws.com’

  • amazonroot_path = ‘/home/pi/Documents/Certificate/AmazonRootCA1.pem’

  • privatekey_path = ‘/home/pi/Documents/Certificate/your private key’

  • certificate_path = ‘/home/pi/Documents/Certificate/your certificate’

※ 今回Pythonファイルは全てDocumentsフォルダに置いています

■ 実行プログラムの作成

bme280toS3.py

  • #coding: utf-8

  • from bme280_get_data import BME280

  • from smbus2 import SMBus

  • import time

  • from datetime import datetime

  • import json

  • import clientConfig as client

  • #AWS SDKsのインポート

  • from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

  • sensor = BME280()

  • clientName = client.clientName

  • endpoint_path = client.endpoint_path

  • amazonroot_path = client.amazonroot_path

  • privatekey_path = client.privatekey_path

  • certificate_path = client.certificate_path

  • #クライアント情報を設定する

  • def set_mqttclient(name=clientName,endpoint=endpoint_path,root=amazonroot_path,key=privatekey_path,certificate=certificate_path):

  • MQTTClient = AWSIoTMQTTClient(name)

  • MQTTClient.configureEndpoint(endpoint, 8883)

  • MQTTClient.configureCredentials(root, key, certificate)

  • MQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Pubblish queueing

  • MQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz

  • MQTTClient.configureConnectDisconnectTimeout(10) # 10 sec

  • MQTTClient.configureMQTTOperationTimeout(5) # 5 sec

  • return MQTTClient

  • if name == ‘main’:

  • myMQTTClient = set_mqttclient()

  • try:

  • myMQTTClient.connect()

  • messageJson = sensor.getMessage()

  • myMQTTClient.publish(‘your topic’, messageJson, 1)#publish関数の第一引数をマネコンで設定したトピックに置き換える

  • except KeyboardInterrupt:

  • pass

S3サービスの作成したバケットにテキストファイルが作成されていれば成功です!

ダウンロードして確認するとセンサーのデータが入っています。

以上、RaspberryPiを使ったセンサデータのS3への保存をやっていきました。

次はAWSのOpensearchを使ってセンサデータの可視化をやっていきます!