Conector Raspberry Pi GPIO - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Conector Raspberry Pi GPIO

aviso

Este conector ha pasado a la fase de vida útil prolongada y AWS IoT Greengrass no lanzará actualizaciones que proporcionen funciones, mejoras de las funciones existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte AWS IoT Greengrass Version 1política de mantenimiento.

El conector GPIO de Raspberry Pi controla los pines de entrada/salida de uso general (GPIO) en un dispositivo del núcleo de Raspberry Pi.

Este conector sondea pines de entrada a un intervalo especificado y publica los cambios de estado en temas de MQTT. También acepta las solicitudes de lectura y escritura como mensajes de MQTT de las funciones de Lambda definidas por el usuario. Las solicitudes de escritura se utilizan para establecer el pin en tensión alta o baja.

El conector proporciona los parámetros que se usan para designar los pines de entrada y salida. Este comportamiento se configura antes de la implementación del grupo. No se puede cambiar en el tiempo de ejecución.

  • Los pines de entrada se pueden utilizar para recibir datos de dispositivos periféricos.

  • Los pines de salida se pueden utilizar para controlar periféricos o enviar datos a periféricos.

Puede utilizar este conector para admitir muchas situaciones, como:

  • Controlar las luces LED verde, ámbar y roja de un semáforo.

  • Controlar un ventilador (conectado a un relé eléctrico) en función de los datos de un sensor de humedad.

  • Alertar a los empleados de una tienda minorista cuando los clientes pulsen un botón.

  • Usar un interruptor de luz inteligente para controlar otros dispositivos de IoT.

nota

Este conector no es adecuado para aplicaciones que tienen requisitos en tiempo real. Los eventos con períodos cortos podrían pasarse por alto.

Este conector tiene las siguientes versiones.

Versión

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

Para obtener información sobre los cambios de versión, consulte el Registro de cambios.

Requisitos

Este conector exige los siguientes requisitos:

Version 3
  • Software AWS IoT Greengrass Core versión 1.9.3 o posterior.

  • Versión .7 de Python instalada en el dispositivo principal y añadida a la variable de entorno PATH.

  • Raspberry Pi 4 modelo B o Raspberry Pi 3 modelo B/B+. Debe conocer la secuencia de pines de su Raspberry Pi. Para obtener más información, consulte Secuencia de pines de GPIO.

  • Un recurso de dispositivo local en el grupo de Greengrass que apunta a /dev/gpiomem en la Raspberry Pi. Si crea el recurso en la consola, debe seleccionar la opción Añadir automáticamente los permisos de grupo de OS del grupo de Linux propietario del recurso. En la API, defina la propiedad GroupOwnerSetting.AutoAddGroupOwner en true.

  • El módulo RPi.GPIO instalado en el dispositivo Raspberry Pi. En Raspbian, este módulo se instala de forma predeterminada. Puede utilizar el comando siguiente para volverlo a instalar:

    sudo pip install RPi.GPIO
Versions 1 - 2
  • Software AWS IoT Greengrass Core versión 1.7 o posterior.

  • Versión 2.7 de Python instalada en el dispositivo principal y añadida a la variable de entorno PATH.

  • Raspberry Pi 4 modelo B o Raspberry Pi 3 modelo B/B+. Debe conocer la secuencia de pines de su Raspberry Pi. Para obtener más información, consulte Secuencia de pines de GPIO.

  • Un recurso de dispositivo local en el grupo de Greengrass que apunta a /dev/gpiomem en la Raspberry Pi. Si crea el recurso en la consola, debe seleccionar la opción Añadir automáticamente los permisos de grupo de OS del grupo de Linux propietario del recurso. En la API, defina la propiedad GroupOwnerSetting.AutoAddGroupOwner en true.

  • El módulo RPi.GPIO instalado en el dispositivo Raspberry Pi. En Raspbian, este módulo se instala de forma predeterminada. Puede utilizar el comando siguiente para volverlo a instalar:

    sudo pip install RPi.GPIO

Secuencia de pines de GPIO

