

지원 종료 공지: 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 Model B 또는 Raspberry Pi 3 Model B/B\+ Raspberry Pi의 핀 순서를 알고 있어야 합니다. 자세한 내용은 [GPIO 핀 순서](#raspberrypi-gpio-connector-req-pins) 단원을 참조하십시오.
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>Raspberry Pi의 `/dev/gpiomem`을 가리키는 Greengrass 그룹의 [로컬 장치 리소스](access-local-resources.md). 콘솔에서 리소스를 생성하는 경우 **리소스를 소유한 Linux 그룹의 OS 그룹 권한 자동 추가** 옵션을 선택해야 합니다. 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/) 버전 3.7입니다.
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 Model B 또는 Raspberry Pi 3 Model B/B\+ Raspberry Pi의 핀 순서를 알고 있어야 합니다. 자세한 내용은 [GPIO 핀 순서](#raspberrypi-gpio-connector-req-pins) 단원을 참조하십시오.
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>Raspberry Pi의 `/dev/gpiomem`을 가리키는 Greengrass 그룹의 [로컬 장치 리소스](access-local-resources.md). 콘솔에서 리소스를 생성하는 경우 **리소스를 소유한 Linux 그룹의 OS 그룹 권한 자동 추가** 옵션을 선택해야 합니다. 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 커넥터는 GPIO 핀의 물리적 레이아웃이 아니라 기본 시스템 온 칩(SoC)의 번호 지정 체계를 기준으로 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 명령은 Raspberry Pi GPIO 커넥터가 포함된 초기 버전을 사용하여 `ConnectorDefinition`을 생성합니다.

```
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>[Python용AWS IoT Greengrass 코어 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 핀 집합에 대한 읽기 요청을 보냅니다. 이 예제에서는 코어 사물 이름과 핀 번호를 사용하여 주제를 구성하는 방법을 보여줍니다.

```
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)에 따라 릴리스됩니다.

## Changelog
<a name="raspberrypi-gpio-connector-changelog"></a>

다음 표에서는 의 각 릴리스에서 변경된 중요 사항에 대해 설명합니다.


| 버전 | 변경 사항 | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>Lambda 런타임 요구 사항을 변경하는 Python 3.7로 런타임을 업그레이드했습니다. | 
| 2 |  AWS 리전 지원을 위해 커넥터 ARN을 업데이트했습니다. | 
| 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/)