Amazon Web Services ブログ

MicroPython を使って AWS IoT Core を始める

はじめに

お客様からは、使い慣れたデバイスや言語を使って AWS IoT を使い始めるにはどうしたら良いか、という質問を受けることがあります。このようなニーズに応えるために、AWS は AWS IoT Core デベロッパーガイドで、Raspberry Pi での接続Amazon EC2 による仮想デバイスの作成などのチュートリアルを公開しています。このブログでは、MicroPython を使用して ESP32 ベースのマイクロコントローラを AWS IoT Core に接続するように構成する方法を説明します。

MicroPython は、プログラミング言語 Python 3 のサブセットを効率的に実装したものです。MicroPython は、組み込みの C 言語や Java プログラムと比較して、直感的で読み書きが簡単な高水準言語です。MicroPython と ESP32 ベースのマイクロコントローラを使用すれば、AWS IoT プロジェクトのプロトタイピングを素早く開始することができます。

プロジェクトをプロトタイピングすることで、完全な IoT ソリューションを迅速にテストすることができます。MicroPython では、デバイスを AWS IoT Core に接続し、他の AWS サービスにメッセージをルーティングすることが簡単にできます。このブログでは、組み込みプログラミングや IoT の経験がなくても、MicroPython を使用して IoT デバイスを素早くプロトタイプ化できる方法を紹介します。

読むのに必要な時間 10 分
完了までの時間 30 分
完了までの費用 $0. AWS 無料利用枠の詳細については、AWS IoT Core の料金を確認してください。
学習レベル 中級 (200)
使用サービス AWS IoT Core

概要

このブログでは、ESP32 マイクロコントローラを構成して、MQTT を介して AWS IoT Core に接続する方法を説明します。本ブログでは、以下のタスクを完了します。

  • IoT ポリシーを作成する
  • AWS IoT のモノを作成する
  • マイコン用のファイルを用意する
  • MicroPython を使って AWS IoT に接続する
  • マイコンにファイルをコピーする
  • デバイスシャドウを更新する

前提条件

このブログの内容を実施するためには、ESP32 ベースのマイクロコントローラが必要です。このブログでは、MicroPython v1.19.1 が動作する FeatherS2 を使ってテストしています。別のボードを使用する場合は、ボードの機能に応じて、内蔵 LED と光センサーのコードの一部を変更する必要があるかもしれません。また、MicroPython のシリアル接続でファイルを送るためのコマンドラインツールである ampy を使用します。以下を準備する必要があります。

ステップ1: IoT ポリシーを作成する

このステップでは、AWS IoT のモノに権限を与えるためのポリシーを作成します。

  1. AWS IoT コンソールを開きます。
  2. 画面左側のナビゲーションペインで、[セキュリティ]の下のポリシーを選択します。
  3. ポリシーを作成を選択します。
  4. ポリシー名には、BlogThing-Policy と入力します。

AWS IoT Core コンソールでの IoT ポリシーの作成

  1. ポリシードキュメントでは、JSON を選択し、以下のポリシーを入力します。

a. <Region> には、リージョンコードを入力します。

b. <account_ID> には、アカウント ID をハイフンなしで入力します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:<Region>:<account_ID>:client/BlogClient"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": "arn:aws:iot:<Region>:<account_ID>:topic/$aws/things/BlogThing/shadow/update"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": "arn:aws:iot:<Region>:<account_ID>:topicfilter/$aws/things/BlogThing/shadow/update/delta"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": "arn:aws:iot:<Region>:<account_ID>:topic/$aws/things/BlogThing/shadow/update/delta"
    }
  ]
}
JSON

ステップ2: AWS IoT のモノを作成する

