13_AWS

AWS IoT Coreへデータを送る

温湿度センサーで測定した温度をAWS IoT CoreへMQTTで送信します。

温湿度センサーモジュールWi-Fi通信
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

温湿度センサーモジュール

温湿度センサーモジュール

接続先:A

Wi-Fiの情報を確認する

CherryIoTを接続する2.4GHz Wi-FiのSSID(ネットワーク名)とパスワードを確認します。Wi-Fiルーター本体のラベルや設定画面に記載されています。分からない場合は、ネットワークの管理者に確認してください。

AWSを準備する

AWSアカウントを準備する

AWSのWebサイトを開き、「アカウントを作成」をクリックします。すでにAWSアカウントを持っている場合は、サインインして「AWS Management Consoleを開く」へ進んでください。

AWSのWebサイトでアカウント作成を始める画面

AWSアカウントの作成を始める

メールアドレスなど必要な情報を入力して、AWSアカウントの作成を進めます。

AWSアカウントの作成を始める画面

Freeプランを選択する

このサンプルの動作確認ではFreeプランで進められます。「Choose free plan」をクリックします。

AWSのアカウントプランでFreeプランを選択する画面

必要事項を登録する

連絡先情報など、画面に表示される必要事項を入力して登録を進めます。

AWSアカウント作成で連絡先情報を入力する画面

支払い方法を登録する

Freeプランでもクレジットカードなどの支払い方法を登録します。登録した支払い方法が有効か確認するため、カードの認証が行われる場合があります。

AWSアカウント作成で支払い方法を登録する画面

AWS Management Consoleを開く

アカウント作成が完了したら、AWS Management Consoleへサインインします。

AWS Management Consoleのホーム画面

リージョンを東京に設定する

画面右上のリージョンをクリックし、「アジアパシフィック(東京)」を選択します。

AWS Management Consoleで東京リージョンを選択する画面

AWS IoT Coreを開く

画面上部の検索欄で「IoT Core」を検索し、サービス一覧から「IoT Core」をクリックします。

AWS Management ConsoleでIoT Coreを検索する画面

モノを作成する

AWS IoT Coreの左メニューから「すべてのデバイス」→「モノ」を開き、「モノを作成」をクリックします。

AWS IoT Coreのモノ一覧からモノを作成する画面

1つのモノを作成する

「1つのモノを作成」を選択し、「次へ」をクリックします。

AWS IoT Coreで1つのモノを作成する画面

モノの名前を設定する

モノの名前に「ESP32CherryIoT_Device001」と入力します。追加設定は変更せず、Device Shadowは「シャドウがありません」を選択したまま「次へ」をクリックします。

AWS IoT Coreでモノの名前とDevice Shadowを設定する画面

デバイス証明書を作成する

「新しい証明書を自動生成(推奨)」を選択したまま、「次へ」をクリックします。

AWS IoT Coreで新しいデバイス証明書を自動生成する画面

IoTポリシーを作成する

証明書に設定するポリシーがまだないため、「ポリシーを作成」をクリックします。ポリシー作成画面は別タブで開くので、元の「モノを作成」タブはそのまま残しておきます。

AWS IoT Coreで証明書にアタッチするポリシーを作成する画面

ポリシーの内容を設定する

別タブで開いた画面で、ポリシー名を「ESP32CherryIoT_Policy」とします。「JSON」を選択し、AWS IoT Coreへの接続やデータ送信など、IoT Coreの各種操作をまとめて許可する設定として「Action」を「iot:*」、「Resource」を「*」に設定してポリシーを作成します。

AWS IoT CoreでESP32CherryIoT_PolicyのJSONを設定する画面

ポリシーの作成を確認する

「ESP32CherryIoT_Policy」が正常に作成されたことを確認します。確認できたら、元の「モノを作成」タブへ戻ります。

AWS IoT CoreでESP32CherryIoT_Policyの作成完了を確認する画面

作成したポリシーを選択する

元の「モノを作成」タブへ戻り、更新アイコンをクリックします。表示された「ESP32CherryIoT_Policy」にチェックを入れ、「モノを作成」をクリックします。

AWS IoT Coreで作成したポリシーを選択してモノを作成する画面

証明書とキーをダウンロードする

必要なファイルは個別にダウンロードできます。画面下の「すべてダウンロード」をクリックすると、表示されているファイルをまとめてダウンロードすることもできます。このサンプルで使用するのは、デバイス証明書(certificate.pem.crt)、プライベートキー(private.pem.key)、Amazon Root CA 1(AmazonRootCA1.pem)の3つです。キーファイルはこの画面を離れるとダウンロードできないため、この画面で必ず保存してください。特にプライベートキーは第三者へ公開しないでください。保存したら「完了」をクリックします。

AWS IoT Coreで証明書とキーをダウンロードする画面

モノが作成されたことを確認する

「モノ」の一覧に「ESP32CherryIoT_Device001」が表示されていることを確認します。

AWS IoT Coreのモノ一覧にESP32CherryIoT_Device001が表示された画面

データエンドポイントを確認する

左メニューの「接続」→「ドメイン設定」を開き、「iot:Data-ATS」のドメイン名をコピーします。この値をあとでサンプルコードのawsEndpointへ入力します。

