AWS IoT Coreを使ってM5Stick CPlusからの通信を受信してみた

2020.12.15

こんにちは、コンサル部@大阪オフィスのTodaです。

AWS IoT Coreを使ってみたいと考えていたところ、以前個人で購入していたM5Stick CPlusがあったので簡易なプログラムを組んで連携をしてみました。

やりたいこと

  • AWS IoT Coreを利用する。
  • MQTT クライアントでM5Stick CPlusからの通信を受け取る。

やりたいこと

前提条件

  • AWS IoTの設定が一切無い状態からおこなう。
    ※IoTデバイスのプログラムは今回公開しておりません、別記事で簡易なプログラムを公開する予定です。

AWS IoT Coreとは?

AWS IoT Coreはインターネットに接続されているIoTデバイスからデータを安全に通信する手助けをするサービスです。 AWS IoT Coreを利用する事でAWSクラウドサービス(AWS Lambda、Amazon Kinesis、Amazon S3、Amazon DynamoDB、Amazon CloudWatchなど)と連携ができIoTを使ったサービス展開を簡易にできるようになります。

AWSからのスライドもわかりやすくまとめられているため御覧ください。

M5Stick CPlusとは?

M5StickCPlusはM5Stack社が開発、販売をしているIoTデバイス開発ツールキットです。
別機器でM5StickCがありWi-FiとBluetooth機能が追加された物になります。
プログラムはArduino言語を利用して開発します。
Arduino言語はC/C++をベースにして開発されたプログラミング言語です。

・M5Stack 公式サイト https://m5stack.com/

・M5Stick CPlus Docs https://docs.m5stack.com/#/en/core/m5stickc_plus

今回はM5StickCPlusに環境センサユニット(ENV II)を接続して、温度、湿度、気圧を計測できるようにしています。

・ENV II Docs https://docs.m5stack.com/#/en/hat/hat_envII

M5Stick CPlus

AWS IoT Coreで準備すること

  • IoTデバイス用のポリシー設定
  • IoTデバイス認証用の証明書
  • IoTデバイス(モノ)の登録
  • 通信用のエンドポイント

実際やってみる

サービスメニューから[IoT Core]を選択します。
上記準備することを元に必要な情報をそろえていきます。

IoTデバイス用のポリシー設定

AWS IoT ポリシーを指定する事で、AWS IoTリソース (モノ、Thing Shadow、MQTT トピック など)へのアクセス許可を付与または拒否します。
右メニューから[安全性] > [ポリシー]を選択します。
画面上の[ポリシーの作成]をクリックします。

IoTデバイス用のポリシー設定

ポリシーの設定

ポリシー名の指定とステートメントの指定をします。 画面は[ベーシックモード]と[アドバンストモード]で切り替えることができます。 今回はテストで全IoTリソースを使えるようにするため全て許可で対応します。

ベーシックモードの場合 ポリシーの設定

アドバンストモードの場合

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iot:*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

ポリシーの保存

ポリシー設定を入力後、[作成]をクリックする事で登録が完了します。

ポリシーの保存

IoTデバイス認証用の証明書作成

証明書はAWS IoTで認証時または通信保護に利用されます。
右メニューから[安全性] > [証明書]を選択します。
画面上の[証明書を作成する]をクリックします。

IoTデバイス認証用の証明書作成

証明書を作成する

証明書は1-Clickで作成ができる[証明書を作成]、CSRをアップして行う[CSRによる作成]、お持ちの証明書を利用する[開始方法]の3点があります。
今回は簡易に作成できる[証明書を作成]で対応します。

証明書を作成する

証明書のダウンロード

作成をすると[モノの証明書]、[パブリックキー]、[プライベートキー]が取得できます。
上記のキー情報は再度ダウンロードすることができないため保存は注意しておこないます。

証明書のダウンロード

3点の証明書、キーと別でAWS IoTのルートCA証明書をダウンロードする必要があります。
画面内の[ダウンロード]リンクをクリックして別ウィンドウを開きます。
CA証明書はAmazon Trust Services エンドポイントが推奨されていますので特に理由無い場合はこちらを利用します。 私は[RSA 2048 ビットキー:Amazon Root CA 1]を利用しています。

