连接 Raspberry Pi 或其他设备 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

连接 Raspberry Pi 或其他设备

在本部分,我们将配置一个 Raspberry Pi 以便用于 Amazon IoT。如果您要连接另一台设备,Raspberry Pi 的说明包括可以帮助您调整这些指令以用到您设备上的参考资料。

这通常需要大约 20 分钟,但如果您需要安装许多系统软件升级,则可能需要更长的时间。

重要

将这些指令用于其他设备和操作系统可能会非常困难。您需要充分了解您的设备,以便能够解释这些说明并将它们应用到您的设备上。

如果您在为 Amazon IoT 配置设备时遇到困难,我们无法提供除本部分说明以外的任何帮助。但是,您可以尝试使用其他设备选项之一作为替代,例如 使用 Amazon EC2 创建虚拟设备 或者 将您的 Windows 或 Linux PC 或 Mac 用作 Amazon IoT 设备

设置您的设备

此步骤的目标是收集配置设备所需的信息,以便它可以启动操作系统 (OS)、连接到互联网,并允许您在命令行界面与设备进行交互。

要完成本教程,您需要:

  • 一个 Amazon Web Services 账户 。如果您没有账户,请完成 设置您的 Amazon Web Services 账户 中介绍的步骤然后继续操作。

  • Raspberry Pi 3 Model B 或更新型号。这可能适用于早期版本的 Raspberry Pi,但这尚未经过测试。

  • Raspberry Pi OS (32 位)或更高版本。我们始终建议使用最新版本的 Raspberry Pi OS。早期版本的操作系统可能正常工作,但这尚未经过测试。

    要运行此示例,您不需要使用图形用户界面 (GUI) 安装桌面;但是,如果您不熟悉 Raspberry Pi 并且您的 Raspberry Pi 硬件支持,则使用带有 GUI 的桌面可能会使操作更容易。

  • 以太网或 Wi-Fi 连接。

  • 键盘、鼠标、显示器、电缆、电源和设备所需的其他硬件。

重要

您的设备必须先安装、配置和运行操作系统,然后才能继续执行下一步。设备必须连接到互联网,并且您需要能够使用其命令行界面访问设备。命令行访问可以通过直接连接的键盘、鼠标和显示器,也可以使用 SSH 终端远程接口进行访问。

如果您在 Raspberry Pi 上运行具有图形用户界面 (GUI) 的操作系统,请在设备上打开终端窗口,然后在该窗口中执行以下说明。否则,如果您使用远程终端(如 PuTTY)连接到您的设备,请打开设备的远程终端并使用该终端。

为 Amazon IoT 设备软件开发工具包安装所需的工具和库

在安装 Amazon IoT 设备软件开发工具包和示例代码前,请确保您的系统处于最新状态,并具有安装软件开发工具包所需的工具和库。

  1. 更新操作系统并安装所需的库

    在安装 Amazon IoT 设备软件开发工具包前,在设备上的终端窗口中运行这些命令以更新操作系统并安装所需的库。

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install cmake
    sudo apt-get install libssl-dev
  2. 安装 Git

    如果您设备的操作系统没有安装 Git,则需要安装它,然后才能安装适用于 JavaScript 的 Amazon IoT 设备软件开发工具包

    1. 通过运行此命令测试是否已安装 Git。

      git --version
    2. 如果上一个命令返回了 Git 版本,则表示 Git 已经安装,您可以跳到步骤 3。

    3. 如果在运行 git 命令时显示了错误,则请运行此命令来安装 Git。

      sudo apt-get install git
    4. 再次运行此命令测试是否已安装 Git。

      git --version
    5. 如果已安装 Git,请跳到下一个部分。如果没有,请排除故障并更正错误,然后再继续。您需要 Git 才能安装适用于 JavaScript 的 Amazon IoT 设备开发工具包。

安装 Amazon IoT 设备软件开发工具包

安装 Amazon IoT 设备开发工具包。

Python

在本部分,您将在您的设备上安装 Python、其开发工具和适用于 Python 的 Amazon IoT 设备软件开发工具包。这些说明适用于运行最新版本 Raspberry Pi 操作系统的 Raspberry Pi。如果您有其他设备或使用其他操作系统,则可能需要为设备对以下说明的操作进行调整。

  1. 安装 Python 及其开发工具

    适用于 Python 的 Amazon IoT 设备软件开发工具包需要您的 Raspberry Pi 上安装了 Python v3.5 或更高版本。

    在设备的终端窗口中,运行这些命令。

    1. 运行此命令以确定设备上安装的 Python 版本。

      python3 --version

      如果安装了 Python,它将显示其版本。

    2. 如果显示的版本为 Python 3.5 或更高版本,则您可以跳至步骤 2。

    3. 如果显示的版本低于 Python 3.5,您可以运行此命令来安装正确版本。

      sudo apt install python3
    4. 运行此命令以确认现在安装了正确版本的 Python。

      python3 --version
  2. 针对 pip3 的测试

    在设备的终端窗口中,运行这些命令。

    1. 运行以下命令,查看是否安装了 pip3

      pip3 --version
    2. 如果命令返回了版本号,则表示已安装 pip3,您可以跳到步骤 3。

    3. 如果之前的命令返回了错误,请运行此命令以安装 pip3

      sudo apt install python3-pip
    4. 运行以下命令,查看是否安装了 pip3

      pip3 --version
  3. 安装正确的适用于 Python 的 Amazon IoT 设备软件开发工具包。

    安装适用于 Python 的 Amazon IoT 设备软件开发工具包并将示例应用程序下载到您的设备上。

    在您的设备上运行这些命令。

    cd ~ python3 -m pip install awsiotsdk
    git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
