Raspberry Pi GPIO 커넥터 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 2023년 6월 30일에 수명 연장 단계에 들어갔습니다. AWS IoT Greengrass V1 관리형 정책에 대한 자세한 정보는 섹션을 참조하세요. 이 날짜 이후에는 기능, 개선 사항, 버그 수정 또는 보안 패치를 제공하는 업데이트가 AWS IoT Greengrass V1 릴리스되지 않습니다. 에서 실행되는 기기는 AWS IoT Greengrass V1 중단되지 않으며 계속 작동하고 클라우드에 연결됩니다. 새로운 기능이 크게 추가되고 추가 플랫폼에 대한 지원이 추가되는 으로 마이그레이션하는 AWS IoT Greengrass Version 2 것이 좋습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Raspberry Pi GPIO 커넥터

주의

이 커넥터는 수명 연장 단계로 전환되었으며 AWS IoT Greengrass은(는) 기능, 기존 기능의 개선 사항, 보안 패치 또는 버그 수정을 제공하는 업데이트를 릴리스하지 않을 예정입니다. 자세한 내용은 AWS IoT Greengrass Version 1 유지 관리 정책 섹션을 참조하세요.

Raspberry Pi GPIO 커넥터 는 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를 참조하십시오.

요구 사항

이 커넥터에는 다음과 같은 요구 사항이 있습니다.

Version 3
  • AWS IoT Greengrass 코어 소프트웨어 v1.9.3 이상.

  • 코어 디바이스에 설치되고 PATH 환경 변수에 추가된 Python 버전 3.7입니다.

  • Raspberry Pi 4 Model B 또는 Raspberry Pi 3 Model B/B+ Raspberry Pi의 핀 순서를 알고 있어야 합니다. 자세한 내용은 GPIO 핀 순서 섹션을 참조하세요.

  • Raspberry Pi의 /dev/gpiomem을 가리키는 Greengrass 그룹의 로컬 디바이스 리소스. 콘솔에서 리소스를 생성하는 경우 리소스를 소유한 Linux 그룹의 OS 그룹 권한 자동 추가 옵션을 선택해야 합니다. API에서 GroupOwnerSetting.AutoAddGroupOwner 속성을 true(으)로 설정합니다.

  • Raspberry Pi에 설치된 RPi.GPIO 모듈. Raspbian에서 이 모듈은 기본적으로 설치되어 있습니다. 다음 명령을 사용해 다시 설치할 수 있습니다.

    sudo pip install RPi.GPIO
Versions 1 - 2
  • AWS IoT Greengrass 코어 소프트웨어 v1.7 이상.

  • 코어 디바이스에 설치되고 PATH 환경 변수에 추가된 Python 버전 3.7입니다.

  • Raspberry Pi 4 Model B 또는 Raspberry Pi 3 Model B/B+ Raspberry Pi의 핀 순서를 알고 있어야 합니다. 자세한 내용은 GPIO 핀 순서 섹션을 참조하세요.

  • Raspberry Pi의 /dev/gpiomem을 가리키는 Greengrass 그룹의 로컬 디바이스 리소스. 콘솔에서 리소스를 생성하는 경우 리소스를 소유한 Linux 그룹의 OS 그룹 권한 자동 추가 옵션을 선택해야 합니다. API에서 GroupOwnerSetting.AutoAddGroupOwner 속성을 true(으)로 설정합니다.

  • Raspberry Pi에 설치된 RPi.GPIO 모듈. Raspbian에서 이 모듈은 기본적으로 설치되어 있습니다. 다음 명령을 사용해 다시 설치할 수 있습니다.

    sudo pip install RPi.GPIO

GPIO 핀 순서

Raspberry Pi GPIO 커넥터는 GPIO 핀의 물리적 레이아웃이 아니라 기본 시스템 온 칩(SoC)의 번호 지정 체계를 기준으로 GPIO 핀을 참조합니다. Raspberry Pi 버전에서 핀의 물리적 순서가 다를 수 있습니다. 자세한 내용은 Raspberry Pi 설명서에서 GPIO를 참조하세요.

이 커넥터는 구성한 입력 및 출력 핀이 Raspberry Pi의 기본 하드웨어에 올바르게 매핑되는지 확인하지 않습니다. 핀 구성이 잘못된 경우 커넥터는 디바이스에서 시작하려고 할 때 실행 시간 오류를 반환합니다. 이 문제를 해결하려면 커넥터를 재구성한 다음 다시 배포합니다.

