13_AWS
AWS IoT Coreへデータを送る
温湿度センサーで測定した温度をAWS IoT CoreへMQTTで送信します。
準備する
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アカウントの作成を始める
メールアドレスなど必要な情報を入力して、AWSアカウントの作成を進めます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Arduino IDEに必要なライブラリをインストールする
このサンプルでは、次のライブラリを追加する必要があります。
- DHT20
- PubSubClient
初めて使用する場合のみインストールしてください。
ライブラリをインストールするサンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
設定情報を書き換える
コード内の以下の箇所を、「1 準備する」で確認・取得した情報に 書き換えます。
| コード内の項目 | 入力する情報 |
|---|---|
ssid | 接続するWi-FiのSSID |
password | Wi-Fiのパスワード |
awsEndpoint | AWS IoT Coreのデータエンドポイント |
thingName | AWS IoT Coreで作成したモノの名前 |
topic | AWS IoT Coreへ送信するMQTTトピック |
certificate_pem_crt | デバイス証明書の内容 |
private_pem_key | プライベートキーの内容 |
amazon_ca | Amazon 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」で詳しい手順を確認してください。
動作確認
AWS IoT Coreへの送信を確認する
1シリアルモニターで送信状況を確認する
プログラムを書き込むと、CherryIoTがWi-FiとAWS IoT Coreへ接続します。シリアルモニターに測定した温度と「MQTT Send:」に続くJSONが表示され、温度データが送信されていることを確認します。

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

MQTTテストクライアントに、CherryIoTから送信したデバイス名と温度データが表示されるなら成功です。
コードの解説
証明書を使ってAWS IoT Coreへ接続し、測定した温度をMQTTトピックへ送信します。
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秒待ちます。