El conector Raspberry Pi GPIO hace referencia a los pines GPIO por el esquema de numeración del sistema en chip (SoC) subyacente, no por la disposición física de los pines GPIO. El orden físico de los pines puede variar en las versiones de Raspberry Pi. Para obtener más información, consulte GPIO en la documentación de Raspberry Pi.

El conector no puede validar que los pines de entrada y salida configurados se asignen correctamente en el hardware subyacente de su Raspberry Pi. Si la configuración de pines no es válida, el conector devuelve un error de tiempo de ejecución cuando se intenta iniciar en el dispositivo. Para solucionar este problema, vuelva a configurar el conector y, a continuación, impleméntelo de nuevo.

nota

Asegúrese de que los periféricos para los pines de GPIO están correctamente cableados para evitar daños de componentes.

Parámetros de conector

Este conector proporciona los siguientes parámetros:

InputGpios

Lista separada por comas de números de pines de GPIO para configurar como entradas. Si lo desea, añada U para establecer una resistencia de subida de pines o D para establecer la resistencia de bajada. Ejemplo: "5,6U,7D".

Nombre para mostrar en la consola AWS IoT: Input GPIO pins

Obligatorio: false. Debe especificar pines de entrada, de salida o ambos.

Escriba: string

Patrón válido: ^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

El intervalo (en milisegundos) entre cada operación de sondeo, que comprueba los pines de GPIO de entrada para buscar cambios de estado. El valor mínimo es 1.

Este valor depende del escenario y del tipo de dispositivos que se sondearán. Por ejemplo, un valor de 50 debe ser lo suficientemente rápido para detectar una pulsación de botón.

Nombre para mostrar en la consola AWS IoT: Pines GPIO de entrada

Obligatorio: false

Escriba: string

Patrón válido: ^$|^[1-9][0-9]*$

OutputGpios

Lista separada por comas de números de pines de GPIO para configurar como salidas. Si lo desea, añada H para establecer un estado alto (1) o L para establecer un estado bajo (0). Ejemplo: "8H,9,27L".

Nombre para mostrar en la consola AWS IoT: Pines GPIO de salida

Obligatorio: false. Debe especificar pines de entrada, de salida o ambos.

Escriba: string

Patrón válido: ^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

El ID del recurso de dispositivo local que representa /dev/gpiomem.

nota

A este conector se le concede acceso de lectura y escritura al recurso.

Nombre para mostrar en la consola AWS IoT: Resource for /dev/gpiomem device

Obligatorio: true

Escriba: string

Patrón válido: .+

Ejemplo de creación de conector (AWS CLI)

El siguiente comando de la CLI crea una ConnectorDefinition con una versión inicial que contiene el conector GPIO de 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" } } ] }'
nota

La función de Lambda de este conector tiene un ciclo de vida prolongado.

En la consola AWS IoT Greengrass, puede añadir un conector desde la página de Conectores del grupo. Para obtener más información, consulte Introducción a los conectores de Greengrass (consola).

Datos de entrada

Este conector acepta solicitudes de lectura o escritura para pines de GPIO en dos temas de MQTT.

  • Solicitudes de lectura en el tema gpio/+/+/read.

  • Solicitudes de escritura en el tema gpio/+/+/write.

Para publicar en estos temas, reemplace los comodines + con el nombre de cosa de núcleo y el número de pines de destino, respectivamente. Por ejemplo:

gpio/core-thing-name/gpio-number/read
nota

Actualmente, cuando crea una suscripción que utiliza el conector GPIO de Raspberry Pi, debe especificar un valor para al menos uno de los comodines + en el tema.

Filtro de temas: gpio/+/+/read

Use este tema para que el conector lea el estado del pin de GPIO que se especifica en el tema.

El conector publica la respuesta en el tema de salida correspondiente (por ejemplo, gpio/core-thing-name/gpio-number/state).

Propiedades de mensajes

Ninguno. Los mensajes que se envían a este tema se pasan por alto.

Filtro de temas: gpio/+/+/write

Use este tema para enviar solicitudes de escritura a un pin de GPIO. Esto indica al conector que establezca el pin de GPIO que se especifica en el tema con una tensión baja o alta.

  • 0 establece el pin en voltaje bajo.

  • 1 establece el pin en voltaje alto.