참고

구성 요소 손상을 방지하기 위해 GPIO 핀의 주변 장치가 적절하게 연결되어 있는지 확인합니다.

커넥터 파라미터

이 커넥터는 다음 파라미터를 제공합니다.

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)

다음 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 함수에는 수명이 긴 수명 주기가 있습니다.

AWS IoT Greengrass 콘솔에서는 그룹의 커넥터 페이지에서 커넥터를 추가할 수 있습니다. 자세한 내용은 Greengrass 커넥터 시작하기(콘솔) 섹션을 참조하세요.

입력 데이터

이 커넥터는 두 개의 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

출력 데이터

이 커넥터는 다음 두 개의 주제에 데이터를 게시합니다.

  • 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." }

사용 예

다음 상위 수준 단계를 사용하여 커넥터를 사용해 보는 데 이용할 수 있는 예제 Python 3.7 Lambda 함수를 설정합니다.

참고
  • 다른 Python 런타임을 사용하는 경우 Python3.x에서 Python 3.7로의 심볼릭 링크를 만들 수 있습니다.

  • 커넥터 시작하기(콘솔)커넥터 시작하기(CLI) 주제에는 예제 Twilio 알림 커넥터를 구성하고 배포하는 방법을 보여주는 자세한 단계가 포함되어 있습니다.

  1. 커넥터에 대한 요구 사항을 충족하는지 확인합니다.

  2. 입력 데이터를 커넥터로 보내는 Lambda 함수를 생성하고 게시합니다.

    예제 코드를 PY 파일로 저장합니다. Python용 AWS IoT Greengrass 코어 SDK를 다운로드하고 압축을 풉니다. 그런 다음 루트 수준에서 PY 파일과 greengrasssdk 폴더를 포함하는 zip 패키지를 생성합니다. 이 zip 패키지는 AWS Lambda에 업로드하는 배포 패키지입니다.

    Python 3.7 Lambda 함수를 생성한 후 함수 버전을 게시하고 별칭을 만듭니다.

  3. Greengrass 그룹을 구성합니다.

    1. 별칭으로 Lambda 함수를 추가합니다(권장). Lambda 수명 주기를 수명이 긴 함수(또는 CLI의 "Pinned": true)로 구성합니다.

    2. 필요한 로컬 디바이스 리소스를 추가하고 Lambda 함수에 대한 읽기/쓰기 액세스 권한을 부여합니다.

    3. 커넥터를 추가하고 해당 파라미터를 구성합니다.

    4. 커넥터가 입력 데이터를 수신하고 지원되는 주제 필터에서 출력 데이터를 전송할 수 있도록 허용하는 구독을 추가합니다.

      • Lambda 함수를 소스로, 커넥터를 대상으로 설정하고 지원되는 입력 주제 필터를 사용합니다.

      • 커넥터를 소스로, AWS IoT Core를 대상으로 설정하고 지원되는 출력 주제 필터를 사용합니다. 이 구독을 사용하여 AWS IoT에서 상태 메시지를 확인합니다.

  4. 그룹을 배포합니다.

  5. AWS IoT콘솔의 테스트 페이지에서 출력 데이터 주제를 구독하여 커넥터의 상태 메시지를 확인합니다. 예제 Lambda 함수는 수명이 긴 함수로 그룹이 배포된 직후 메시지 전송을 시작합니다.

    테스트를 마치면 Lambda 수명 주기를 온디맨드 함수(또는 CLI의 "Pinned": false)로 설정하고 그룹을 배포할 수 있습니다. 이렇게 하면 함수가 메시지 전송을 중지합니다.

다음 예제 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

라이선스

Raspberry Pi GPIO 커넥터에는 다음 타사 소프트웨어/라이선스가 포함되어 있습니다.

이 커넥터는 Greengrass 코어 소프트웨어 라이선스 계약에 따라 릴리스됩니다.

Changelog

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

버전

변경

3

Lambda 런타임 요구 사항을 변경하는 Python 3.7로 런타임을 업그레이드했습니다.

2

AWS 리전 지원용 커넥터 ARN이 업데이트됨.

1

최초 릴리스.

Greengrass 그룹은 한 번에 하나의 커넥터 버전만 포함할 수 있습니다. 커넥터 버전 업그레이드에 대한 자세한 내용은 커넥터 버전 업그레이드 단원을 참조하십시오.

다음 사항도 참조하세요.