このステップでは、AWS IoT のモノを構成し、認証に使用する証明書ファイルをダウンロードします。

  1. AWS IoT コンソールを開きます。
  2. 画面左側のナビゲーションペインで、[管理]-[すべてのデバイス]セクションの下にあるモノを選択します。
  3. モノを作成を選択します。
  4. [モノを作成]ページの[作成するモノの数]セクションで、1 つのモノを作成を選択し、次へを選択します。
  5. モノの名前に、BlogThing を入力します。
  6. [デバイスシャドウ]セクションで、名前のないシャドウ(クラシック)を選択します。
  7. シャドウステートメントを編集セクションを選択し、展開します。続いて、以下のステートメントを入力します。
{
    "state":{}
}
JSON

モノのプロパティの設定

8. 次へ を選択します。

9. [デバイス証明書を設定]ページで、新しい証明書を自動生成(推奨)を選択します。

デバイス証明書の設定画面

10. ポリシーセクションでは、ステップ1で作成した BlogThing-Policy を選択します。

証明書へのポリシーのアタッチ画面

11. モノを作成を選択します。

12. 証明書とキーをダウンロード画面で、デバイス証明書キーファイルをダウンロードします。

証明書とキーのダウンロード画面

13. 完了を選択します。

ステップ3: マイクロコントローラ用のファイルを準備する

このステップでは、デバイス証明書と秘密鍵のファイル名を変更し、MQTT に必要なライブラリーをダウンロードします。次に、サンプルコードをダウンロードし、確認します。

  1. デバイス証明書と鍵のファイルをダウンロードしたローカルディスクに移動します。
  2. デバイス証明書は、-certificate.pem.crt で終わるファイルです。この証明書のファイル名を cert.pem.crt に変更します。
  3. 秘密鍵は、-private.pem.key で終わるファイルです。このファイル名を private.pem.key に変更します。なお、このブログでは公開鍵は使いません。
  4. 次に、MQTT に必要なライブラリーをダウンロードします。GitHub のリポジトリの内容をローカルディスクにダウンロードします。
  5. ファイルを整理するために、getting-started-micropython-esp32 というフォルダを作成します。証明書と秘密鍵のファイルをこのフォルダーに移動します。
  6. micropython-lib GitHub リポジトリの micropython/umqtt.simple/umqtt/simple.py というファイルを、ローカルディスクの getting-started-micropython-esp32 フォルダの umqtt フォルダにコピーします。
  7. getting-started-micropython-esp32 フォルダには、以下のファイルがあるはずです。

a. cert.pem.crt

b. private.pem.key

c. umqtt/simple.py

フォルダとファイル構成の画面

ステップ4: MicroPython を使用して AWS IoT に接続する

次に、AWS IoT Core に MQTT で接続するためのコードを書きます。

  1. getting-started-micropython-esp32 フォルダに、main.py というファイルを新規に作成します。
  2. GitHub の aws-iot-core-getting-started-micropython リポジトリから main.py のコードをコピーします。
  3. 以下のコードを入力します。

a. wifi_ssid をお使いのワイヤレスネットワーク名に置き換えてください。

b. wifi_password をお使いのワイヤレスネットワークのパスワードに置き換えてください。

c. aws_endpoint を お使いの AWS アカウントの AWS IoT のエンドポイントに置き換えてください。AWS IoT Core コンソールの設定ページで確認することができます。

ステップ5: マイクロコントローラにファイルをコピーする

続いて、ファイルをマイクロコントローラにコピーする必要があります。この例では、Adafruit MicroPython ツール (ampy) を使用します。

feather s2 ボード

  1. マイコンボードを USB ケーブルでパソコンに接続します。
  2. コマンドプロンプトまたはターミナルを開き、get-started-micropython-esp32 に移動します。
  3. 以下のコマンドを入力して、ファイルをコピーしてください。<port> は、お使いのマイコンのポートに置き換えてください。

ampy -p <port> put cert.pem.crt

ampy -p <port> put private.pem.key

ampy -p <port> put main.py

ampy -p <port> mkdir umqtt

ampy -p <port> put umqtt/simple.py umqtt/simple.py

  1. RST ボタンを押して、ボードをリセットしてください。

ステップ6: デバイスシャドウを更新する

