

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# Raspberry Pi GPIO 連接器
<a name="raspberrypi-gpio-connector"></a>

**警告**  <a name="connectors-extended-life-phase-warning"></a>
此連接器已進入*延長生命週期階段*，且 AWS IoT Greengrass 不會發行提供現有功能、增強功能、安全修補程式或錯誤修正的更新。如需詳細資訊，請參閱[AWS IoT Greengrass Version 1 維護政策](maintenance-policy.md)。

Raspberry Pi GPIO [連接器](connectors.md)控制 Raspberry Pi 核心裝置上的一般用途輸入/輸出 (GPIO) 接腳。

此連接器以指定的間隔輪詢輸入接腳，並將狀態變更發佈到 MQTT 主題。它也接受來自使用者定義 Lambda 函數的讀取和寫入請求做為 MQTT 訊息。寫入請求用來將接腳設為高或低電壓。

連接器提供參數讓您用來指定輸入和輸出接腳。此行為是在群組部署之前設定。無法在執行時間變更。
+ 輸入接腳可用於從周邊裝置接收資料。
+ 輸出接腳可用於控制周邊設備，或將資料傳送到周邊設備。

您可以在許多案例中使用此連接器，例如：
+ 控制紅綠燈的綠色、黃色及紅色 LED 燈。
+ 根據濕度感應器的資料來控制風扇 (連接到繼電器)。
+ 在零售店當客戶按下按鈕時通知員工。
+ 使用智慧型電燈開關來控制其他 IoT 裝置。

**注意**  
此連接器不適用於有即時需求的應用程式。期間較短的活動可能會被遺漏。

此連接器具有下列版本。