AWS IoT Coreのドメイン設定でiot Data-ATSのデータエンドポイントを確認する画面

Arduino IDEに必要なライブラリをインストールする

このサンプルでは、次のライブラリを追加する必要があります。

  • DHT20 by Rob Tillaart
  • PubSubClient by Nick O'Leary

初めて使用する場合のみインストールしてください。

ライブラリをインストールする
2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

13_AWS.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

設定情報を書き換える

コード内の以下の箇所を、「1 準備する」で確認・取得した情報に 書き換えます。

コード内の項目入力する情報
ssid接続するWi-FiのSSID
passwordWi-Fiのパスワード
awsEndpointAWS IoT Coreのデータエンドポイント
thingNameAWS IoT Coreで作成したモノの名前
topicAWS IoT Coreへ送信するMQTTトピック
certificate_pem_crtデバイス証明書の内容
private_pem_keyプライベートキーの内容
amazon_caAmazon Root CAの内容
const char* ssid = "ここにSSIDを入力";const char* password = "ここにパスワードを入力";const char* awsEndpoint = "xxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com";const char* thingName = "ESP32CherryIoT_Device001";const char* topic = "esp32cherryiot/temperature/ESP32CherryIoT_Device001";const char* certificate_pem_crt = R"EOF(証明書の内容)EOF";const char* private_pem_key = R"EOF(プライベートキーの内容)EOF";const char* amazon_ca = R"EOF(Amazon Root CAの内容)EOF";

コードの左側にある項目名や記号は残し、例を参考に値の部分だけを 書き換えます。値を囲む"、行末の;、 証明書の開始・終了行などは削除しません。書き換えたあと、xxxxxなどの仮の文字が残っていないことを確認してください。

ダウンロードしたデバイス証明書、プライベートキー、AmazonRootCA1.pemは、メモ帳などのテキストエディターで開き、 表示された内容をコピーしてサンプルコードの対応する箇所へ貼り付けます。

Wi-Fiのパスワード、APIキー、トークン、証明書などを入力したコードは、 Webサイト、SNS、GitHubなどへ公開しないでください。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

AWS IoT Coreへの送信を確認する

1シリアルモニターで送信状況を確認する

プログラムを書き込むと、CherryIoTがWi-FiとAWS IoT Coreへ接続します。シリアルモニターに測定した温度と「MQTT Send:」に続くJSONが表示され、温度データが送信されていることを確認します。

Arduino IDEのシリアルモニターにAWS IoT Coreへ送信する温度データが表示された画面

2AWS IoT Coreで温度データを受信する

AWS IoT Coreの左メニューから「MQTTテストクライアント」を開き、「トピックのフィルター」に「esp32cherryiot/temperature/+」と入力して「サブスクライブ」をクリックします。受信メッセージに「ESP32CherryIoT_Device001」と温度の値が表示されることを確認します。

AWS IoT CoreのMQTTテストクライアントでCherryIoTから送信された温度データを受信した画面

MQTTテストクライアントに、CherryIoTから送信したデバイス名と温度データが表示されるなら成功です。

5

コードの解説

証明書を使ってAWS IoT Coreへ接続し、測定した温度をMQTTトピックへ送信します。

13_AWS.ino
GitHubで開く
GitHubからコードを読み込んでいます...

Serial.begin(115200);シリアルモニターへ文字や測定値を表示するため、通信速度を115200bpsに設定します。

#include <PubSubClient.h>MQTT通信を行うためのPubSubClientライブラリを読み込みます。MQTTは、機器がサーバーを介して小さなデータを送受信するための軽量な通信方式です。

const char* ssid = "xxxxx";CherryIoTを接続するWi-FiのSSIDを設定します。passwordにはWi-Fiのパスワードを設定します。

const char* awsEndpoint = "xxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com";AWS IoT Coreのエンドポイントを指定します。

const char* topic = "esp32cherryiot/temperature/ESP32CherryIoT_Device001";温度データを送信するMQTTトピックを指定します。

const char* certificate_pem_crt = R"EOF(AWS IoT Coreで作成したデバイス証明書を貼り付けます。private_pem_keyにはプライベートキー、amazon_caにはAmazon Root CAを貼り付けます。

net.setCACert(amazon_ca);AWSへ安全に接続するため、CA証明書を設定します。デバイス証明書と秘密鍵も同様に設定します。

client.setServer(awsEndpoint, awsPort);MQTTの接続先と8883番ポートを設定します。

if (client.connect(thingName)) {指定したThing名でAWS IoT CoreへのMQTT接続を試みます。

} else {ifの条件(AWS IoT CoreへのMQTT接続に成功した)を満たさないとき、再接続を試みます。

Wire.begin(1, 3);コネクタAで温湿度センサーのI2C通信を開始します。

DHT.begin();DHT20温湿度センサーを初期化します。

if (!client.connected()) {MQTT接続が切れていたらAWSへ再接続します。

float temperature = DHT.getTemperature();DHT20から温度を取得します。

String payload = "{";AWS IoT Coreへ送信するデータをJSON形式で組み立て始めます。

payload += "\"temperature\":" + String(temperature, 2);温度を小数点以下2桁のJSONデータへ追加します。

client.publish(topic, payload.c_str());作成したJSONを指定したMQTTトピックへ送信します。

delay(10000);10秒待ちます。