Conector Raspberry Pi GPIO - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conector Raspberry Pi GPIO

Atenção

Esse conector passou para a fase de vida útil estendida e AWS IoT Greengrass não lançará atualizações que forneçam atributos, aprimoramentos para atributos existentes, patches de segurança ou correções de erros. Para obter mais informações, consulte Política de manutenção do AWS IoT Greengrass Version 1.

O conector Raspberry Pi GPIO controla entrada/saída de pins (GPIO) de uso geral em um dispositivo de núcleo Raspberry Pi.

Esse conector consulta pins de entrada em um intervalo especificado e publica alterações de estado em tópicos MQTT. Ele também aceita solicitações de leitura e gravação como mensagens MQTT de funções do Lambda definidas pelo usuário. As solicitações de gravação são usadas para definir o pin de alta ou baixa tensão.

O conector fornece parâmetros que você usa para designar pins de entrada e saída. Esse comportamento é configurado antes da implantação do grupo. Ele não pode ser alterado em tempo de execução.

  • Pins de entrada podem ser usados para receber dados de dispositivos periféricos.

  • Pins de entrada podem ser usados para controlar periféricos ou enviar dados para periféricos.

Você pode usar esse conector em muitos cenários, como:

  • Controlar luzes LED verde, amarela e vermelha para um semáforo.

  • Controlar um ventilador (anexado a uma retransmissão elétrica) com base nos dados de um sensor de umidade.

  • Avisar funcionários de uma loja quando os clientes pressionarem um botão.

  • Usar um interruptor inteligente para controlar outros dispositivos da IoT.

nota

Esse conector não é adequado para aplicativos que têm requisitos em tempo real. Eventos de curta duração podem ser perdidos.

Esse conector tem as seguintes versões.

Versão

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 obter informações sobre alterações de versão, consulte o Changelog.

Requisitos

Esse conector tem os seguintes requisitos:

Version 3
  • Software de núcleo do AWS IoT Greengrass v1.9.3 ou versão posterior.

  • Python versão 3.7 instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.

  • Raspberry Pi 4 Modelo B ou Raspberry Pi 3 Modelo B/B+. Você deve saber a sequência de pin do seu Raspberry Pi. Para obter mais informações, consulte Sequência de pin GPIO.

  • Um recurso do dispositivo local no grupo do Greengrass que aponta para /dev/gpiomem no Raspberry Pi. Se você criar o recurso no console, deverá selecionar a opção Adicionar automaticamente permissões de grupo de SO do grupo Linux que possui o recurso. Na API, defina a propriedade GroupOwnerSetting.AutoAddGroupOwner como true.

  • O módulo RPi.GPIO instalado no Raspberry Pi. No Raspbian, esse módulo é instalado por padrão. Você pode usar o comando a seguir para instalá-lo novamente:

    sudo pip install RPi.GPIO
Versions 1 - 2
  • Software AWS IoT Greengrass Core v1.7 ou posterior.

  • Python versão 2.7 instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH.

  • Raspberry Pi 4 Modelo B ou Raspberry Pi 3 Modelo B/B+. Você deve saber a sequência de pin do seu Raspberry Pi. Para obter mais informações, consulte Sequência de pin GPIO.

  • Um recurso do dispositivo local no grupo do Greengrass que aponta para /dev/gpiomem no Raspberry Pi. Se você criar o recurso no console, deverá selecionar a opção Adicionar automaticamente permissões de grupo de SO do grupo Linux que possui o recurso. Na API, defina a propriedade GroupOwnerSetting.AutoAddGroupOwner como true.

  • O módulo RPi.GPIO instalado no Raspberry Pi. No Raspbian, esse módulo é instalado por padrão. Você pode usar o comando a seguir para instalá-lo novamente:

    sudo pip install RPi.GPIO

Sequência de pin GPIO

O conector GPIO do Raspberry Pi faz referência aos pins GPIO pelo esquema de numeração do System on Chip (SoC) subjacente, não pelo layout físico dos pins GPIO. A ordem física dos pins pode variar nas versões do Raspberry Pi. Para obter mais informações, consulte GPIO na documentação do Raspberry Pi.

