赤外線センサーの結果をRaspberryPi 3 Model B+からAWS IoT経由でQuickSightでグラフ化するまで(その3) | そう備忘録

赤外線センサーの結果をRaspberryPi 3 Model B+からAWS IoT経由でQuickSightでグラフ化するまで(その3)

はじめに

赤外線距離センサーでカウントした値をブラウザでグラフ形式で表示するまでを試してみた時の備忘録。

赤外線距離センサー、RaspberryPiの設定に関してはその1の記事を参照の事。

Pythonのプログラムについてはその2の記事を参照の事

今回はAWS IoT Coreの設定とRaspberryPiとの接続テストについての記事とする。

なるべく分かりやすように丁寧に書いているつもりですが分かりづらい所や間違いがあればコメントを貰えるとありがたいです。

今回の記事の範囲

AWS IoT Coreの設定

AWS IoT Coreでモノの登録、各種証明書の発行、ポリシーの設定と証明書へのアタッチを行う。

モノの登録

最初にAWS IoT CoreにRaspberryPiを認識させる為にモノの登録を行う。

AWSサービスメニューからIoT Coreを選択する。

AWS IoT coreの選択

左のメニューから管理→モノをクリックすると一つもモノが登録されていない時は「まだモノがありません」と表示されるので「モノの登録」をクリックする。

モノの登録

「単一のモノを作成する」をクリックする。

単一のモノを作成する

名前に任意の名前(画面ではRaspberryPi3-01)をつける。

タイプとグループは未作成でも大丈夫なのですぐにモノを作成したい人は画面右下の「次へ」をクリックする。

モノに名前をつける

※タイプの登録は任意なのですぐにモノを登録したい人はこちらへ

「デバイスの管理が簡単になります」との事なので「タイプの作成」でタイプを作成した時の画面ショット。

複数のモノを登録する時にタイプで分類しておくと後々便利なのだと思う。

名前と説明欄を入力して画面右下の「モノのタイプの作成」をクリックする。

尚、名前に日本語は使用できないが説明欄は日本語が通った。

モノのタイプの作成

先程作成したタイプが既に選択されているので続いて「グループの作成」をクリックする。

※グループの登録は任意なのですぐにモノを登録したい人はこちらへ

グループにモノを登録するとデバイスをリモート管理できる(未検証)との事なので、登録した。

どの様な管理ができるのかはそのうちに試してみるつもり。

タイプの登録とグループの作成

名前と説明欄に入力して右下の「モノのグループの作成」をクリックする。

名前欄と説明欄に入力できる文字は先程のタイプと同様。

グループ 名前と説明の入力

先程作成したグループが追加されている。

グループの追加

画面右下の「次へ」をクリックするとモノが作成される。

次へ

証明書の取得

証明書を取得する。

複数の方法があるがAWS推奨の1-Click証明書を選択した。

「証明書の作成」をクリックする。

証明書の取得

証明書が1-Clickで作成された以下の順番で証明書ファイルを保存する。

  1. このモノの証明書をダウンロードして保存する
  2. パブリックキーをダウンロードして保存する
  3. プライベートキーをダウンロードして保存する
  4. AWS IoTのルートCAのダウンロードリンクをクリックして拡張子を*.pemで保存する

ここで取得したキー(のファイル名)は別記事のPythonのプログラムで指定する。

証明書の作成 ダウンロード

尚、4.のAWS IoTのルートCAのダウンロードリンクは新しいタブが表示されるのでAmazon Root CA 1をクリックする。

Amazon root CAの取得

ブラウザ上にAWS IoTのルートCA発行のキーが表示されるのでコピーしてテキストエディターに貼り付けて拡張子を”pem”で保存する。

ファイル名は適当でOK。

この際、文字コードはUnicode(UTF-8)で保存する。

Root CAの表示

「有効化」ボタンをクリックすると”証明書は正常に有効化されました”のメッセージが表示されるのでこの画面は一旦「完了」で閉じる。

※ポリシーはまだ作成していないので「ポリシーをアタッチ」は押さない

有効化

安全性ー>証明書をクリックするとアクティブな証明が発行されている事がわかる。

証明書が作成された

ポリシーの作成

続いてポリシーを作成する。

AWS IoTのメニューから安全性ー>ポリシーをクリックするとポリシーが未作成の時は”ポリシーはまだ作成されていません”のメッセージが表示されるのでポリシーの作成をクリックする。

ポリシーの作成

とにかく直ぐに作成して試したいだけであれば名前を入力してアクション欄に”iot:*”を入力するとリソースARNは自動的に設定されるので「作成」ボタンを押せばポリシーは作成される。

直ぐに使いたい場合

ポリシーの作成

今回はRaspberryPi側からのconnectとPublishのみを受け付けるポリシーを作成する。

アクションでiot:connectを選択する(iを入力するとサジェスト機能で一覧から選択できる)

IoT:connectの設定

