AWS IoT Device SDK for JavaScript および Node を使用する - AWS IoT

AWS IoT Device SDK for JavaScript および Node を使用する

このチュートリアルでは、Node.js、npm パッケージマネージャー、および JavaScript 用の AWS IoT Device SDK を Raspberry Pi にインストールして、サンプルアプリケーションを実行する方法について説明します。

Node.js の最新バージョンをインストールする

AWS IoT Device SDK for JavaScript を使用するには、Raspberry Pi に Node.js と npm パッケージマネージャーをインストールする必要があります。

  1. Node リポジトリの最新バージョンをダウンロードするには、ターミナルウィンドウを開き、次のコマンドを実行します。

    curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

  2. Node と npm をインストールするには、次のコマンドを実行します。

    sudo apt-get install -y nodejs

  3. Node と npm のインストールを確認するには、次のコマンドを実行します。

    node -v

    および

    npm -v

    バージョン番号が表示されている場合は、ノードと npm が正しくインストールされています。

AWS IoT Device SDK for JavaScript をインストールする

Raspberry Pi に AWS IoT Device SDK for JavaScript をインストールします。

  1. ターミナルウィンドウで、次のコマンドを使用して、AWS IoT Device SDK for JavaScript リポジトリをホームディレクトリ(デフォルトでは、/home/pi)にクローンします。

    git clone https://github.com/aws/aws-iot-device-sdk-js.git

  2. aws-iot-device-sdk-js ディレクトリへの cd

  3. npm を使用して SDK をインストールします。

    npm install

サンプルアプリケーションの実行を準備をする

aws-iot-device-sdk-jscerts ディレクトリを作成し、プライベートキー、デバイス証明書、およびルート CA 証明書をそのディレクトリにコピーします。

AWS IoT Device SDK for JavaScript サンプルを実行するには、次の情報が必要です。

AWS リージョン

使用しているリージョンを見つけるには、AWS IoT コンソールを開き、URL を確認します。リージョンは、https:// の直後に表示されます。以下に例を示します。

https://us-west-2.console.aws.amazon.com/iot/home?region=us-west-2#/dashboard

詳細については、「AWS IoT AWS サービスエンドポイント」を参照してください。

クライアント ID

AWS IoT に接続するデバイスまたはアプリケーションを識別するために使用される任意の英数字文字列。これは、このチュートリアルで使用する IoT モノの名前と同じである必要があります。

ユーザーのプライベートキー

Raspberry Pi 上のプライベートキーへの完全修飾パス(例: /home/pi/aws-iot-device-sdk-js/certs/private.pem.key)。

AWS IoT X.509 証明書

Raspberry Pi 上の AWS IoT 証明書への完全修飾パス(例: /home/pi/aws-iot-device-sdk-js/certs/device.pem.crt)。

STS Amazon ルート CA

Raspberry Pi 上の Amazon ルート CA への完全修飾パス(例: /home/pi/aws-iot-device-sdk-js/certs/Amazon-root-CA-1.pem)。

AWS IoT エンドポイント

Raspberry Pi に AWS CLI をインストールした場合は、describe-endpoint CLI コマンドを実行してエンドポイントを見つけることができます。

aws iot describe-endpoint --endpoint-type iot:Data-ATS

AWS CLI がインストールされていない場合は、AWS IoT コンソールを開きます。ナビゲーションペインで、[Manage (管理)]、[Things (モノ)] の順に選択します。Raspberry Pi の IoT のモノを選択し、[Interact (操作)] を選択します。モノ の詳細ページの [HTTPS] セクションにエンドポイントが表示されます。

AWS IoT メッセージブローカーがリッスンするポート

これは常に 8883 です。

IoT モノの名前

これは、Raspberry Pi を AWS IoT に登録したときに使用した名前です。

サンプルアプリケーションを実行する

JavaScript 用の AWS IoT Device SDK の aws-iot-device-sdk-js/examples ディレクトリには、多数のサンプルが含まれています。device-example.js から始めることをお勧めします。この例では、2 つのモードで実行されます。モード 1 では、MQTT トピック topic_1 に登録し、4 秒ごとにメッセージを topic_2 に発行します。モード 2 では、topic_2 に登録し、4 秒ごとにメッセージを topic_1 に発行します。2 つの device-example.js インスタンス(1 つはモード 1、もう 1 つはモード 2)を実行して、送受信されているメッセージを確認できます。

aws-iot-device-sdk-js/examples ディレクトリから、次のコマンドを実行してサンプルのインスタンスを起動します。

node device-example -k "../certs/private.pem.key" -c "../certs/device.pem.crt" -i "raspberry-pi-1" -a "../certs/Amazon-root-CA-1" -H "<your-iot-endpoint>" -p 8883 -T "your-thing-name" --test-mode 1

モード 2で実行中の device-example.jsの 別のインスタンスを起動します。

node device-example -k "../certs/private.pem.key" -c "../certs/device.pem.crt" -i "raspberry-pi-2" -a "../certs/Amazon-root-CA-1" -H "<your-iot-endpoint>" -p 8883 -T "your-thing-name" --test-mode 2

重要

device-example.js の 2 つのインスタンスを実行するときは、必ず異なるクライアント ID を使用してください。同じクライアント ID を使用して 2 つのクライアント (デバイスまたはアプリケーション) が AWS IoT に接続することはできません。最初のクライアントの接続が切断され、2 番目のクライアント接続が確立されます。

モノの名前は、IoT のモノに固有のポリシーを作成するときにのみ重要となります。AWS IoT の開始方法のチュートリアルでは、そのようなポリシーを作成しないので、両方のインスタンスに同じもの名を使用できます。

これで、Raspberry Pi は AWS IoT SDK for JavaScript を使用して AWS IoT に接続されました。

サンプルインスタンスが正しく実行されている場合、モード 1 で実行されているインスタンスからの出力は次のようになります。

substituting 250ms dely for truems... connect message topic_1 {"mode1Process":1} message topic_1 {"mode1Process":2} message topic_1 {"mode1Process":3} message topic_1 {"mode1Process":4} ...

モード 2 で実行されているインスタンスからの出力は、次のようになります。

substituting 250ms dely for truems... connect message topic_2 {"mode2Process":1} message topic_2 {"mode2Process":2} message topic_2 {"mode2Process":3} message topic_2 {"mode2Process":4} ...

サンプルが正しく実行されない場合は、デバッグ情報を表示する -d オプションを追加してみてください。