O conector não pode validar que os pins de entrada e saída que você configura mapeiem corretamente ao hardware subjacente do seu Raspberry Pi. Se a configuração do pin for inválida, o conector retornará um erro de tempo de execução ao tentar iniciar no dispositivo. Para resolver esse problema, reconfigure o conector e reimplante.

nota

Certifique-se de que periféricos para pins GPIO estejam corretamente cabeados para evitar danos de componente.

Parâmetros do conector

Esse conector oferece os seguintes parâmetros:

InputGpios

Uma lista separada por vírgulas de números de pins GPIO para configurar como entradas. Opcionalmente, acrescente U para definir um resistor de pin ou D para definir a resistência suspensa. Exemplo: "5,6U,7D".

Nome de exibição no console do AWS IoT: pins GPIO de entrada

Obrigatório: false. Você deve especificar pins de entrada, de saída ou ambos.

Digite: string

Padrão válido: ^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

O intervalo (em milissegundos) entre cada operação de sondagem, que verifica pins GPIO de entrada para alterações de estado. O valor mínimo é 1.

Esse valor depende do cenário e do tipo de dispositivos consultados. Por exemplo, o valor 50 deve ser suficientemente rápido para detectar o ato de pressionar um botão.

Nome de exibição no console do AWS IoT: Período de pesquisa do GPIO de entrada

Obrigatório: false

Digite: string

Padrão válido: ^$|^[1-9][0-9]*$

OutputGpios

Uma lista separada por vírgulas de números de pins GPIO para configurar como saídas. Opcionalmente, anexe H para definir um estado superior (1), ou L para definir um estado inferior (0). Exemplo: "8H,9,27L".

Nome de exibição no console do AWS IoT: Pins GPIO de saída

Obrigatório: false. Você deve especificar pins de entrada, de saída ou ambos.

Digite: string

Padrão válido: ^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

O ID do recurso do dispositivo local que representa /dev/gpiomem.

nota

Esse conector recebe acesso de leitura e gravação ao recurso.

Nome de exibição no console do AWS IoT: Recurso para o dispositivo /dev/gpiomem

Obrigatório: true

Digite: string

Padrão válido: .+

Exemplo de criação de conector (AWS CLI)

O seguinte comando da CLI cria um ConnectorDefinition com uma versão inicial que contém o conector GPIO do 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

A função do Lambda nesse conector tem um ciclo de vida longo.

No console do AWS IoT Greengrass, você pode adicionar um conector na página Conectores do grupo. Para obter mais informações, consulte Conceitos básicos de conectores do Greengrass (console).

Dados de entrada

Esse conector aceita solicitações de leitura ou gravação para pins GPIO em dois tópicos MQTT.

  • Solicitações de leitura no tópico gpio/+/+/read.

  • Solicitações de gravação no tópico gpio/+/+/write.

Para publicar esses tópicos, substitua os curingas + pelo nome da coisa principal e pelo número do pin de destino, respectivamente. Por exemplo:

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

Atualmente, quando você cria uma assinatura que usa o conector GPIO do Raspberry Pi, deve especificar um valor para pelo menos um dos curingas + no tópico.

Filtro de tópico: gpio/+/+/read

Use esse tópico para orientar o conector para ler o estado do pin GPIO que é especificado no tópico.

O conector publica a resposta no tópico de saída correspondente (por exemplo, gpio/core-thing-name/gpio-number/state).

Propriedades de mensagens

Nenhum. As mensagens enviadas a esse tópico são ignoradas.

Filtro de tópico: gpio/+/+/write

Use esse tópico para enviar solicitações de gravação para um pin GPIO. Isso orienta o conector a definir o pin GPIO que é especificado no tópico como de baixa ou alta tensão.

  • 0 define o pin como baixa tensão.

  • 1 define o pin como de alta tensão.

O conector publica a resposta no tópico /state de saída correspondente (por exemplo, gpio/core-thing-name/gpio-number/state).

Propriedades de mensagens

