Amazon IoT Greengrass Version 12023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅Amazon IoT Greengrass V1维护政策。在此日期之后,Amazon IoT Greengrass V1不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上运行的设备Amazon IoT Greengrass V1不会受到干扰,将继续运行并连接到云端。我们强烈建议你迁移到Amazon IoT Greengrass Version 2,它补充说重要的新功能和支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Raspberry Pi 连接器
警告
此连接器已移入延长使用寿命阶段, 和Amazon IoT Greengrass不会发布提供功能、现有功能增强功能、安全补丁或错误修复的更新。有关更多信息,请参阅 Amazon IoT Greengrass Version 1维护政策。
Raspberry Pi连接器控制 Raspberry Pi 核心设备上的通用输入/输出 (GPIO) 引脚。
此连接器按指定间隔轮询输入引脚并将状态变化发布到 MQTT 主题。它还以 MQTT 消息形式接受来自用户定义的 Lambda 函数的读取和写入请求。写入请求用于将引脚设置为高压或低压。
连接器提供用于指定输入和输出引脚的参数。此行为在部署组之前配置。它无法在运行时更改。
输入引脚可用于从外围设备接收数据。
输出引脚可用于控制外围设备或将数据发送到外围设备。
您可以在许多情况下使用此连接器,例如:
控制交通信号灯的绿色、黄色和红色 LED 指示灯。
根据来自湿度传感器的数据控制风扇(连接到继电器)。
顾客按下按钮向零售店中的员工发出警报。
使用智能指示灯开关控制其他 IoT 设备。
注意
此连接器不适合具有实时要求的应用。持续时间很短的事件可能会被漏掉。
此连接器具有以下版本。
版本 |
ARN |
---|---|
3 |
|
2 |
|
1 |
|
有关版本更改的信息,请参阅更改日志。
要求
此连接器具有以下要求:
GPIO 引脚序列
树莓派 GPIO 连接器根据底层片上系统 (SoC) 的编号方案引用 GPIO 引脚,而不是 GPIO 引脚的物理布局。在 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 Greengrassconsole,则可以从该组的连接器页. 有关更多信息,请参阅 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 文件。下载并解压缩Amazon IoT Greengrass适用于 Python 的核心. 然后,创建一个 zip 包,其中在根级别包含 PY 文件和
greengrasssdk
文件夹。此 zip 包是您上传到的部署包Amazon Lambda.创建 Python 3.7 Lambda 函数后,发布函数版本并创建别名。
-
配置 Greengrass 组。
-
部署组。
-
在Amazon IoT控制台,在测试页面上,订阅输出数据主题以查看连接器中的状态消息。示例 Lambda 函数是长时间生存的,并且在部署组后立即开始发送消息。
完成测试后,您可以将 Lambda 生命周期设置为按需(或
"Pinned": false
在 CLI 中)并部署组。这会阻止函数发送消息。
示例
以下示例 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 核心软件许可协议
更改日志
下表介绍连接器各个版本的更改。
版本 |
更改 |
---|---|
3 |
已将 Lambda 运行时升级到 Python 3.7,这会更改运行时要求。 |
2 |
为更新连接器 ARNAmazon Web Services 区域支持。 |
1 |
首次发布。 |
Greengrass 组每次只能包含连接器的一个版本。有关升级连接器版本的信息,请参阅升级连接器版本。
另请参阅
-
Raspberry Pi 文档中的 GPIO