Raspberry Pi 커넥터 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.

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

Raspberry Pi 커넥터

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를 참조하십시오.

Requirements

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

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 핀 순서을 참조하십시오.

  • A로컬 장치 리소스을 가리키는 Greengrass 그룹의/dev/gpiomemRaspberry Pi에서 콘솔에서 리소스를 생성하는 경우리소스를 소유한 Linux 그룹의 OS 그룹 권한을 자동으로 추가하기옵션을 사용합니다. API의 경우 를 설정합니다.GroupOwnerSetting.AutoAddGroupOwner속성을true.

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

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

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

  • Raspberry Pi 4 Model B 또는 Raspberry Pi 3 Model B/B+ Raspberry Pi의 핀 순서를 알고 있어야 합니다. 자세한 정보는 GPIO 핀 순서을 참조하십시오.

  • A로컬 장치 리소스을 가리키는 Greengrass 그룹의/dev/gpiomemRaspberry Pi에서 콘솔에서 리소스를 생성하는 경우리소스를 소유한 Linux 그룹의 OS 그룹 권한을 자동으로 추가하기옵션을 사용합니다. API의 경우 를 설정합니다.GroupOwnerSetting.AutoAddGroupOwner속성을true.

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

    sudo pip install RPi.GPIO

GPIO 핀 순서

라즈베리 파이 GPIO 커넥터는 GPIO 핀의 물리적 레이아웃이 아닌 기본 시스템 온 칩 (SoC) 의 번호 매기기 체계에 따라 GPIO 핀을 참조합니다. 핀의 물리적 순서는 라즈베리 파이 버전에 따라 다를 수 있습니다. 자세한 내용은 단원을 참조하십시오.지피오에서 Raspberry Pi 문서를 참조하십시오.

이 커넥터는 구성한 입력 및 출력 핀이 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 명령은ConnectorDefinition라즈베리 파이 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 함수에는수명이 긴 함수수명 주기

에서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 런타임을 사용하는 경우 Python 3.7으로 심볼 링크를 만들 수 있습니다.

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

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

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

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

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

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

    1. 별칭으로 Lambda 함수를 추가합니다 (권장). Lambda 수명 주기를 수명이 긴 함수 (또는"Pinned": trueCLI에서).

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

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

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

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

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

  4. 그룹을 배포합니다.

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

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

Example

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

Licenses

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

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

Changelog

다음 표에서는 커넥터의 각 커넥터의 버전 변경사항에 대해 설명합니다.

버전

변경

3

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

2

에 대한 커넥터 ARN 업데이트함AWS 리전지원을 합니다.

1

최초 릴리스.

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

다음 사항도 참조하세요.