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 デバイスをコントロールする。
注記
このコネクタは、リアルタイム要件がある用途には適していません。期間が短いイベントは見逃される可能性があります。
このコネクタには、次のバージョンがあります。
Version |
ARN |
---|---|
3 |
|
2 |
|
1 |
|
バージョンの変更については、「Changelog」を参照してください。
要件
このコネクタには以下の要件があります。
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 関数の例を設定するには、次のステップ (概要) を使用します。
注記
-
他の Python ランタイムを使用する場合は、Python 3.x から Python 3.7 へのシンボリックリンクを作成します。
-
「コネクタの使用を開始する (コンソール)」および「コネクタの使用を開始する (CLI)」トピックには、Twilio 通知コネクタの例を設定およびデプロイする方法を示す詳細なステップが含まれています。
コネクタの要件を満たしていることを確認します。
-
入力データをコネクタに送信する Lambda 関数を作成して発行します。
サンプルコードを PY ファイルとして保存します。AWS IoT Greengrass Core SDK for Python をダウンロードして解凍します。次に、PY ファイルとルートレベルの
greengrasssdk
フォルダを含む zip パッケージを作成します。この zip パッケージは、AWS Lambda にアップロードするデプロイパッケージです。Python 3.7 Lambda 関数を作成したら、関数バージョンを公開し、エイリアスを作成します。
-
Greengrass グループを設定します。
-
エイリアスで Lambda 関数を追加します (推奨)。Lambda ライフサイクルを長期間有効に (または CLI で
"Pinned": true
に) 設定します。 -
必要なローカルデバイスリソースを追加し、Lambda 関数への読み取り/書き込みアクセスを許可します。
-
コネクタを追加し、そのパラメータを設定します。
-
コネクタが入力データを受信し、サポートされているトピックフィルターで出力データを送信できるようにするサブスクリプションを追加します。
Lambda 関数をソースに、コネクタをターゲットに設定し、サポートされている入力トピックフィルターを使用します。
コネクタをソースとして、AWS IoT Core をターゲットとして設定し、サポートされている出力トピックフィルターを使用します。このサブスクリプションを使用して、AWS IoT コンソールでステータスメッセージを表示します。
-
-
グループをデプロイします。
-
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 コネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。
RPi.GPIO
/MIT
このコネクタは、Greengrass Core ソフトウェアライセンス契約
変更ログ
次の表に、コネクタの各バージョンにおける変更点を示します。
Version |
変更 |
---|---|
3 |
Lambda ランタイムを Python 3.7 にアップグレードしたことで、ランタイム要件が変更。 |
2 |
AWS リージョン のサポートを目的にコネクタ ARN を更新。 |
1 |
初回リリース。 |
Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。
以下も参照してください。
-
Raspberry Pi ドキュメントの「GPIO
」