Raspberry Pi 連接器 - 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 連接器

警告

此連接器已移至延長使用期間,以及AWS IoT Greengrass不會發行提供功能、增強現有功能、安全性修補程式或錯誤修正的更新。如需詳細資訊,請參閱 AWS IoT Greengrass Version 1維護政策

Raspberry Pi Raspberry Pi 螢幕連接器控制 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 核心軟體 1.9.3 版或更新版本。

  • 蟒蛇3.7 版本已安裝在核心裝置上並已新增至 PATH 環境變數。

  • 樹莓派 4 B 型, 或樹莓派 3 型號 B/B +. 您必須了解 Raspberry Pi 的接腳順序。如需詳細資訊,請參閱 GPIO 接腳順序

  • 一個本機裝置資源源量Greengrass 群組中指向的/dev/gpiomemRaspberry Pi 上的 Raspberry Pi。如果您在主控台中建立資源,則必須選取為擁有資源的 Linux 群組自動新增作業系統群組許可選項。在 API 中設定,設定GroupOwnerSetting.AutoAddGroupOwner屬性至true

  • 安裝在 Raspberry Pi 的 RPi.GPIO 模組。在 Raspbian 中,預設已安裝這個模組。您可以使用下列命令來重新加以安裝:

    sudo pip install RPi.GPIO
Versions 1 - 2
  • AWS IoT Greengrass核心軟體 v1.7 版或更新版本。

  • 蟒蛇2.7 版本已安裝在核心裝置上並已新增至 PATH 環境變數。

  • 樹莓派 4 B 型, 或樹莓派 3 型號 B/B +. 您必須了解 Raspberry Pi 的接腳順序。如需詳細資訊,請參閱 GPIO 接腳順序

  • 一個本機裝置資源源量Greengrass 群組中指向的/dev/gpiomemRaspberry Pi 上的 Raspberry Pi。如果您在主控台中建立資源,則必須選取為擁有資源的 Linux 群組自動新增作業系統群組許可選項。在 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主控台:輸入 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與包含 Raspberry Pi 連接器的初始版本。

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)。

訊息屬性

01,做為整數或字串。

範例輸入
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 函數。

注意
  1. 確定您符合連接器的要求

  2. 建立 Lambda 函數並發佈將輸入資料傳送至連接器的 Lambda 函數。

    範例程式碼儲存為 PY 檔案。下載並解壓縮AWS IoT Greengrass適用於 Python 的核心 SDK。然後,建立在根層級包含 PY 檔案和 greengrasssdk 資料夾的 zip 套件。此 zip 套件是您上傳至的部署套件。AWS Lambda。

    建立 Python 3.7 Lambda 函數後,請發佈函數版本並建立別名。

  3. 設定 Greengrass 群組。

    1. 根據別名新增 Lambda 函數 (建議使用)。將 Lambda 生命週期設定為長時間設定為長期 (或"Pinned": true在 CLI 中)。

    2. 新增所需的本機裝置資源,並授與對 Lambda 函數的讀取/寫入存取權。

    3. 新增連接器並設定其參數

    4. 新增訂閱,允許連接器在支援主題篩選條件上接收輸入資料並傳送輸出資料

      • 將 Lambda 函數設為來源、將連接器設為目標,並使用支援的輸入主題篩選條件。

      • 將連接器設為來源、將 AWS IoT Core 設為目標,並使用支援的輸出主題篩選條件。您可以使用此訂閱來檢視中的狀態訊息。AWS IoT主控台。

  4. 部署群組。

  5. 在 中AWS IoT主控台,在測試頁面中,訂閱輸出資料主題以檢視來自連接器的狀態訊息。範例 Lambda 函數具有長時間的生命周期,而且在部署完群組後會立即開始傳送訊息。

    完成測試後,您可以將 Lambda 生命週期設為隨需 (或者) 生命週期設為隨需 (或)。"Pinned": false在 CLI 中設定並部署群組。這會讓函數停止傳送訊息。

範例

下列範例 Lambda 函數會將輸入訊息傳送至連接器。此範例會傳送一組輸入 GPIO 接腳的讀取請求。它會說明如何使用核心物件名稱和 PIN 碼來建構主題。

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 Raspberry Pi GPIO; 連接器包含以下第三方軟體/授權:

此連接器會在Greengrass Core 軟體授權合約

Changelog

下表說明連接器每個版本的變更。

版本

變更

3

已將 Lambda 執行時間升級至 Python 3.7,這會改變執行時間要求。

2

適用於更新連接器 ARN,用於AWS 區域支援助。

1

初始版本。

Greengrass 群組一次只能包含連接器的一個版本。若要取得有關升級連接器版本的資訊,請參閱升級連接器版本

另請參閱