O valor 0 ou 1, como número inteiro ou string.

Exemplo de entrada
0

Dados de saída

Esse conector publica dados em dois tópicos:

  • O estado superior ou inferior é alterado no tópico gpio/+/+/state.

  • Erros no tópico gpio/+/error.

Filtro de tópico: gpio/+/+/state

Use esse tópico para ouvir alterações de estado nos pins de entrada e nas respostas às solicitações de leitura. O conector retornará a string "0" se o pin estiver em estado inferior ou "1" se estiver em estado superior.

Ao publicar nesse tópico, o conector substitui os curingas + pelo nome da coisa principal e pelo pin de destino, respectivamente. Por exemplo:

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

Atualmente, quando você cria uma assinatura que usa o conector GPIO do Raspberry Pi, deve especificar um valor para pelo menos um dos curingas + no tópico.

Exemplo de saída
0
Filtro de tópico: gpio/+/error

Use esse tópico para ouvir erros. O conector publica nesse tópico como resultado de uma solicitação inválida (por exemplo, quando uma alteração de estado é solicitada em um pin de entrada).

Ao publicar nesse tópico, o conector substitui o curinga + pelo nome da coisa principal.

Exemplo de saída
{ "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." }

Exemplo de uso

Use as seguintes etapas de alto nível para configurar um exemplo de função do Lambda Python 3.7 que pode ser usado para testar o conector.

nota
  1. Certifique-se de cumprir os requisitos para o conector.

  2. Crie e publique uma função do Lambda que envie dados de entrada para o conector.

    Salve o código de exemplo como arquivo PY. Baixe e descompacte o SDK do AWS IoT Greengrass Core para Python. Crie então um pacote zip que contenha o arquivo PY e a pasta greengrasssdk no nível raiz. Este pacote zip é o pacote de implantação que você transfere por upload para o AWS Lambda.

    Depois de criar a função do Lambda Python 3.7, publique uma versão de função e crie um alias.

  3. Configure o grupo do Greengrass.

    1. Adicione a função do Lambda pelo seu alias (recomendado). Configure o ciclo de vida do Lambda como de longa duração (ou "Pinned": true na CLI).

    2. Adicione o recurso de dispositivo local necessário e conceda acesso de leitura/gravação à função do Lambda.

    3. Adicione o conector e configure seus parâmetros.

    4. Adicione assinaturas que permitam que o conector receba dados de entrada e envie dados de saída em filtros de tópico compatíveis.

      • Defina a função do Lambda como origem, o conector como destino e use um filtro de tópico de entrada compatível.

      • Defina o conector como origem, o AWS IoT Core como destino, e use um filtro de tópico de saída compatível. Use essa assinatura para exibir mensagens de status no console do AWS IoT.

  4. Implante o grupo.

  5. No console do AWS IoT, na página Teste, assine o tópico de dados de saída para exibir mensagens de status do conector. A função de exemplo do Lambda é de longa duração e começa a enviar mensagens imediatamente após o grupo ser implantado.

    Ao finalizar o teste, você pode definir o ciclo de vida do Lambda como sob demanda (ou "Pinned": false na CLI) e implantar o grupo. Isso impede o envio de mensagens pela função.

Exemplo

O exemplo a seguir da função do Lambda envia uma mensagem de entrada para o conector. Este exemplo envia solicitações de leitura para um conjunto de pins GPIO de entrada. Ele mostra como construir tópicos usando o nome e o número do pin da coisa principal.

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

Licenças

O conector GPIO do Raspberry Pi inclui o seguinte licenciamento/software de terceiros:

Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core.

Changelog

A tabela a seguir descreve as alterações em cada versão do conector.

Versão

Alterações

3

Atualização do runtime do Lambda para Python 3.7, o que altera o requisito de runtime.

2

ARN do conector atualizado para suporte Região da AWS.

1

Versão inicial.

Um grupo do Greengrass só pode conter uma versão do conector por vez. Para obter informações sobre como fazer upgrade de uma versão do conector, consulte Atualizar a versões do conector.

Consulte também