AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Raspberry Pi GPIO

Raspberry Pi GPIO 连接器控制 Raspberry Pi 核心设备上的通用输入/输出 (GPIO) 引脚。

此连接器按指定间隔轮询输入引脚并将状态变化发布到 MQTT 主题。它还以 MQTT 消息形式接受来自用户定义的 Lambda 函数的读取和写入请求。写入请求用于将引脚设置为高压或低压。

连接器提供用于指定输入和输出引脚的参数。此行为在部署组之前配置。它无法在运行时更改。

  • 输入引脚可用于从外围设备接收数据。

  • 输出引脚可用于控制外围设备或将数据发送到外围设备。

您可以在许多情况下使用此连接器,例如:

  • 控制交通信号灯的绿色、黄色和红色 LED 指示灯。

  • 根据来自湿度传感器的数据控制风扇(连接到继电器)。

  • 顾客按下按钮向零售店中的员工发出警报。

  • 使用智能指示灯开关控制其他 IoT 设备。

注意

此连接器不适合具有实时要求的应用。持续时间很短的事件可能会被漏掉。

此连接器具有以下版本。

版本

ARN

2

arn:aws-cn:greengrass:区域::/connectors/RaspberryPiGPIO/versions/12

1

arn:aws:greengrass:区域::/connectors/RaspberryPiGPIO/versions/1

有关版本更改的信息,请参阅更改日志

要求

此连接器具有以下要求:

  • AWS IoT Greengrass 核心软件 v1.7 or later。

  • Python 版本 2.7 已安装在核心设备上并且已添加到 PATH 环境变量。

  • Raspberry Pi 3 Model B+B 模型。您必须知道 Raspberry Pi 的引脚序列。有关更多信息,请参阅 GPIO 引脚序列

  • Greengrass 组中的一个 本地设备资源,指向 Raspberry Pi 上的 /dev/gpiomem。如果在控制台内创建该资源,则必须选择自动添加拥有该资源的 Linux 组的 OS 组许可选项。在 API 中,将 GroupOwnerSetting.AutoAddGroupOwner 属性设置为 true

  • 安装在 Raspberry Pi 上的 RPi.GPIO 模块。在 Raspbian 中,默认情况下安装此模块。您可以使用以下命令重新安装它:

    sudo pip install RPi.GPIO

GPIO 引脚序列

Raspberry Pi GPIO 连接器是指按照底层芯片系统 (SoC) 的编号方案编号的 GPIO 管脚,而不是 GPIO 管脚的物理布局。在 Raspberry Pi 版本中,管脚的物理顺序可能有所不同。有关更多信息,请参阅 Raspberry Pi 文档中的 GPIO

连接器无法验证您所配置的输入和输出引脚是否与 Raspberry Pi 的基础硬件正常匹配。如果引脚配置无效,连接器在尝试在设备上启动时,会返回一个运行时错误。要解决此问题,请重新配置连接器,然后重新部署。

注意

请确保 GPIO 引脚的外围设备布线正确,以防止组件损坏。

连接器参数

该连接器提供以下参数:

InputGpios

要配置为输入的 GPIO 引脚号的逗号分隔列表。可选择附加 U 以设置引脚的上拉电阻,或附加 D 以设置下拉电阻。示例: "5,6U,7D".

在控制台中显示名称: 输入 GPIO 引脚

必需:false。您必须指定输入和/或输出引脚。

类型:string

有效模式:^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

每个轮询操作之间的间隔(以毫秒为单位),该操作检查输入 GPIO 引脚是否发生状态变化。最小值为 1。

此值取决于您所处的具体情况以及轮询的设备的类型。例如,值为 50 应该足够快速地检测到按钮按压。

在控制台中显示名称:输入 GPIO 轮询期

必需:false

类型:integer

有效模式:^$|^[1-9][0-9]*$

OutputGpios

要配置为输出的 GPIO 引脚号的逗号分隔列表。可选择附加 H 以设置高状态(值为 1),或附加 L 以设置低状态(值为 0)。示例: "8H,9,27L".

在控制台中显示名称:输出 GPIO 引脚

必需:false。您必须指定输入和/或输出引脚。

类型:string

有效模式:^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

表示 /dev/gpiomem 的本地设备资源的 ID。

注意

连接器被授予对该资源的读写访问权限。

在控制台中显示名称:/dev/gpiomem 设备的资源

必需:true

类型:string

有效模式:.+

创建连接器示例 (CLI)

以下 CLI 命令创建一个 ConnectorDefinition,其初始版本包含 Raspberry Pi GPIO连接器。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyRaspberryPiGPIOConnector", "ConnectorArn": "arn:aws-cn:greengrass:区域::/connectors/RaspberryPiGPIO/versions/12", "Parameters": { "GpioMem-ResourceId": "my-gpio-resource", "InputGpios": "5,6U,7D", "InputPollPeriod": 50, "OutputGpios": "8H,9,27L" } } ] }'

注意

该连接器中的 Lambda 函数具有很长的生命周期。

在 AWS IoT Greengrass 控制台 中,您可以从该组的 Connectors (连接器)页面添加一个连接器。有关更多信息,请参阅 Greengrass 连接器入门(控制台)

输入数据

此连接器在两个 MQTT 主题上接受 GPIO 引脚的读取或写入请求。输入消息必须采用 JSON 格式。

  • 读取请求位于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/+/errors

使用此主题侦听错误。连接器因请求无效而发布到此主题(例如,当对输入引脚请求状态变化时)。

当发布到此主题,连接器会将 + 通配符替换为核心事物名称。

输出示例
{ "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." }

示例用法

以下是 Lambda 功能将输入消息发送到连接器的示例。 此示例发送一组输入 GPIO 引脚的读取请求。它显示了如何使用核心事物名称和引脚号构建主题。

注意

该 Python 功能使用 AWS IoT Greengrass Core 开发工具包 来发布 MQTT 消息。您可以使用以下 pip 命令在核心设备上安装 SDK 的 Python 版本:

pip install greengrasssdk
import greengrasssdk import json 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 function_handler(event, context): return

许可证

此连接器按照 Greengrass 核心软件许可协议发布。

Changelog

下表描述了连接器每个版本中所做的更改。

版本

更改

2

用于 AWS 区域支持的已更新连接器 ARN。

1

首次发布。

Greengrass 组一次只能包含一个版本的连接器。

另请参阅