サーバー認証用の CA 証明書

サーバー認証用の CA 証明書

証明書の有効化

画面上にある[無効化]のボタンをクリックして[有効化]に切り替えます。
切換後、画面下の[ポリシーのアタッチ]をクリックします。

証明書の有効化

証明書に権限を追加

さきほど作成した全許可のポリシーを選択して[完了]ボタンをクリックします。

証明書の有効化とポリシーアタッチ

証明書の作成完了

証明書の作成が完了するとステータスがアクティブになっている事を確認します。
アクティブ以外の場合はチェックボックスで選択をおこない[アクション] > [有効化]をクリックしてください。

証明書の作成完了

IoTデバイス タイプの登録

IoTデバイスにタイプを指定する事で関連付けされる全てのデバイスに共通の設定情報を格納する事ができます。
右メニューから[管理] > [タイプ]を選択します。
画面上の[タイプの登録]をクリックします。

タイプの設定

タイプ名と説明を入力して保存します。
こちらで共通の属性設定やタグを指定する事も可能です。

タイプの設定

タイプの作成

IoTデバイス(モノ)の登録

利用するデバイスの情報を登録します。
右メニューから[管理] > [モノ]を選択します。
画面上の[モノの登録]をクリックします。

IoTデバイス(モノ)の登録

登録の種類を選択

物理デバイスの登録は[単一のモノを作成]と[多数のモノを作成]の2パターンがあります。
今回は機体が1台のため[単一のモノを作成する]で進めるようにします。

デバイス(モノ)の設定

物理デバイスの名称、タイプを指定します。
画面下の[次へ]をクリックします。

デバイス(モノ)の設定

証明書なしで作成

証明書を追加、設定する画面が表示されます。
今回は事前に作成した証明書がありますので[証明書なしでモノを作成]を選択します。

証明書の追加

デバイス(モノ)の登録完了

デバイス(モノ)の登録作業が完了になります。

デバイス(モノ)の登録完了

IoTデバイスに証明書関連付け

作成したデバイスに証明書を関連付けします。
右メニューから[安全性] > [証明書]を選択します。
一覧から関連付けしたい証明書を選択して[アクション] > [モノのアタッチ]をクリックします。

IoTデバイスに証明書関連付け

作成したデバイスが表示されますので選択をして[アタッチ]をクリックします。

IoTデバイスに証明書関連付けアタッチ

エンドポイントの確認

AWS IoTのエンドポイントを確認します。
右メニューから[設定]を選択します。

表示をするとカスタムエンドポイントの枠に[エンドポイント]が表示されています。

エンドポイントの確認

通信テストをしてみる

上記でAWS IoTの通信に必要な設定が完了いたしました。
通信が正常にできるか確認をするためMQTTクライアントを使って受信確認をします。

MQTTクライアント

右メニューから[テスト]を選択します。
表示される画面内にある[トピックのサブスクリプション]を英数字で決めて[トピックへのサブスクライプ]をクリックします。
トピックは testTopic にしています。

MQTTクライアント

IoT開発者に必要な情報の提示

デバイスとAWS IoTを通信するために必要な情報をIoT開発者に共有します。

下記情報を共有

  • CA証明書 (証明書作成時に取得)
  • モノの証明書 ( 〃 )
  • プライベートキー ( 〃 )
  • デバイスの名称 (デバイス(モノ)の登録で設定した名称)
  • エンドポイント ([ランダムな英数字].iot.ap-northeast-1.amazonaws.com)
  • トピック (testTopic)

通信確認

IoT機器の設定が終わり、通信をすると情報が表示されるようになります。
温度、湿度、気圧、バッテリーの電圧を送信するようにしています。

通信確認

さいごに

AWS IoT に M5Stick CPlus から通信をおこない受信ができるまでを試してみました。
今回はAWS IoTとデバイスの通信を確立する入り口の部分を設定しております。
受信した情報を他サービスに連携する方法については別記事で検証いたします。