

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連接 Raspberry Pi 或其他裝置
<a name="connecting-to-existing-device"></a>

在本節中，我們將設定 Raspberry Pi 以搭配 使用 AWS IoT。如果您有另一個想要連接的裝置，Raspberry Pi 的指示會包括參考資料，其可以協助您調整這些指示以適用您的裝置。

這通常約需 20 分鐘，但是如果您有許多要安裝的系統軟體升級，則所需時間會更長。

**Topics**
+ [設定您的裝置](#gs-device-prereqs)
+ [安裝 AWS IoT 裝置 SDK 所需的工具和程式庫](#gs-device-sdk-tools)
+ [安裝 AWS IoT 裝置 SDK](#gs-device-install-sdk)
+ [安裝並執行範例應用程式](#gs-device-node-app-run)
+ [在 AWS IoT 主控台中檢視來自範例應用程式的訊息](#gs-device-view-msg)

**重要**  
調整這些指示以適用其他裝置和作業系統可能是一項艱鉅的挑戰。您必須充分了解您的裝置，才能解譯這些指示並將其套用至您的裝置。  
如果您在設定裝置時遇到困難 AWS IoT，可以嘗試其他裝置選項做為替代方案，例如 [使用 Amazon EC2 建立虛擬裝置](creating-a-virtual-thing.md)或 [使用您的 Windows 或 Linux PC 或 Mac 做為 AWS IoT 裝置](using-laptop-as-device.md)。

## 設定您的裝置
<a name="gs-device-prereqs"></a>

此步驟的目標就是收集您設定裝置所需的資訊，使其可以啟動作業系統 (OS)、連接至網際網路，並可讓您在命令列界面與其互動。

為了完成本教學，您需要以下項目：
+  AWS 帳戶。若您沒有帳戶，請完成 [設定 AWS 帳戶](setting-up.md) 所述的步驟，然後再繼續。
+ [Raspberry Pi 3 代 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 的桌面可能會更輕鬆。
+ 乙太網路或 Wi-Fi 連線。
+ 裝置所需的鍵盤、滑鼠、顯示器、纜線、電源供應器和其他硬體。

**重要**  
在您繼續下一個步驟之前，您的裝置必須已安裝、設定和執行作業系統。裝置必須連接至網際網路，而且您必須能夠使用其命令列界面存取裝置。可以透過直接連接的鍵盤、滑鼠和顯示器，或透過 SSH 終端機遠端界面存取命令列。

 如果您是在具有圖形使用者界面 (GUI) 的 Raspberry Pi 上執行作業系統，請在裝置上開啟終端機視窗，並在該視窗中執行下列指示。否則，如果您是使用遠端終端機 (例如 PuTTY) 連接到您的裝置，請開啟您裝置的遠端終端機並使用該終端機。

## 安裝 AWS IoT 裝置 SDK 所需的工具和程式庫
<a name="gs-device-sdk-tools"></a>

安裝 AWS IoT 裝置 SDK 和範本程式碼之前，請確定您的系統是最新的，並具有安裝 SDKs所需的工具和程式庫。

1. 

**更新作業系統並安裝必要的程式庫**  
安裝 AWS IoT 裝置 SDK 之前，請在裝置上的終端機視窗中執行這些命令，以更新作業系統並安裝所需的程式庫。

   ```
   sudo apt-get update
   ```

   ```
   sudo apt-get upgrade
   ```

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

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

1. 

**安裝 Git**  
如果您裝置的作業系統未安裝 Git，您必須安裝它才能安裝適用於 JavaScript 的 AWS IoT 裝置 SDK。

   1. 執行此命令來測試看看是否已安裝 Git。

      ```
      git --version
      ```

   1. 如果上一個命令傳回 Git 版本，表示已安裝 Git，而且您可以跳到步驟 3。

   1. 若在執行 **git** 命令時顯示錯誤，請執行此命令來安裝 Git。

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

   1. 執行此命令來再次測試看看是否已安裝 Git。

      ```
      git --version
      ```

   1. 如果已安裝 Git，請繼續進行下一節。如果未安裝，請在繼續之前疑難排解並更正錯誤。您需要 Git 才能安裝適用於 JavaScript 的 AWS IoT 裝置 SDK。

## 安裝 AWS IoT 裝置 SDK
<a name="gs-device-install-sdk"></a>

安裝 AWS IoT 裝置 SDK。

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

在本節中，您將在裝置上安裝 Python、其開發工具和適用於 Python 的 AWS IoT 裝置 SDK。這些指示適用於執行最新 Raspberry Pi OS 的 Raspberry Pi。若有其他裝置或正在使用其他作業系統，您可能需要調整這些指示以適用您的裝置。

1. 

**安裝 Python 及其開發工具**  
適用於 Python 的 AWS 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 的目前 AWS IoT 裝置 SDK**  
安裝適用於 Python 的 AWS IoT 裝置 SDK，並將範例應用程式下載至您的裝置。

   在您的裝置上，執行這些命令。

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

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

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

在本節中，您將在裝置上安裝 Node.js、npm 套件管理員和適用於 JavaScript 的 AWS IoT 裝置開發套件。這些指示適用於執行 Raspberry Pi OS 的 Raspberry Pi。若有其他裝置或正在使用其他作業系統，您可能需要調整這些指示以適用您的裝置。

1. 

**安裝最新版本的 Node.js**  
適用於 JavaScript 的 AWS IoT 裝置 SDK 需要將 Node.js 和 npm 套件管理員安裝在 Raspberry Pi 上。

   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. 

**安裝適用於 JavaScript 的 AWS IoT 裝置 SDK**  
在 Raspberry Pi 上安裝適用於 JavaScript 的 AWS IoT 裝置 SDK。

   1. 將適用於 JavaScript 的 AWS IoT 裝置 SDK 儲存庫複製到*主*`aws-iot-device-sdk-js-v2`目錄的 目錄中。在 Raspberry Pi 上，*home* 目錄是 `~/`，用作下列命令中的 *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` 以安裝 SDK。命令 `npm install` 將會呼叫 `aws-crt` 程式庫建置，可能需要幾分鐘時間才能完成。

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

------

## 安裝並執行範例應用程式
<a name="gs-device-node-app-run"></a>

在本節中，您將安裝並執行 AWS IoT 裝置開發套件中找到`pubsub`的範例應用程式。此應用程式顯示您的裝置如何使用 MQTT 程式庫來發佈和訂閱 MQTT 訊息。範例應用程式會訂閱主題 `topic_1`、將 10 則訊息發佈至該主題，以及在從訊息代理程式接收訊息時顯示這些訊息。

**安裝憑證檔案**  
範例應用程式需要驗證裝置是否安裝在裝置上的憑證檔案。

**安裝範例應用程式的裝置憑證檔案**

1. 執行這些命令，在您的 *home* 目錄中建立 `certs` 子目錄。

   ```
   cd ~
   mkdir certs
   ```

1. 將私有金鑰、裝置憑證，以及您先前在 [建立 AWS IoT 資源](create-iot-resources.md) 中建立的根憑證授權機構憑證複製到 `~/certs` 目錄中。

   將憑證檔案複製到裝置的方式取決於裝置和作業系統，此處不會加以描述。不過，如果您的裝置支援圖形使用者界面 (GUI) 且具有網頁瀏覽器，您可以從裝置的網頁瀏覽器執行 [建立 AWS IoT 資源](create-iot-resources.md) 中所述的程序，將產生的檔案直接下載到您的裝置。

   下節命令假設您的金鑰和憑證檔案儲存在裝置上，如下表所示。  
**憑證檔案名稱**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/iot/latest/developerguide/connecting-to-existing-device.html)

若要執行範例應用程式，您需要以下資訊：


**應用程式參數值**  

|  參數  |  可在哪裡找到值  | 
| --- | --- | 
| your-iot-endpoint |  於 [AWS IoT 主控台](https://console.aws.amazon.com/iot/home)中，依序選擇 **Manage** (管理) 和 **Things** (物件)。 在選單的設定**** AWS IoT 頁面上。您的端點會顯示在 **Device data endpoint** (裝置資料端點) 區段中。  | 

*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. 連線至您帳戶的 AWS IoT 服務。

   1. 訂閱訊息主題 **topic\$11**，並顯示其收到關於該主題的訊息。

   1. 將 10 則訊息發佈至主題 **topic\$11**。

   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. 連線至您帳戶的 AWS IoT 服務。

   1. 訂閱訊息主題 **topic\$11**，並顯示其收到關於該主題的訊息。

   1. 將 10 則訊息發佈至主題 **topic\$11**。

   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` 參數新增至命令列，以便範例應用程式顯示有關其正在做什麼的詳細訊息。這些資訊可能會提供您更正問題所需的協助。

------

## 在 AWS IoT 主控台中檢視來自範例應用程式的訊息
<a name="gs-device-view-msg"></a>

您可以在範例應用程式的訊息透過訊息代理程式傳遞時看到這些訊臮，方法為使用 **AWS IoT 主控台**中的 **MQTT test client** (MQTT 測試用戶端)。

**檢視範例應用程式所發佈的 MQTT 訊息**

1. 檢閱 [使用 MQTT 用戶端檢視 AWS IoT MQTT 訊息](view-mqtt-messages.md)。這有助於您了解如何使用 **AWS IoT 主控台**中的 **MQTT 測試用戶端**，在 MQTT 訊息通過訊息代理程式時，檢視訊息。

1. 在 **AWS IoT 主控台**中開啟 **MQTT 測試用戶端**。

1. 訂閱主題 **topic\$11**。

1. 在您的命令列視窗中，再次執行範例應用程式，並在 **AWS IoT 主控台**的 **MQTT client** (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
   ```

------