JavaScript

在本部分,您将在设备上安装 Node.js、npm 数据包管理器和适用于 JavaScript 的 Amazon IoT 设备软件开发工具包。这些说明适用于运行 Raspberry Pi 操作系统的 Raspberry Pi。如果您有其他设备或使用其他操作系统,则可能需要为设备对以下说明的操作进行调整。

  1. 安装最新版本的 Node.js

    要安装适用于 JavaScript 的 Amazon IoT 设备软件开发工具包,请在 Raspberry Pi 上安装 Node.js 和 npm 数据包管理器。

    1. 通过输入此命令以下载最新版本的 Node 存储库。

      cd ~ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
    2. 安装 Node 和 npm。

      sudo apt-get install -y nodejs
    3. 验证 Node 的安装。

      node -v

      确认该命令显示了 Node 版本。本教程需要 Node v10.0 或更高版本。如果未显示 Node 版本,请尝试再次下载 Node 存储库。

    4. 验证 npm 的安装。

      npm -v

      确认该命令显示了 npm 版本。如果未显示 npm 版本,请尝试再次安装 Node 和 npm。

    5. 重启设备。

      sudo shutdown -r 0

      设备重新启动后继续操作。

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

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

    1. 安装通用运行时库 aws-crt。

      cd ~ npm install aws-crt
    2. 安装适用于 JavaScript 的 Amazon IoT 设备软件开发工具包 v2

      npm install aws-iot-device-sdk-v2
    3. 将适用于 JavaScript 的 Amazon IoT 设备软件开发工具包存储库克隆到目录的 aws-iot-device-sdk-js-v2 目录里。在 Raspberry Pi 中,目录为 ~/,将在下列命令中用作目录。如果您的设备使用不同的路径来作为目录,则必须在以下命令中将 ~/ 替换为您设备的正确路径。

      这些命令会创建 ~/aws-iot-device-sdk-js-v2 目录并将软件开发工具包代码复制到其中。

      cd ~ git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
    4. aws-iot-device-sdk-js-v2 目录更改为您在之前步骤中创建的目录并安装软件开发工具包。

      cd ~/aws-iot-device-sdk-js-v2 npm install

安装并运行示例应用程序

在本部分,您将安装并运行在 Amazon IoT 软件设备开发工具包中找到的 pubsub 示例应用程序。此应用程序将显示您的设备如何使用 MQTT 库发布和订阅 MQTT 消息。示例应用程序订阅了一个主题,topic_1,将 10 条消息发布到该主题,并在从消息代理收到这些消息时予以显示。

安装证书文件

示例应用程序要求在设备上安装对设备进行身份验证的证书文件。

要为示例应用程序安装设备证书文件

  1. 运行这些命令,在您的目录中创建 certs 子目录。

    cd ~ mkdir certs
  2. 将您之前在 创建 Amazon IoT 资源 中创建的私有密钥、设备证书和根 CA 证书复制到 ~/certs 目录中。

    如何将证书文件复制到设备取决于设备和操作系统,此处未予介绍。但是,如果您的设备支持图形用户界面 (GUI) 并且具有 Web 浏览器,则可以在设备的 Web 浏览器中执行 创建 Amazon IoT 资源 中所述的流程,以将生成的文件直接下载到您的设备。

    下一节中的命令假定您的密钥和证书文件存储在设备上,如下表中所示。

    证书文件名

    文件

    文件路径

    根 CA 证书

    ~/certs/Amazon-root-CA-1.pem

    设备证书

    ~/certs/device.pem.crt

    私有密钥

    ~/certs/private.pem.key

要运行示例应用程序,您需要以下信息:

应用程序参数值

参数

在何处查找值

your-iot-endpoint

Amazon IoT 控制台中,选择 Manage(管理),然后选择 Things(事物)。

选择您为设备创建的 IoT 事物,MyIotThing 是之前使用的名称,然后选择 Interact(交互)。

您的端点会显示在事物详细信息页面的 HTTPS 部分中。

your-iot-endpoint 值的格式为:endpoint_id-ats.iot.region.amazonaws.com,例如,a3qj468EXAMPLE-ats.iot.us-west-2.amazonaws.com

Python

