Raspberry Pi GPIO コネクタ - 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 GPIO コネクタ

Raspberry Pi GPIOコネクタRaspberry Pi Core デバイスの汎用入力/出力 (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 Core ソフトウェア v1.9.3 以降。

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

  • ラズベリーパイ4モデルB、またはラズベリーパイ3モデル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 GreengrassCore ソフトウェア v1.7 以降。

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

  • ラズベリーパイ4モデルB、またはラズベリーパイ3モデル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ピンを参照します。ピンの物理的な順序は、ラズベリーパイのバージョンで異なる場合があります. 詳細については、「」を参照してください。GPIORaspberry 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コンソール: Input GPIO ポーリング期間

必須false

タイプ: string

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

OutputGpios

出力として設定する、カンマで区切られた GPIO ピン番号のリスト。オプションで、高電圧状態 (1) を設定するには H を付加し、低電圧状態 (0) を設定するには L を付加します。例: "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 コネクタの開始方法 (コンソール)」を参照してください。

入力データ

このコネクタは、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 GreengrassPython 用コアSDK。次に、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 IoTconsole.

  4. グループをデプロイします。

  5. 左AWS IoTコンソール、Testページで、出力データトピックをサブスクライブして、コネクタからのステータスメッセージを表示します。この例の 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

ラズベリーパイGPIO; コネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。

このコネクタは、Greengrass Core ソフトウェアライセンス契約

Changelog

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

バージョン

変更

3

Lambda ランタイムを Python 3.7 にアップグレードしました。これにより、ランタイム要件が変更されます。

2

コネクタ ARN を更新しました。 AWS リージョン によるのサポート。

1

初回リリース。

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

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