Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 Amazon IoT Greengrass Version 2,这样可以添加重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Raspberry Pi GPIO 连接器
警告
此连接器已进入生命周期延长阶段,Amazon IoT Greengrass 不会发布更新来提供功能、现有功能增强、安全补丁或错误修复。有关更多信息,请参阅 Amazon IoT Greengrass Version 1 维护策略。
Raspberry Pi GPIO 连接器控制 Raspberry Pi 核心设备上的通用输入/输出 (GPIO) 引脚。
此连接器按指定间隔轮询输入引脚并将状态变化发布到 MQTT 主题。它还以 MQTT 消息形式接受来自用户定义的 Lambda 函数的读取和写入请求。写入请求用于将引脚设置为高压或低压。
连接器提供用于指定输入和输出引脚的参数。此行为在部署组之前配置。它无法在运行时更改。
输入引脚可用于从外围设备接收数据。
输出引脚可用于控制外围设备或将数据发送到外围设备。
您可以在许多情况下使用此连接器,例如:
控制交通信号灯的绿色、黄色和红色 LED 指示灯。
根据来自湿度传感器的数据控制风扇(连接到继电器)。
顾客按下按钮向零售店中的员工发出警报。
使用智能指示灯开关控制其他 IoT 设备。
注意
此连接器不适合具有实时要求的应用。持续时间很短的事件可能会被漏掉。
此连接器具有以下版本。
版本 |
ARN |
---|---|
3 |
|
2 |
|
1 |
|
有关版本更改的信息,请参阅更改日志。
要求
此连接器具有以下要求:
GPIO 引脚序列
Raspberry Pi GPIO 连接器通过底层片上系统 (SoC) 的编号方案来引用 GPIO 引脚,而不是基于 GPIO 引脚的物理布局。根据不同的 Raspberry Pi 版本,引脚的物理顺序可能有所不同。有关更多信息,请参阅 Raspberry Pi 文档中的 GPIO
连接器无法验证您所配置的输入和输出引脚是否与 Raspberry Pi 的基础硬件正常匹配。如果引脚配置无效,连接器在尝试在设备上启动时,会返回一个运行时错误。要解决此问题,请重新配置连接器,然后重新部署。
注意
请确保 GPIO 引脚的外围设备布线正确,以防止组件损坏。
连接器参数
该连接器提供以下参数:
InputGpios
-
要配置为输入的 GPIO 引脚号的逗号分隔列表。可选择附加
U
以设置引脚的上拉电阻,或附加D
以设置下拉电阻。示例:"5,6U,7D"
。Amazon IoT 控制台中的显示名称:输入 GPIO 引脚
必需:
false
。您必须指定输入和/或输出引脚。类型:
string
有效模式:
^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$
InputPollPeriod
-
每个轮询操作之间的间隔(以毫秒为单位),该操作检查输入 GPIO 引脚是否发生状态变化。最小值为 1。
此值取决于您所处的具体情况以及轮询的设备的类型。例如,值为
50
应该足够快速地检测到按钮按压。Amazon IoT 控制台中的显示名称:输入 GPIO 轮询周期
必需:
false
类型:
string
有效模式:
^$|^[1-9][0-9]*$
OutputGpios
-
要配置为输出的 GPIO 引脚号的逗号分隔列表。可选择附加
H
以设置高状态(值为 1),或附加L
以设置低状态(值为 0)。示例:"8H,9,27L"
。Amazon IoT 控制台中的显示名称:输出 GPIO 引脚
必需:
false
。您必须指定输入和/或输出引脚。类型:
string
有效模式:
^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$
GpioMem-ResourceId
-
表示
/dev/gpiomem
的本地设备资源的 ID。注意
连接器被授予对该资源的读写访问权限。
Amazon IoT 控制台中的显示名称:/dev/gpiomem 设备的资源
必需:
true
类型:
string
有效模式:
.+
创建连接器示例 (Amazon CLI)
以下 CLI 命令创建一个 ConnectorDefinition
,其初始版本包含 Raspberry Pi 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 函数的生命周期很长。
在 Amazon 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 运行时,您可以创建从 Python3.x 到 Python 3.7 的符号链接。
-
连接器入门(控制台) 和 连接器入门 (CLI) 主题包含详细步骤,说明如何配置和部署示例 Twilio 通知连接器。
确保满足连接器的要求。
-
创建并发布将输入数据发送到连接器的 Lambda 函数。
将示例代码保存为 PY 文件。下载并解压适用于 Python 的 Amazon IoT Greengrass Core 软件开发工具包。然后,创建一个 zip 包,其中在根级别包含 PY 文件和
greengrasssdk
文件夹。此 zip 包是您上传到 Amazon Lambda 的部署包。创建 Python 3.7 Lambda 函数后,请发布函数版本并创建别名。
-
配置 Greengrass 组。
-
部署组。
-
在 Amazon IoT 控制台中,在测试页面上,订阅输出数据主题以查看连接器中的状态消息。示例 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 软件许可协议
更改日志
下表介绍每个版本连接器的更改。
版本 |
更改 |
---|---|
3 |
已将 Lambda 运行时升级到 Python 3.7,这会更改运行时要求。 |
2 |
更新了连接器 ARN 以获得 Amazon Web Services 区域 支持。 |
1 |
首次发布。 |
Greengrass 组在一个时间上只能包含一个版本的连接器。有关升级连接器版本的信息,请参阅升级连接器版本。
另请参阅
-
Raspberry Pi 文档中的 GPIO