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 Core ソフトウェア v1.9.3 以降。

  • Python バージョン 3.7 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

  • Raspberry Pi 4 モデル B、または Raspberry Pi 3 モデル B/B+。Raspberry Pi のピン配列を知る必要があります。詳細については、「GPIO ピンシーケンス」を参照してください。

  • Raspberry Pi の /dev/gpiomem を参照する Greengrass グループのローカルデバイスリソース。コンソールでリソースを作成する場合、[Automatically add OS group permissions of the Linux group that owns the resource] (リソースを所有する Linux グループの OS グループアクセス権限を自動的に追加する) オプションを選択する必要があります。API で、GroupOwnerSetting.AutoAddGroupOwner プロパティを true に設定します。

  • Raspberry Pi にインストールされた RPi.GPIO モジュール。Raspbian では、このモジュールがデフォルトでインストールされています。以下のコマンドを使用して再インストールできます。

    sudo pip install RPi.GPIO
Versions 1 - 2
  • AWS IoT Greengrass Core ソフトウェア v1.7 以降。

  • Python バージョン 2.7 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

  • Raspberry Pi 4 モデル B、または Raspberry Pi 3 モデル B/B+。Raspberry Pi のピン配列を知る必要があります。詳細については、「GPIO ピンシーケンス」を参照してください。

  • Raspberry Pi の /dev/gpiomem を参照する Greengrass グループのローカルデバイスリソース。コンソールでリソースを作成する場合、[Automatically add OS group permissions of the Linux group that owns the resource] (リソースを所有する 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 コンソールでの表示名: [Input GPIO pins] (入力 GPIO ピン)

必須: false。入力 ピン、出力 ピン、またはその両方を指定する必要があります。

タイプ: string

有効なパターン: ^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

入力 GPIO ピンの状態の変化を確認する各ポーリングオペレーションの間隔 (ミリ秒単位)。最小値は 1 です。

この値は、シナリオとポーリングされるデバイスのタイプによって異なります。例えば、値が 50 であれば、ボタンの押下を検出するのに十分な速さになります。

AWS IoT コンソールでの表示名: [Input GPIO polling period] (Input GPIO ポーリング期間)

必須: false

タイプ: string

有効なパターン: ^$|^[1-9][0-9]*$

OutputGpios

出力として設定する、カンマで区切られた GPIO ピン番号のリスト。オプションで、高電圧状態 (1) を設定するには H を付加し、低電圧状態 (0) を設定するには L を付加します。例えば、"8H,9,27L" などです。

AWS IoT コンソールでの表示名: [Output GPIO pins] (出力 GPIO ピン)

必須: false。入力 ピン、出力 ピン、またはその両方を指定する必要があります。

タイプ: string

有効なパターン: ^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

/dev/gpiomem を表すローカルデバイスリソースの ID。

注記

このコネクタには、リソースへの読み取りと書き込みアクセスが付与されています。

AWS IoT コンソールでの表示名: [Resource for /dev/gpiomem device] (/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 コンソールでは、グループの [Connectors] (コネクタ) ページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。

入力データ

このコネクタは、2 つの MQTT トピックの GPIO ピンに対する読み取りリクエストまたは書き込みリクエストを受け入れます。

  • gpio/+/+/read トピックの読み取りリクエスト。

  • gpio/+/+/write トピックの書き込みリクエスト。

これらのトピックに発行するには、+ ワイルドカードをそれぞれ Core モノ名とターゲットピン番号に置き換えます。例:

gpio/core-thing-name/gpio-number/read
注記

現時点では、Raspberry Pi GPIO コネクタを使用するサブスクリプションを作成するときに、トピックの少なくとも 1 つの + ワイルドカードに値を指定する必要があります。

トピックのフィルター: 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

出力データ

このコネクタは、以下の 2 つのトピックにデータを発行します。

  • gpio/+/+/state トピックでの高電圧または低電圧への状態の変化。

  • gpio/+/error トピックでのエラー。

トピックのフィルター: gpio/+/+/state

このトピックを使用して、入力ピンの状態の変化と読み取りリクエストへのレスポンスをリッスンします。コネクタは、ピンが低電圧状態の場合は文字列 "0" を返し、高電圧状態の場合は文字列 "1" を返します。

このトピックに公開するときに、コネクタはワイルドカード + をそれぞれ Core モノ名とターゲット PIN に置き換えます。例:

gpio/core-thing-name/gpio-number/state
注記

現時点では、Raspberry Pi GPIO コネクタを使用するサブスクリプションを作成するときに、トピックの少なくとも 1 つの + ワイルドカードに値を指定する必要があります。

出力例
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 関数の例を設定するには、次のステップ (概要) を使用します。

注記
  1. コネクタの要件を満たしていることを確認します。

  2. 入力データをコネクタに送信する Lambda 関数を作成して発行します。

    サンプルコードを PY ファイルとして保存します。AWS IoT Greengrass Core SDK for Python をダウンロードして解凍します。次に、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 コンソールの [Test] (テスト) ページで、出力データトピックをサブスクライブして、コネクタからのステータスメッセージを表示します。この例の 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 Core ソフトウェアライセンス契約に従ってリリースされます。

変更ログ

次の表に、コネクタの各バージョンにおける変更点を示します。

バージョン

変更

3

Lambda ランタイムを Python 3.7 にアップグレードしたことで、ランタイム要件が変更。

2

AWS リージョン のサポートを目的にコネクタ ARN を更新。

1

初回リリース。

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

以下も参照してください。