El conector publica la respuesta en el tema de salida /state correspondiente (por ejemplo, gpio/core-thing-name/gpio-number/state).

Propiedades de mensajes

El valor 0 o 1, como un número entero o cadena.

Ejemplo de entrada
0

Datos de salida

Este conector publica los datos en dos temas:

  • Los cambios de estado de alto o bajo en el tema gpio/+/+/state.

  • Los errores en el tema gpio/+/error.

Filtro de temas: gpio/+/+/state

Use este tema para escuchar los cambios de estado de pines de entrada y respuestas de las solicitudes de lectura. El conector devuelve la cadena "0" si el pin se encuentra en un estado bajo, o "1" si se trata de un estado alto.

Al publicar en este tema, el conector reemplaza los comodines + por el nombre de cosa de núcleo y el pin de destino, respectivamente. Por ejemplo:

gpio/core-thing-name/gpio-number/state
nota

Actualmente, cuando crea una suscripción que utiliza el conector GPIO de Raspberry Pi, debe especificar un valor para al menos uno de los comodines + en el tema.

Ejemplo de salida
0
Filtro de temas: gpio/+/error

Use este tema para escuchar errores. El conector publica en este tema como resultado de una solicitud no válida (por ejemplo, cuando se solicita un cambio de estado en un pin de entrada).

Al publicar en este tema, el conector reemplaza el comodín + por el nombre de cosa de núcleo.

Ejemplo de salida
{ "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." }

Ejemplo de uso

Utilice los siguientes pasos de alto nivel para configurar una función de Lambda de Python 3.7 de ejemplo que puede utilizar para probar el conector.

nota
  1. Asegúrese de cumplir los requisitos para el conector.

  2. Cree y publique una función de Lambda que envíe datos de entrada al conector.

    Guarde el código de ejemplo como un archivo PY. Descargue y descomprima el SDK de AWS IoT Greengrass Core para Python. A continuación, cree un paquete zip que contenga el archivo PY y la carpeta greengrasssdk en el nivel raíz. Este paquete zip es el paquete de implementación que se carga en AWS Lambda.

    Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

  3. Configuración del grupo de Greengrass.

    1. Agregue la función de Lambda por su alias (recomendado). Configure el ciclo de vida de Lambda como de larga duración (o "Pinned": true en la CLI).

    2. Agregue el recurso de dispositivo local requerido y conceda acceso de lectura/escritura a la función de Lambda.

    3. Agregue el conector y configure sus parámetros.

    4. Agregue suscripciones que permitan al conector recibir datos de entrada y enviar datos de salida en filtros de tema compatibles.

      • Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.

      • Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utilice esta suscripción para ver los mensajes de estado en la consola de AWS IoT.

  4. Implemente el grupo.

  5. En la consola de AWS IoT, en la página Prueba, suscríbase al tema de datos de salida para ver los mensajes de estado del conector. La función de Lambda de ejemplo es de larga duración y comienza a enviar mensajes inmediatamente después de implementar el grupo.

    Cuando haya terminado de probar, puede establecer el ciclo de vida de Lambda en Bajo demanda (o "Pinned": false en la CLI) e implementar el grupo. Esto impide que la función envíe mensajes.

Ejemplo

El siguiente ejemplo de función de Lambda envía un mensaje de entrada al conector. En este ejemplo, se envían solicitudes de lectura de un conjunto de pins de GPIO de entrada. En él se muestra cómo crear temas utilizando el nombre de objeto y el número pin del dispositivo central.

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

Licencias

El conector GPIO de Raspberry Pi incluye las siguientes licencias y software de terceros:

Este conector se publica bajo el contrato de licencia de software de Greengrass Core.

Registro de cambios

La siguiente tabla describe los cambios en cada versión del conector.

Versión

Cambios

3

Se actualizó el tiempo de ejecución de Lambda a Python 3.7, lo que cambia el requisito de tiempo de ejecución.

2

Se actualizó el conector ARN para el soporte de Región de AWS.

1

Versión inicial.

Un grupo de Greengrass solo puede contener una versión del conector a la vez. Para obtener información sobre cómo actualizar una versión de conector, consulte Actualización de versiones de los conectores.

Véase también