リソースARNは自動で展開されるので”replaceWithAClientId”欄をプログラムで指定したClient ID(”RasPi01”)に置き換えて、”許可”にチェックを入れて「ステートメントの追加」をクリックする。

プログラム中のClient IDについては前回の記事を参照

IoT:connectの設定

行が追加されるので今度はアクション欄でiot:Publishを選択してリソースARN欄の”replaceWithATopic”をプログラムで指定したTopic(”count/pub”)に置き換える

許可にチェックを入れて「作成」ボタンをクリックする。

これでClient ID=RasPi01、Topic=count/pubのみを受け付けるポリシーが作成された。

なお、ポリシーはワイルドカードが使えるのでcount/# や # の様な指定も可能。

IoT Publishの設定

ポリシーが正常に作成されると以下のようなステートメントになる。

ポリシーのステートメント

ポリシーのアタッチ

先程作成した証明書に今回作成したポリシーをアタッチする。

左側のメニューから安全性ー>証明書をクリックして表示される証明を選択する。

証明書の呼び出し

証明書が表示されたらアクションから”ポリシーのアタッチ”を選択する。

ポリシーのアタッチ

アタッチしたいポリシーをチェックして「アタッチ」ボタンをクリックする。

アタッチしたいポリシーを選択する

AWS側の設定はこれで終了。

AWSのエンドポイント

プログラムに指定するAWSのエンドポイントを控えておく。

メニューから管理ー>モノをクリックして先ほど作成したモノを選択する。

管理ー>モノを選択

メニューで”操作”をクリックするとAWSのエンドポイントが表示されるのでプログラムに指定するので控えておく。

2022年3月31日 追記

今は左のメニューから”設定”を選択すればエンドポイントが表示される。

AWSのエンドポイント

プログラムの修正

続けてプログラム中に先程取得した各種証明書やAWSのエンドポイントの指定を行う。

  • モノの証明書
  • プライベートキー
  • AWS IoTのルートCA

の各種証明書ファイルをプログラム配下にcertディレクトリを作成してコピーしてファイル名と先程控えたAWSのエンドポイントのエンドポイントを指定する。

cert = "./cert/XXXX-certificate.pem.crt" #モノの証明書
key = "./cert/XXXX-private.pem.key" #プライベートキー
rootCA = "./cert/XXXX.pem" #Amazonルート証明書
endpoint = "XXXX-ats.iot.ap-northeast-1.amazonaws.com" #AWSのエンドポイント

接続テスト

AWS側を待ち受けにする

RaspberryPiとAWS IoT Coreとの接続テストを行う。

まずはAWS側で”テスト”をクリックする。

IoT接続テスト

画面の上部がサブスクリプション(AWS側が受信)下の方でパブリッシュ(AWS側が発信)のテストができる。

トピックのサブスクリプション欄に”count/pub”を指定して「トピックのサブスクライブ」をクリックする。

サブスクライブのテスト

count/pubのトピックの待受状態になる。

count/pubでトピックの待受になる

RaspberryPiのプログラムを実行する

RaspberryPi側でメニューからプログラミングー>Pythpn3(IDLE)でPython3を起動したらFileー>Openで該当のプログラムを開く。

そしてRunー>Run Module(またはF5)でプログラムを実行する。

尚、プログラムの詳細については前回の記事にソースコードを載せているので参照の事

プログラムの実行

プログラムを実行すると下記のPython 3.5.3 shell画面が表示される。

プログラムの実行

赤外線距離センサー(TSSP77038)の前に手をかざして何回か横切ってみる。

センサーのカウント

横切る度にカウントアップされてPythonのshell画面に表示される。

プログラム中のprint文で表示している。

カウントされる

AWS側

AWS側を見るとリアルタイムでサブスクライブされている。

※最新の情報が一番上に表示される。

以上で接続テストは終了。

AWSでサブスクライブ

動画での説明

モノの作成から証明書の発行、ポリシーの設定、RaspberryPiでプログラムを動かしてAWS IoT Coreでのテストまでの様子を動画にしている。

興味がある方はご確認ください。

つづく

以上でAWS IoT Coreの設定と接続テストは終了。

AWS Analyticsでデータセットに保存してAWS QiuickSightでグラフ化するのは次回以降の記事とする。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

2件のフィードバック

  1. 匿名 より:

    ファイル名は適当につけて「AWS IoTのルートCA発行のキーが表示されるのでコピーしてテキストエディターに貼り付けて保存する」ことは行いましたが、実際プログラミングでrootCAにファイル名を打ち込む際に拡張子がpemとなったものが存在しないので、xxxxに何を入れるべきかわかりませんでした。
    rootCA = “./cert/XXXX.pem” #Amazonルート証明書

    その間に何をすべきなのか教えていただけると幸いです。

    • souichirou より:

      テキストエディタでルート証明書(RootCA)を保存する際に拡張子をpemにして保存します。
      ルート証明書の中身はテキストなのです。
      ちょっと説明が分かりにくかった様ですね。
      記事の方を修正しておきます。
      質問ありがとうございました。

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。