デバイスが AWS IoT Core にデータを送信するようになりましたので、デバイスシャドウの状態を更新してボードの LED を点灯させます。

  1. AWS IoT Core のコンソールを開きます。
  2. 画面左メニュの[管理]セクションの[全てのデバイス]でモノを選択します。
  3. ステップ2で作成した BlogThing を選択します。
  4. Device Shadow タブを選択し、Classic Shadow を選択します。

AWS コンソールにおける BlogThing のデバイスシャドウ

5. デバイスシャドウはボード上の LED の点灯状態、クライアント名、稼働時間、ファームウェア、ハードウェア、光センサーの値を報告します。編集を選択し、デバイスシャドウを以下の JSON に書き換えて、LED を点灯させます。

{
    "state": {
        "desired": {
            "led": {
                 "onboard" : 1
             }
           }
     }
}
JSON

AWS コンソールにおけるデバイスシャドウの状態の編集

6. ボードは、次のメッセージを AWS IoT Core に送信するまでの間にスリープ状態となりますので、LED が点灯するまでに最大 10 秒かかる場合があります。LED が点灯したら、JSON を編集して onboard を 0 に設定し、LED を消灯してください。

クリーンアップ

デバイスの接続が不要になった場合は、このブログ中に作成したリソースをクリーンアップして、料金が発生することを回避する必要があります。

MicroPython からファイルを削除する

  1. マイコンボードをパソコンに接続します。
  2. 以下のコマンドを入力し、ファイルを削除します。<port> と <file> は、ステップ5でコピーした各ファイルの名前に置き換えてください。

ampy -p <port> rm <file>

AWS IoTのモノを削除する

  1. AWS IoT Core のコンソールを開きます。
  2. 画面左側のメニューの管理-すべてのデバイスのモノを選択します。
  3. ステップ2で作成した AWS IoT のモノを選択します。
  4. 削除を選択します。

AWS コンソールにおける BlogThing の削除

AWS IoT ポリシーを削除する

  1. AWS IoT Core のコンソールを開きます。
  2. [セキュリティ]の下のナビゲーションペインで、ポリシーを選択します。
  3. ステップ1で作成した AWS IoT ポリシーを選択します。
  4. 削除を選択します。

AWS コンソールにおける BlogThing のポリシーの削除

まとめ

MicroPython を使用して、新しいアイデアをプロトタイプ化することができます。この同じソリューションを使用して、IoT プロジェクトをプロトタイプ化し、AWS IoT サービスを迅速に評価することができます。このブログでは、MQTT を使用して ESP32 マイクロコントローラを AWS IoT Core に接続するために必要なステップを実行しました。AWS IoT のモノとポリシーを作成し、ファイルを準備してコピーし、デバイスシャドウをテストしました。MicroPython を使用して、AWS IoT Core をすぐに使い始めることができました。

センサーデータが AWS IoT Core に送信されるようになったので、AWS IoT Core の他のいくつかの機能を試してみることができます。デバイスデータを他のサービスにルーティングするための AWS IoT ルールの作成を検討してください。

LoRaWAN を使用した河川水位のモニタリングの実装ガイドでは、LoRaWAN で MicroPython を使用する方法の例を示しています。

本ブログで使用した FeatherS2 の詳細については、Unexpected Maker のウェブサイトをご覧ください。

WS IoT Core の詳細については、ドキュメントワークショップをご確認ください。

この記事は Jeremy Schiefer によって書かれた Using MicroPython to get started with AWS IoT Core の日本語訳です。この記事は プロフェッショナルサービス本部 IoT コンサルタントの宮本 篤が翻訳しました。

著者

Jeremy Schiefer

Jeremy Schiefer

Jeremy Schiefer は、Amazon Web Services の Senior Security SA です。ワールドワイドのパブリックセクターのお客様をサポートしています。セキュリティ体制の改善、3D プリンティング、モノのインターネット(IoT)に情熱を注いでいます。