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

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

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

安装最新版本的 Node.js

要使用适用于 JavaScript 的 AWS IoT 设备开发工具包,请在 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

    如果显示了版本号,则表示已正确安装 Node 和 npm。

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

在 Raspberry Pi 上安装适用于 JavaScript 的 AWS IoT 设备开发工具包。

  1. 在终端窗口中,使用以下命令可将适用于 JavaScript 的 AWS IoT 设备开发工具包存储库克隆到您的主目录(默认情况下为 /home/pi)中。

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

  2. 使用 cd 转到 aws-iot-device-sdk-js 目录。

  3. 使用 npm 安装开发工具包:

    npm install

准备运行示例应用程序

aws-iot-device-sdk-js 下,创建一个 certs 目录,并将您的私有密钥、设备证书以及根 CA 文件复制到该目录中。

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

您的 AWS 区域

要查找您正在使用的区域,请打开 AWS IoT 控制台并查看 URL。区域紧随 https:// 之后显示。例如:

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

有关更多信息,请参阅 AWS IoT 服务终端节点

客户端 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 设备开发工具包在 aws-iot-device-sdk-js/examples 目录中包含许多示例。建议您从 device-example.js 开始。此示例在两种模式下运行。在模式 1 中,它订阅 MQTT 主题 topic_1,并且每 4 秒在 topic_2 上发布一条消息。在模式 2 中,它订阅 topic_2,并在 topic_1 上每 4 秒发布一条消息。您可以运行 device-example.js 的两个实例(一个在模式 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 的两个实例时,请确保使用不同的客户端 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 选项以显示调试信息。