要安装和运行示例应用程序

  1. 导航到示例应用程序目录。

    cd ~/aws-iot-device-sdk-python-v2/samples
  2. 在命令行窗口中,按照说明将 your-iot-endpoint 并运行此命令。

    python3 pubsub.py --topic topic_1 --root-ca ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
  3. 观察示例应用程序:

    1. 为您的账户连接到 Amazon IoT 服务。

    2. 订阅消息主题 topic_1,并显示它收到的有关该主题的消息。

    3. 向主题 topic_1 发布 10 条消息。

    4. 输出类似于以下内容:

    Connecting to a3qEXAMPLEffp-ats.iot.us-west-2.amazonaws.com with client ID 'test-0c8ae2ff-cc87-49d2-a82a-ae7ba1d0ca5a'... Connected! Subscribing to topic 'topic_1'... Subscribed with QoS.AT_LEAST_ONCE Sending 10 message(s) Publishing message to topic 'topic_1': Hello World! [1] Received message from topic 'topic_1': b'Hello World! [1]' Publishing message to topic 'topic_1': Hello World! [2] Received message from topic 'topic_1': b'Hello World! [2]' Publishing message to topic 'topic_1': Hello World! [3] Received message from topic 'topic_1': b'Hello World! [3]' Publishing message to topic 'topic_1': Hello World! [4] Received message from topic 'topic_1': b'Hello World! [4]' Publishing message to topic 'topic_1': Hello World! [5] Received message from topic 'topic_1': b'Hello World! [5]' Publishing message to topic 'topic_1': Hello World! [6] Received message from topic 'topic_1': b'Hello World! [6]' Publishing message to topic 'topic_1': Hello World! [7] Received message from topic 'topic_1': b'Hello World! [7]' Publishing message to topic 'topic_1': Hello World! [8] Received message from topic 'topic_1': b'Hello World! [8]' Publishing message to topic 'topic_1': Hello World! [9] Received message from topic 'topic_1': b'Hello World! [9]' Publishing message to topic 'topic_1': Hello World! [10] Received message from topic 'topic_1': b'Hello World! [10]' 10 message(s) received. Disconnecting... Disconnected!

    如果您在运行示例应用程序时遇到问题,请查看 排除示例应用程序的故障

    您还可以将 --verbosity Debug 参数添加到命令行,以便示例应用程序显示有关其正在执行的操作的详细消息。该信息可能会为您提供帮助以便您解决问题。

JavaScript

要安装和运行示例应用程序

  1. 在您的命令行窗口中,导航到软件开发工具包创建的 ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub 目录,并使用这些命令安装示例应用程序。

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub npm install
  2. 在命令行窗口中,按照说明将 your-iot-endpoint 并运行此命令。

    node dist/index.js --topic topic_1 --root-ca ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
  3. 观察示例应用程序:

    1. 为您的账户连接到 Amazon IoT 服务。

    2. 订阅消息主题 topic_1,并显示它收到的有关该主题的消息。

    3. 向主题 topic_1 发布 10 条消息。

    4. 输出类似于以下内容:

    Publish received on topic topic_1 {"message":"Hello world!","sequence":1} Publish received on topic topic_1 {"message":"Hello world!","sequence":2} Publish received on topic topic_1 {"message":"Hello world!","sequence":3} Publish received on topic topic_1 {"message":"Hello world!","sequence":4} Publish received on topic topic_1 {"message":"Hello world!","sequence":5} Publish received on topic topic_1 {"message":"Hello world!","sequence":6} Publish received on topic topic_1 {"message":"Hello world!","sequence":7} Publish received on topic topic_1 {"message":"Hello world!","sequence":8} Publish received on topic topic_1 {"message":"Hello world!","sequence":9} Publish received on topic topic_1 {"message":"Hello world!","sequence":10}

    如果您在运行示例应用程序时遇到问题,请查看 排除示例应用程序的故障

    您还可以将 --verbosity Debug 参数添加到命令行,以便示例应用程序显示有关其正在执行的操作的详细消息。该信息可能会为您提供帮助以便您解决问题。

在 Amazon IoT 控制台中查看来自示例应用程序的消息

您可以在 Amazon IoT 控制台中使用 MQTT 客户端在应用程序的消息通过消息代理时进行查看。

要查看示例应用程序发布的 MQTT 消息

  1. 审核使用 Amazon IoT MQTT 客户端查看 MQTT 消息。此操作可帮助您了解如何在 Amazon IoT 控制台中使用 MQTT 客户端以在 MQTT 消息通过消息代理时进行查看。

  2. Amazon IoT 控制台中打开 MQTT 客户端

  3. 订阅主题 topic_1

  4. 在命令行窗口中,再次运行示例应用程序,并在 Amazon IoT 控制台MQTT 客户端中查看消息。

    Python
    cd ~/aws-iot-device-sdk-python-v2/samples python3 pubsub.py --topic topic_1 --root-ca ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
    JavaScript
    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub node dist/index.js --topic topic_1 --root-ca ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint