

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 连接 Raspberry Pi 或其他设备


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

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

**Topics**
+ [

## 设置您的设备
](#gs-device-prereqs)
+ [

## 安装 Amazon IoT 设备 SDK 所需的工具和库
](#gs-device-sdk-tools)
+ [

## 安装 Amazon IoT 设备 SDK
](#gs-device-install-sdk)
+ [

## 安装并运行示例应用程序
](#gs-device-node-app-run)
+ [

## 在 Amazon IoT 控制台中查看来自示例应用程序的消息
](#gs-device-view-msg)

**重要**  
将这些指令用于其它设备和操作系统可能会非常困难。您需要充分了解您的设备，以便能够解释这些说明并将它们应用到您的设备上。  
如果您在配置设备时遇到困难 Amazon IoT，可以尝试使用其他设备选项作为替代方案，例如[使用 Amazon EC2 创建虚拟设备](creating-a-virtual-thing.md)或[使用你的 Windows、Linux 电脑或 Mac 作为 Amazon IoT 设备](using-laptop-as-device.md)。

## 设置您的设备


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

要完成本教程，您需要：
+ 一个 Amazon Web Services 账户。如果您没有账户，请完成 [设置 Amazon Web Services 账户](setting-up.md) 中介绍的步骤然后继续操作。
+ [Raspberry Pi 3 Model B](https://www.raspberrypi.com/products/) 或更新型号。这可能适用于早期版本的 Raspberry Pi，但这尚未经过测试。
+ [Raspberry Pi OS (32 位)](https://www.raspberrypi.com/software/operating-systems/)或更高版本。我们始终建议使用最新版本的 Raspberry Pi OS。早期版本的操作系统可能正常工作，但这尚未经过测试。

  要运行此示例，您不需要使用图形用户界面（GUI）安装桌面；但是，如果您不熟悉 Raspberry Pi 并且您的 Raspberry Pi 硬件支持，则使用带有 GUI 的桌面可能会使操作更容易。
+ 以太网或 WiFi 连接。
+ 键盘、鼠标、显示器、电缆、电源和设备所需的其它硬件。

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

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

## 安装 Amazon IoT 设备 SDK 所需的工具和库


在安装 Amazon IoT 设备 SDK 和示例代码之前，请确保您的系统是最新的，并且具有安装所需的工具和库 SDKs。

1. 

**更新操作系统并安装所需的库**  
在安装 Amazon IoT 设备 SDK 之前，请在设备的终端窗口中运行这些命令以更新操作系统并安装所需的库。

   ```
   sudo apt-get update
   ```

   ```
   sudo apt-get upgrade
   ```

   ```
   sudo apt-get install cmake
   ```

   ```
   sudo apt-get install libssl-dev
   ```

1. 

**安装 Git**  
如果设备的操作系统未安装 Git，则必须安装该操作系统才能为其安装 Amazon IoT 设备 SDK JavaScript。

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

      ```
      git --version
      ```

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

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

      ```
      sudo apt-get install git
      ```

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

      ```
      git --version
      ```

   1. 如果已安装 Git，请跳到下一个部分。如果没有，请排除故障并更正错误，然后再继续。你需要 Git 来安装的 Amazon IoT 设备软件开发工具包 JavaScript。

## 安装 Amazon IoT 设备 SDK


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

------
#### [ Python ]

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

1. 

**安装 Python 及其开发工具**  
适用于 Python 的 Amazon IoT 设备 SDK 需要在 Raspberry Pi 上安装 Python v3.5 或更高版本。

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

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

      ```
      python3 --version
      ```

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

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

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

      ```
      sudo apt install python3
      ```

   1. 运行此命令以确认现在安装了正确版本的 Python。

      ```
      python3 --version
      ```

1. 

**针对 pip3 的测试**  
在设备的终端窗口中，运行这些命令。

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

      ```
      pip3 --version
      ```

   1. 如果命令返回了版本号，则表示已安装 **pip3**，您可以跳到步骤 3。

   1. 如果之前的命令返回了错误，请运行此命令以安装 **pip3**。

      ```
      sudo apt install python3-pip
      ```

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

      ```
      pip3 --version
      ```

1. 

**安装当前适用于 Python 的 Amazon IoT 设备 SDK**  
安装适用于 Python 的 Amazon IoT 设备 SDK 并将示例应用程序下载到您的设备上。

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

   ```
   cd ~
   python3 -m pip install awsiotsdk
   ```

   ```
   git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
   ```

------
#### [ JavaScript ]

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

1. 

**安装最新版本的 Node.js**  
的 Amazon IoT 设备 SDK JavaScript 需要在你的 Raspberry Pi 上安装 Node.js 和 npm 包管理器。

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

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

   1. 安装 Node 和 npm。

      ```
      sudo apt-get install -y nodejs
      ```

   1. 验证 Node 的安装。

      ```
      node -v
      ```

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

   1. 验证 npm 的安装。

      ```
      npm -v
      ```

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

   1. 重启设备。

      ```
      sudo shutdown -r 0
      ```

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

1. 

**安装适用于的 Amazon IoT 设备 SDK JavaScript**  
在你的 Raspberry Pi JavaScript 上安装适用于的 Amazon IoT 设备 SDK。

   1. 将 JavaScript存储库的 Amazon IoT 设备 SDK 克隆到您的*home*目录目录中。`aws-iot-device-sdk-js-v2`在 Raspberr *home* y Pi 上`~/`，*home*目录是，在以下命令中用作目录。如果您的设备使用不同的*home*目录路径，则必须在以下命令中将其`~/`替换为设备的正确路径。

      这些命令会创建 `~/aws-iot-device-sdk-js-v2` 目录并将 SDK 代码复制到其中。

      ```
      cd ~
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. 更改为您在之前步骤中创建的 `aws-iot-device-sdk-js-v2` 目录，然后 运行 `npm install` 以安装开发工具包。`npm install` 命令将调用可能需要几分钟才能完成的 `aws-crt` 库构建。

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

------

## 安装并运行示例应用程序


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

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

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

1. 通过运行这些命令在您的*home*目录中创建一个`certs`子目录。

   ```
   cd ~
   mkdir certs
   ```

1. 将您之前在 [创建 Amazon IoT 资源](create-iot-resources.md) 中创建的私有密钥、设备证书和根 CA 证书复制到 `~/certs` 目录中。

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

   下一节中的命令假定您的密钥和证书文件存储在设备上，如下表中所示。  
**证书文件名**    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/iot/latest/developerguide/connecting-to-existing-device.html)

要运行示例应用程序，您需要以下信息：


**应用程序参数值**  

|  参数  |  在何处查找值  | 
| --- | --- | 
| your-iot-endpoint |  在 [Amazon IoT 控制台](https://console.amazonaws.cn/iot/home)中，选择 **All devices**（所有设备），然后选择 **Things**（事物）。 在 Amazon IoT 菜单的**设置**页面上。端点会显示在**设备数据端点**部分。  | 

该*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
   ```

1. 在命令行窗口中，*your-iot-endpoint*按照指示进行替换，然后运行此命令。

   ```
   python3 pubsub.py --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. 观察示例应用程序：

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

   1. 订阅消息主题 **topic\$11**，并显示它收到的有关该主题的消息。

   1. 向主题 **topic\$11** 发布 10 条消息。

   1. 输出类似于以下内容：

   ```
   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!
   ```

   如果您在运行示例应用程序时遇到问题，请查看 [借助示例应用程序排除问题](gs-device-troubleshoot.md)。

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

------
#### [ JavaScript ]

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

1. 在您的命令行窗口中，导航到 SDK 创建的 `~/aws-iot-device-sdk-js-v2/samples/node/pub_sub` 目录，并使用这些命令安装示例应用程序。`npm install` 命令将调用可能需要几分钟才能完成的 `aws-crt` 库构建。

   ```
   cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub
   npm install
   ```

1. 在命令行窗口中，*your-iot-endpoint*按照指示进行替换，然后运行此命令。

   ```
   node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

1. 观察示例应用程序：

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

   1. 订阅消息主题 **topic\$11**，并显示它收到的有关该主题的消息。

   1. 向主题 **topic\$11** 发布 10 条消息。

   1. 输出类似于以下内容：

   ```
   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}
   ```

   如果您在运行示例应用程序时遇到问题，请查看 [借助示例应用程序排除问题](gs-device-troubleshoot.md)。

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

------

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


您可以在 **Amazon IoT 控制台**中使用 **MQTT 测试客户端**，在示例应用程序的消息通过消息代理时查看它们。

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

1. 审核 [使用 MQTT 客户端查看 Amazon IoT MQTT 消息](view-mqtt-messages.md)。它可以帮助您了解如何使用 **Amazon IoT 控制台**中的 **MQTT 测试客户端**来查看通过消息代理时的 MQTT 消息。

1. 在 **Amazon IoT 控制台**中打开 **MQTT 测试客户端**。

1. 订阅主题 **topic\$11**。

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

------
#### [ Python ]

   ```
   cd ~/aws-iot-device-sdk-python-v2/samples
   python3 pubsub.py --topic topic_1 --ca_file ~/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 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint
   ```

------