AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用适用于 JavaScript 的 AWS IoT 设备开发工具包

本教程介绍如何在 Raspberry Pi 上安装 Node.js、npm 程序包管理器以及适用于 JavaScript 的 AWS IoT 设备开发工具包,并运行设备开发工具包示例应用程序。

设置适用于 JavaScript 的 AWS IoT 设备开发工具包的运行时环境

要使用适用于 JavaScript 的 AWS IoT 设备开发工具包,请在 Raspberry Pi 上安装 npm 程序包管理器。

  1. 要添加 Node 存储库,请打开一个终端并运行以下命令:

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

  2. 要安装 Node 和 npm,请运行以下命令:

    sudo apt-get install -y nodejs

  3. 要验证 Node 和 npm 的安装情况,请运行以下命令:

    node -v

    npm -v

    如果通过这些命令显示版本号,则会正确地安装节点和 npm。

安装适用于 JavaScript 的 AWS IoT 设备开发工具包

要在 Raspberry Pi 上安装适用于 JavaScript 的 AWS IoT 设备开发工具包,请使用以下命令创建 ~/deviceSDK 目录:

mkdir deviceSDK

使用 npm 安装开发工具包:

npm install aws-iot-device-sdk

在安装完成后,node_modules 目录下应该有一个 ~/deviceSDK 目录。

准备运行示例应用程序

按照AWS IoT 入门的说明操作将 Raspberry Pi 注册到 AWS IoT。在 aws-device-sdk-js 下,创建 certs 目录,并将您的私有密钥、证书以及根 CA 文件复制到 certs 目录。

  • 将您的私有密钥重命名为 node-private-key.pem

  • 将您的证书重命名为 node-cert.pem

要运行适用于 JavaScript 的 AWS IoT 设备开发工具包示例,您需要以下信息:

您的 AWS 区域

您可以通过浏览到 AWS IoT 控制台并查看 URL 来找出您正在使用的区域。区域紧邻显示在 URL 中 https:// 的后面。例如:

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

AWS 区域还会显示在 URL 中的 ? 后面。有关更多信息,请参阅 AWS 区域和终端节点。有关特定于 AWS IoT 的区域信息,请参阅 AWS IoT 区域和终端节点

客户端 ID

用于标识连接到 AWS IoT 的设备或应用程序的任意字母数字字符串。

您的私有密钥

Raspberry Pi 上指向您的私有密钥的完全限定路径。这是您将 Raspberry Pi 注册到 AWS IoT 时生成的密钥。

您的 AWS IoT X.509 证书

Raspberry Pi 上指向您的 AWS IoT 证书的完全限定路径。这是您将 Raspberry Pi 注册到 AWS IoT 时生成的证书。

STS Amazon 根 CA

Raspberry Pi 上指向您的 Amazon 根 CA 的完全限定路径。

您的 AWS IoT 终端节点

您可以通过运行 describe-endpoint CLI 命令找到您的终端节点:

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

您还可以通过浏览到 AWS IoT 控制台,为 Raspberry Pi 选择 IoT 事物,然后选择交互,以查找您的终端节点。您的终端节点会显示在 HTTPS使用此 Rest API 终端节点更新您的设备影子之下。

AWS IoT 消息代理所侦听的端口

这始终为 8883

您的 IoT 事物名称

这是您将 Raspberry Pi 注册到 AWS IoT 时指定的名称。

运行示例应用程序

适用于 JavaScript 的 AWS IoT 设备开发工具包在 aws-iot-device-sdk-js/examples 目录中包含许多示例。我们建议您以 device-example.js 开始。此示例在两种模式下运行。在模式 1 中,它订阅 MQTT 主题 topic_1,并在 topic_2 上每 4 秒发布一条消息。在模式 2 中,它订阅 topic_2,并在 topic_1 上每 4 秒发布一条消息。您可以运行 device-example.js 的两个实例,一个在模式 1 中,一个在模式 2 中,然后查看发送和接收的消息。

aws-iot-device-sdk-js/examples 目录中,运行以下命令以启动示例的实例:

node device-example -k "../certs/node-private-key.pem" -c "../certs/node-cert.pem" -i "client-id-1" -H "<your-iot-endpoint>" -p 8883 -T "your-thing-name" --test-mode 1

启动在模式 2 中运行的另一个 device-example.js 实例:

node device-example -k "../certs/node-private-key.pem" -c "../certs/node-cert.pem" -i "client-id-2" -H "<your-iot-endpoint>" -p 8883 -T "your-thing-name" --test-mode 2

重要

在运行 device-example.js 的两个实例时,请确保使用不同的客户端 ID。没有两个客户端(设备或应用程序)可以使用相同的客户端 ID 连接到 AWS IoT。第一个客户端连接终止,第二个客户端连接建立。

仅当您创建特定于某个 IoT 事物的策略时,事物名称才重要。在 AWS IoT 入门教程中,您不会创建这样的策略,因此,您可以为两个实例使用相同的事物名称。

现在 Raspberry Pi 已经通过适用于 JavaScript 的 AWS IoT 开发工具包连接到 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 选项以显示调试信息。