| 版本 | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:{{region}}::/connectors/RaspberryPiGPIO/versions/3` | 
| 2 | `arn:aws:greengrass:{{region}}::/connectors/RaspberryPiGPIO/versions/2` | 
| 1 | `arn:aws:greengrass:{{region}}::/connectors/RaspberryPiGPIO/versions/1` | 

如需版本變更的詳細資訊，請參閱 [Changelog](#raspberrypi-gpio-connector-changelog)。

## 要求
<a name="raspberrypi-gpio-connector-req"></a>

此連接器有下列要求：

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass 核心軟體 v1.9.3 或更新版本。
+ 安裝在核心裝置上並新增至 PATH 環境變數的 [Python](https://www.python.org/) 3.7 版。
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 模型 B，或 Raspberry Pi 3 模型 B/B\+。您必須了解 Raspberry Pi 的接腳順序。如需詳細資訊，請參閱[GPIO 接腳順序](#raspberrypi-gpio-connector-req-pins)。
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>Greengrass 群組中的[本機裝置資源](access-local-resources.md)，指向 Raspberry Pi `/dev/gpiomem`上的 。如果您在 主控台中建立資源，則必須選取**擁有資源選項之 Linux 群組的自動新增作業系統群組許可**。在 API 中，將 `GroupOwnerSetting.AutoAddGroupOwner` 屬性設定為 `true`。
+ <a name="conn-gpio-req-rpi-gpio"></a>安裝在 Raspberry Pi 的 [RPi.GPIO](https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/) 模組。在 Raspbian 中，預設已安裝這個模組。您可以使用下列命令來重新加以安裝：

  ```
  sudo pip install RPi.GPIO
  ```

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass 核心軟體 v1.7 或更新版本。
+ 安裝在核心裝置上並新增至 PATH 環境變數的 [Python](https://www.python.org/) 2.7 版。
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 模型 B，或 Raspberry Pi 3 模型 B/B\+。您必須了解 Raspberry Pi 的接腳順序。如需詳細資訊，請參閱[GPIO 接腳順序](#raspberrypi-gpio-connector-req-pins)。
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>Greengrass 群組中的[本機裝置資源](access-local-resources.md)，指向 Raspberry Pi `/dev/gpiomem`上的 。如果您在 主控台中建立資源，則必須選取**擁有資源選項之 Linux 群組的自動新增作業系統群組許可**。在 API 中，將 `GroupOwnerSetting.AutoAddGroupOwner` 屬性設定為 `true`。
+ <a name="conn-gpio-req-rpi-gpio"></a>安裝在 Raspberry Pi 的 [RPi.GPIO](https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/) 模組。在 Raspbian 中，預設已安裝這個模組。您可以使用下列命令來重新加以安裝：

  ```
  sudo pip install RPi.GPIO
  ```

------

### GPIO 接腳順序
<a name="raspberrypi-gpio-connector-req-pins"></a>

Raspberry Pi GPIO 連接器透過晶片上基礎系統 (SoC) 的編號方案參考 GPIO 接腳，而不是 GPIO 接腳的實體配置。接腳的實體順序可能因 Raspberry Pi 版本而異。如需詳細資訊，請參閱 Raspberry Pi 文件中的 [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/)。

連接器無法驗證您設定的輸入和輸出接腳是否正確映射到 Raspberry Pi 的基礎硬體。如果接腳組態無效，連接器嘗試在裝置上啟動時會傳回執行時間錯誤。若要解決這個問題，請重新設定連接器，然後重新部署。

**注意**  
請確定 GPIO 接腳的周邊設備已正確接線，以防止元件損壞。

## 連接器參數
<a name="raspberrypi-gpio-connector-param"></a>

此連接器提供下列參數：

`InputGpios`  
要設定為輸入的 GPIO 接腳號碼 (逗號分隔清單)。您也可以選擇附加 `U` 來設定接腳的上拉電阻，或附加 `D` 來設定下拉電阻。範例：`"5,6U,7D"`。  
在 AWS IoT 主控台中顯示名稱：**輸入 GPIO 接腳**  
必要：`false`。您必須指定輸入接腳、輸出接腳或兩者。  
類型：`string`  
有效模式： `^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$`

`InputPollPeriod`  
每個輪詢操作的間隔 (毫秒)，依此檢查輸入 GPIO 接腳的狀態是否變更。最小值為 1。  
這個值取決於您的案例和輪詢的裝置類型。例如，值 `50` 的速度應該足夠偵測到按鈕按下。  
在 AWS IoT 主控台中顯示名稱：**輸入 GPIO 輪詢期間**  
必要：`false`  
類型：`string`  
有效模式： `^$|^[1-9][0-9]*$`

`OutputGpios`  
要設定為輸出的 GPIO 接腳號碼 (逗號分隔清單)。您也可以選擇附加 `H` 來設定高狀態 (1)，或附加 `L` 來設定低狀態 (0)。範例：`"8H,9,27L"`。  
 AWS IoT 主控台中的顯示名稱：**輸出 GPIO 接腳**  
必要：`false`。您必須指定輸入接腳、輸出接腳或兩者。  
類型：`string`  
有效模式： `^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$`

`GpioMem-ResourceId`  
代表 `/dev/gpiomem` 的本機裝置資源的 ID。  
此連接器已授予資源的讀寫存取權。
 AWS IoT 主控台中的顯示名稱：**/dev/gpiomem 裝置的資源**  
必要：`true`  
類型：`string`  
有效模式： `.+`

### 建立範例連接器 (AWS CLI)
<a name="raspberrypi-gpio-connector-create"></a>

下列 CLI 命令`ConnectorDefinition`會使用包含 Raspberry Pi GPIO 連接器的初始版本來建立 。

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyRaspberryPiGPIOConnector",
            "ConnectorArn": "arn:aws:greengrass:{{region}}::/connectors/RaspberryPiGPIO/versions/3",
            "Parameters": {
                "GpioMem-ResourceId": "my-gpio-resource",
                "InputGpios": "5,6U,7D",
                "InputPollPeriod": 50,
                "OutputGpios": "8H,9,27L"
            }
        }
    ]
}'
```

