

终止支持通知：2026 年 10 月 7 日， Amazon 将停止对的支持。 Amazon IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 Amazon IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 Amazon IoT Greengrass Version 1](https://docs.amazonaws.cn/greengrass/v2/developerguide/migrate-from-v1.html)。

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

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

**警告**  <a name="connectors-extended-life-phase-warning"></a>
此连接器已进入*生命周期延长阶段*， Amazon IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息，请参阅 [Amazon IoT Greengrass Version 1 维护政策](maintenance-policy.md)。

Raspberry Pi GPIO [连接器](connectors.md)控制 Raspberry Pi 核心设备上的通用 input/output (GPIO) 引脚。

此连接器按指定间隔轮询输入引脚并将状态变化发布到 MQTT 主题。它还以 MQTT 消息形式接受来自用户定义的 Lambda 函数的读取和写入请求。写入请求用于将引脚设置为高压或低压。

连接器提供用于指定输入和输出引脚的参数。此行为在部署组之前配置。它无法在运行时更改。
+ 输入引脚可用于从外围设备接收数据。
+ 输出引脚可用于控制外围设备或将数据发送到外围设备。

您可以在许多情况下使用此连接器，例如：
+ 控制交通信号灯的绿色、黄色和红色 LED 指示灯。
+ 根据来自湿度传感器的数据控制风扇（连接到继电器）。
+ 顾客按下按钮向零售店中的员工发出警报。
+ 使用智能指示灯开关控制其他 IoT 设备。

**注意**  
此连接器不适合具有实时要求的应用。持续时间很短的事件可能会被漏掉。

此连接器具有以下版本。


| 版本 | 进行筛选 | 
| --- | --- | 
| 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` | 

有关版本更改的信息，请参阅[更改日志](#raspberrypi-gpio-connector-changelog)。

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

此连接器具有以下要求：

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>Amazon IoT Greengrass 核心软件 v1.9.3 或更高版本。
+ [Python](https://www.python.org/) 版本 3.7 已安装在核心设备上，并已添加到 PATH 环境变量中。
+ <a name="conn-gpio-req-pin-seq"></a>树莓派 4 型号 B 或 Raspberry Pi 3 Model 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>Amazon IoT Greengrass 核心软件 v1.7 或更高版本。
+ [Python](https://www.python.org/) 版本 2.7 已安装在核心设备上，并已添加到 PATH 环境变量中。
+ <a name="conn-gpio-req-pin-seq"></a>树莓派 4 型号 B 或 Raspberry Pi 3 Model 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"`。  
 Amazon IoT 控制台中的显示名称：**输入 GPIO 引脚**  
必需：`false`。您必须指定输入和/或输出引脚。  
类型：`string`  
有效模式：`^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$`

`InputPollPeriod`  
每个轮询操作之间的间隔（以毫秒为单位），该操作检查输入 GPIO 引脚是否发生状态变化。最小值为 1。  
此值取决于您所处的具体情况以及轮询的设备的类型。例如，值为 `50` 应该足够快速地检测到按钮按压。  
 Amazon IoT 控制台中的显示名称：**输入 GPIO 轮询周期**  
必需：`false`  
类型：`string`  
有效模式：`^$|^[1-9][0-9]*$`

`OutputGpios`  
要配置为输出的 GPIO 引脚号的逗号分隔列表。可选择附加 `H` 以设置高状态（值为 1），或附加 `L` 以设置低状态（值为 0）。示例：`"8H,9,27L"`。  
 Amazon IoT 控制台中的显示名称：**输出 GPIO 引脚**  
必需：`false`。您必须指定输入和/或输出引脚。  
类型：`string`  
有效模式：`^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$`

`GpioMem-ResourceId`  
表示 `/dev/gpiomem` 的本地设备资源的 ID。  
连接器被授予对该资源的读写访问权限。
 Amazon IoT 控制台中的显示名称：**/dev/gpiomem 设备的资源**  
必需：`true`  
类型：`string`  
有效模式：`.+`

### 创建连接器示例 (Amazon 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)。

在 Amazon 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 运行时，你可以创建从 Py Python3.x thon 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>下载并解压[适用于 Python 的Amazon IoT Greengrass Core 软件开发工具包](lambda-functions.md#lambda-sdks-core)。然后，创建一个 zip 包，其中在根级别包含 PY 文件和 `greengrasssdk` 文件夹。此 zip 包是您上传到 Amazon 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>添加所需的本地设备资源并授予 read/write 对 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>将连接器设置为源，将 Amazon IoT Core 设置为目标，并使用支持的输出主题筛选条件。您可以使用此订阅在 Amazon IoT 控制台中查看状态消息。

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

1. <a name="connectors-setup-test-sub"></a>在 Amazon IoT 控制台的 “**测试**” 页面上，订阅输出数据主题以查看来自连接器的状态消息。示例 Lambda 函数是长时间生存的，并且在部署组后立即开始发送消息。

   完成测试后，您可以将 Lambda 生命周期设置为按需（或在 CLI 中设置为 `"Pinned": false`）并部署组。这会阻止函数发送消息。

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

以下示例 Lambda 函数向连接器发送一条输入消息。 此示例发送一组输入 GPIO 引脚的读取请求。它显示了如何使用核心事物名称和引脚号构建主题。

```
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; 连接器包括以下第三方 software/licensing：
+ [RPi.GPIO](https://pypi.org/project/RPi.GPIO/)/麻省理工

该连接器在 [Greengrass Core 软件许可协议](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 以获得支持。 Amazon Web Services 区域  | 
| 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/)