IoT を使ってみる(その2:AWS IoT モノの準備編)

| 4 min read
Author: shuichi-takatsu shuichi-takatsuの画像

前回は、AWS IoTの簡単接続手順(チュートリアル)を実行してIoTデバイス(Raspberry Pi)とAWS IoTの通信を行ってみました。
今回はチュートリアルを使わずに、AWS IoTコンソールを使って最初から「モノ」を登録していきましょう。

Contents

前置き

#

前回使用したIoTデバイス(Raspberry Pi)に”電圧降下エラー”が頻発するようになってしまい、動作が不安定になってしまいました。
おそらく電源アダプタの劣化か、USBコネクタの不良あたりが原因でしょう。
そのため、今後は別のIoTデバイス”ESP32”または”Arduino”(前回紹介)などの小型マイコンを使っていこうと思います。

ESP32 とは

#

IoTデバイスにはいくつかの種類がありますが、前回説明したRaspberry PiやArduinoの他にSTM32、ESP32などのマイコンの系列があります。
Raspberry PiやArduino、ESP32、STM32を物凄く簡単に説明すると

  • Raspberry Pi: イギリスの「ラズベリーパイ財団」によって開発されているマイコンで、ARM系CPUを搭載している
  • Arduino: イタリアの「Arduinoプロジェクト」によって開発されているマイコンで、ARM系やその他のCPUに対応している
  • STM32: STMicroelectronics社が開発したマイコンで、ARM Cortex系CPUを搭載している
  • ESP32: Espressif Systems社が開発したマイコンで、安価な割にWi-Fiを内蔵している

のような感じでしょうか。
今回は非常に安価でありながらWi-Fiも使える超お得(?)マイコンである「ESP32」をIoTデバイスとして使ってみたいと思います。
(機種選定は完全に筆者の好みと予算の都合です。本当はRaspberry Pi 4が欲しい…)

今回「モノの登録」に使用するESP32は以下の「LOLIN D32」です。この機種はAmazonで1000円未満で購入できました。

リチウムイオン電池給電での運用も想定しているのか、バッテリー接続端子が付いています(今回は使用しませんが)。
ESP32とPCとの接続は、機器本体にあるマイクロUSB端子とPC側のUSB端子をマイクロUSB変換ケーブルで繋ぎます。
ESP32とPCを接続するときの注意点としては、安価なマイクロUSB変換ケーブルだと充電にしか対応していないケーブルがあるので、ちゃんと通信に対応したケーブルを使いましょう。
筆者はケーブルのチェックを怠ったばかりに、CH340ドライバ(USBポートをCOMポートとして認識させArduino IDEと通信させるためのドライバ)やArduino IDEを再インストールしたりするなど、無駄に時間を使ってしまいました。

↓ 通信に対応したマイクロUSB変換ケーブル

今回は「モノの登録」までを解説します。
(次回以降、ESP32側にプログラムを登録し、AWS IoT側と通信させます)

準備「モノの作成、証明書とキーの取得、ポリシーの作成・設定」

#

手順は以下の解説の流れに従います。

AWS サーバーレスと ESP32 を使用して AWS IoT Core デバイスを構築する

モノの作成

#

ESP32をAWS IoTに登録していきます。

AWS IoTのコンソールから「管理」-「すべてのデバイス」-「モノ」を選択して、「モノを作成」を押します。

「一つのもの」を選択し「次へ」を押します。

「モノのプロパティを指定」で「モノの名前」を指定します。
ここでは”モノの名前”は「ESP32-LOLIN-D32」としました。
他の項目はデフォルトのままにして「次へ」を押します。

「デバイス証明書を設定 - オプション」で「新しい証明書を自動生成(推奨)」を選択し「次へ」を押します。

「証明書にポリシーをアタッチ - オプション」で「モノを作成」を押します。

証明書とキーの取得

#

証明書とキーのダウンロードダイアログが表示されるので、ダイアログを操作して

  • デバイス証明書
  • キーファイル
  • ルートCA証明書(CA1だけでOKです)

の3つをダウンロードします。
キーファイルはこのタイミングでしかダウンロードできないので、ダウンロードは必須です。
「完了」ボタンを押します。

モノが作成されました。
「管理」-「モノ」で作成された”モノ”が確認できます。

ポリシーの作成・設定

#

次に「ポリシー」を作成します。
「セキュリティ」-「ポリシー」で「ポリシーを作成」を押します。

ポリシー名を「ESP32-LOLIN-D32-Policy」にします。

「ポリシードキュメント」を「JSON」にして、以下のデータを設定します。
データのうち、以下の項目は各自の環境に合わせて変更してください。

  • REGION: 自分のアカウントのリージョン名(例:ap-northeast-1)
  • ACCOUNT_ID: AWSのアカウントID
  • <モノの名前>: この例では「ESP32-LOLIN-D32」
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:REGION:ACCOUNT_ID:client/<モノの名前>"
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/esp32/sub"
},
{
"Effect": "Allow",
"Action": "iot:Receive",
"Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topic/esp32/sub"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topic/esp32/pub"
}
]
}

個々の”Action”の詳細については以下のサイトの説明を御覧ください。
AWS IoT Core ポリシーアクション

詳しい説明は次回以降に行いますが、この設定によって

  • esp32/pub : パブリッシュ
  • esp32/sub : サブスクライブ

のエントリーポイントを指定しています。
「作成」ボタンを押します。

ポリシーが作成されました。

モノにポリシーをアタッチ

#

次に、モノにポリシーをアタッチします。
「管理」-「すべてのデバイス」-「モノ」で対象のモノ「ESP32-LOLIN-D32」を選択して
「証明書タブ」をクリックし、証明書を選択します。

「ポリシーをアタッチ」を選択します。

先程作成したポリシー「ESP32-LOLIN-D32-Policy」を選択し「ポリシーをアタッチ」を押します。

以下のようにポリシーにアタッチできました。

まとめ

#

AWS IoTコンソールから「モノの作成」「証明書の取得」「ポリシーの作成・設定」の操作をそれぞれ行いました。
証明書とキーのファイルは再ダウンロードができないので、証明書とキーを無くしてしまうとAWS IoTへの接続ができなくなってしまいますので、大切に保管しておいてください。

次回以降、IoTデバイス(ESP32)側にプログラムを登録し、簡単なPub/Sub通信を行っていきます。

過去記事インデックス:

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  2. Tauri でデスクトップアプリ開発を始める (2022-07-08)
  3. Deno による Slack プラットフォーム(オープンベータ) (2022-09-27)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  7. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  8. Rust によるデスクトップアプリケーションフレームワーク Tauri (2022-03-06)
  9. 箱ひげ図で外れ値を確認する (2022-05-18)
  10. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)