**注意**  
此連接器中的 Lambda 函數具有[長期生命週期](lambda-functions.md#lambda-lifecycle)。

在 AWS IoT Greengrass 主控台中，您可以從群組的連接器頁面新增**連接器**。如需詳細資訊，請參閱[Greengrass 連接器入門 (主控台)](connectors-console.md)。

## 輸入資料
<a name="raspberrypi-gpio-connector-data-input"></a>

此連接器接受兩個 MQTT 主題上對 GPIO 接腳的讀取或寫入請求。
+ `gpio/+/+/read` 主題上的讀取請求。
+ `gpio/+/+/write` 主題上的寫入請求。

若要發佈到這些主題，請將 `+` 萬用字元分別換成核心物件名稱和目標接腳號碼。例如：

```
gpio/{{core-thing-name}}/{{gpio-number}}/read
```

**注意**  
目前，當您建立使用 Raspberry Pi GPIO 連接器的訂閱時，您必須在主題中指定至少一個 \+ 萬用字元的值。

**主題篩選條件：** `gpio/+/+/read`  
使用此主題來引導連接器讀取主題中指定之 GPIO 接腳的狀態。  
連接器將回應發佈到對應的輸出主題 (例如，`gpio/{{core-thing-name}}/{{gpio-number}}/state`)。    
**訊息屬性**  
無。忽略傳送到這個主題的訊息。

**主題篩選條件：** `gpio/+/+/write`  
使用此主題將寫入請求傳送到 GPIO 接腳。這引導連接器將主題中指定的 GPIO 接腳設定為低或高電壓。  
+ `0` 將接腳設定為低電壓。
+ `1` 將接腳設定為高電壓。
連接器將回應發佈到對應的輸出 `/state` 主題 (例如，`gpio/{{core-thing-name}}/{{gpio-number}}/state`)。    
**訊息屬性**  
值 `0` 或 `1`，做為整數或字串。  
**範例輸入**  

```
0
```

## 輸出資料
<a name="raspberrypi-gpio-connector-data-output"></a>

此連接器將資料發佈到兩個主題：
+ `gpio/+/+/state` 主題上高或低狀態變更。
+ `gpio/+/error`主題的相關錯誤。

**主題篩選條件：** `gpio/+/+/state`  
使用此主題監聽輸入接腳的狀態變更和讀取請求的回應。如果接腳處於低狀態，連接器會傳回字串 `"0"`，或者，如果是高狀態，則傳回 `"1"`。  
發佈到此主題時，連接器會將 `+` 萬用字元分別換成核心物件名稱和目標接腳。例如：  

```
gpio/{{core-thing-name}}/{{gpio-number}}/state
```
目前，當您建立使用 Raspberry Pi GPIO 連接器的訂閱時，您必須在主題中指定至少一個 \+ 萬用字元的值。  
**範例輸出**  

```
0
```

**主題篩選條件：** `gpio/+/error`  
使用此主題監聽錯誤。連接器會因為請求無效而發佈到本主題 (例如，在輸入接腳上請求狀態變更時)。  
發佈到此主題時，連接器會將 `+` 萬用字元換成核心物件名稱。    
**範例輸出**  

```
{
   "topic": "gpio/my-core-thing/22/write",
   "error": "Invalid GPIO operation",
   "long_description": "GPIO 22 is configured as an INPUT GPIO. Write operations are not permitted."
 }
```

## 用量範例
<a name="raspberrypi-gpio-connector-usage"></a>

<a name="connectors-setup-intro"></a>使用下列高階步驟來設定範例 Python 3.7 Lambda 函數，您可以用來嘗試連接器。

**注意**  <a name="connectors-setup-get-started-topics"></a>
如果您使用其他 Python 執行期，則可以建立從 Python3.x 到 Python 3.7 的符號連結。
[連接器入門 (主控台)](connectors-console.md) 和 [連接器入門 (CLI)](connectors-cli.md) 主題包含詳細步驟，說明如何設定和部署範例 Twilio 通知連接器。

1. 確定您符合連接器的[要求](#raspberrypi-gpio-connector-req)。

1. <a name="connectors-setup-function"></a>建立並發佈 Lambda 函數，將輸入資料傳送至連接器。

   將[範例程式碼](#raspberrypi-gpio-connector-usage-example)儲存為 PY 檔案。<a name="connectors-setup-function-sdk"></a>下載並解壓縮[AWS IoT Greengrass 適用於 Python 的 Core SDK](lambda-functions.md#lambda-sdks-core)。然後，建立在根層級包含 PY 檔案和 `greengrasssdk` 資料夾的 zip 套件。此 zip 套件是您上傳至 的部署套件 AWS Lambda。

   <a name="connectors-setup-function-publish"></a>建立 Python 3.7 Lambda 函數後，發佈函數版本並建立別名。

1. 設定 Greengrass 群組。

   1. <a name="connectors-setup-gg-function"></a>依別名新增 Lambda 函數 （建議）。將 Lambda 生命週期設定為長期 （或在 CLI `"Pinned": true`中）。

   1. <a name="connectors-setup-device-resource"></a>新增必要的本機裝置資源，並授予 Lambda 函數的讀取/寫入存取權。

   1. 新增連接器並設定其[參數](#raspberrypi-gpio-connector-param)。

   1. 新增訂閱，允許連接器在支援主題篩選條件上接收[輸入資料](#raspberrypi-gpio-connector-data-input)並傳送[輸出資料](#raspberrypi-gpio-connector-data-output)。
      + <a name="connectors-setup-subscription-input-data"></a>將 Lambda 函數設定為來源，將連接器設定為目標，並使用支援的輸入主題篩選條件。
      + <a name="connectors-setup-subscription-output-data"></a>將連接器設為來源、將 AWS IoT Core 設為目標，並使用支援的輸出主題篩選條件。您可以使用此訂閱在 AWS IoT 主控台中檢視狀態訊息。

1. <a name="connectors-setup-deploy-group"></a>部署群組。

1. <a name="connectors-setup-test-sub"></a>在 AWS IoT 主控台**的測試**頁面上，訂閱輸出資料主題，以檢視連接器的狀態訊息。Lambda 函數範例為長期函數，並在部署群組後立即開始傳送訊息。

   完成測試後，您可以將 Lambda 生命週期設定為隨需 （或在 CLI `"Pinned": false`中） 並部署群組。這會讓函數停止傳送訊息。

### 範例
<a name="raspberrypi-gpio-connector-usage-example"></a>

下列範例 Lambda 函數會將輸入訊息傳送至連接器。此範例會傳送一組輸入 GPIO 接腳的讀取請求。它會說明如何使用核心物件名稱和 PIN 碼來建構主題。

```
import greengrasssdk
import json
import os

iot_client = greengrasssdk.client('iot-data')
INPUT_GPIOS = [6, 17, 22]

thingName = os.environ['AWS_IOT_THING_NAME']

def get_read_topic(gpio_num):
    return '/'.join(['gpio', thingName, str(gpio_num), 'read'])

def get_write_topic(gpio_num):
    return '/'.join(['gpio', thingName, str(gpio_num), 'write'])

def send_message_to_connector(topic, message=''):
    iot_client.publish(topic=topic, payload=str(message))

def set_gpio_state(gpio, state):
    send_message_to_connector(get_write_topic(gpio), str(state))

def read_gpio_state(gpio):
    send_message_to_connector(get_read_topic(gpio))

def publish_basic_message():
    for i in INPUT_GPIOS:
    	read_gpio_state(i)

publish_basic_message()

def lambda_handler(event, context):
    return
```

## 授權
<a name="raspberrypi-gpio-connector-license"></a>

Raspberry Pi GPIO； 連接器包含下列第三方軟體/授權：
+ [RPi.GPIO](https://pypi.org/project/RPi.GPIO/)/MIT

此連接器根據 [Greengrass 核心軟體授權合約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)發行。

## 變更記錄
<a name="raspberrypi-gpio-connector-changelog"></a>

下表說明每個版本連接器的變更。


| 版本 | 變更 | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>將 Lambda 執行時間升級至 Python 3.7，這會變更執行時間需求。 | 
| 2 | 更新連接器 ARN 以取得 AWS 區域 支援。 | 
| 1 | 初始版本。 | 

<a name="one-conn-version"></a>Greengrass 群組一次只能包含一個版本的連接器。若要取得有關升級連接器版本的資訊，請參閱[升級連接器版本](connectors.md#upgrade-connector-versions)。

## 另請參閱
<a name="raspberrypi-gpio-connector-see-also"></a>
+ [使用 Greengrass 連接器來整合服務和通訊協定](connectors.md)
+ [Greengrass 連接器入門 (主控台)](connectors-console.md)
+ [Greengrass 連接器入門 (CLI)](connectors-cli.md)
+ Raspberry Pi 文件中的 [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/)