Connettore GPIO Raspberry Pi - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connettore GPIO Raspberry Pi

avvertimento

Questo connettore è stato spostato nelFase di vita estesa, eAWS IoT Greengrassnon rilascerà aggiornamenti che forniscono funzionalità, miglioramenti alle funzionalità esistenti, patch di sicurezza o correzioni di bug. Per ulteriori informazioni, consulta la pagina AWS IoT Greengrass Version 1politica di manutenzione .

Il dispositivo Raspberry Piconnettorecontrolla i pin di input/output generici (GPIO) di un dispositivo core Raspberry Pi.

Questo connettore esegue il polling dei pin di input a un intervallo specificato e pubblica le modifiche allo stato negli argomenti MQTT. Inoltre, accetta le richieste di lettura e scrittura come messaggi MQTT dalle funzioni Lambda definite dall'utente. Le richieste di scrittura vengono utilizzate per impostare il pin sull'alta o bassa tensione.

Il connettore fornisce parametri utilizzabili per indicare i pin di input e output. Questo comportamento viene configurato prima della distribuzione del gruppo. Non può essere modificato in fase di runtime.

  • I pin di input possono essere utilizzati per ricevere i dati da dispositivi periferici.

  • I pin di output possono essere utilizzati per controllare le periferiche o inviare dati alle periferiche.

Puoi utilizzare questo connettore per molti scenari, ad esempio:

  • Controllo delle luci LED verde, gialle e rosse di un semaforo.

  • Controllo di una ventola (collegata a un relè elettrico) in base ai dati forniti da un sensore di umidità.

  • Informare i dipendenti di un negozio sul fatto che i clienti hanno premuto un pulsante.

  • Utilizzo di un interruttore smart per controllare altri dispositivi IoT.

Nota

Questo connettore non è idoneo per applicazioni con requisiti in tempo reale. Gli eventi di breve durata potrebbero non venire rilevati.

Questo connettore dispone delle versioni seguenti.

Versione

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

Per informazioni sulle modifiche di ogni versione, consulta Changelog.

Requisiti

Questo connettore presenta i seguenti requisiti:

Version 3
  • Software AWS IoT Greengrass Core v1.9.3 o versioni successive.

  • Pitoneversione 3.7 installata sul dispositivo core e aggiunta alla variabile di ambiente PATH.

  • Raspberry Pi 4 modello B o Raspberry Pi 3 modello B/B +. È necessario conoscere la sequenza pin del Raspberry Pi. Per ulteriori informazioni, consulta la pagina Sequenza pin GPIO .

  • UNrisorsa dispositivo localenel gruppo Greengrass che punti alla/dev/gpiomemsul computer Raspberry Pi. Se crei la risorsa nella console, devi selezionare laAggiungi automaticamente le autorizzazioni del gruppo OS del gruppo Linux che possiede la risorsaopzione. Nell'API, imposta ilGroupOwnerSetting.AutoAddGroupOwnerproprietà atrue.

  • Il modulo RPi.GPIO installato nel Raspberry Pi. In Raspbian, questo modulo è installato per impostazione predefinita. Puoi utilizzare il seguente comando per reinstallarlo:

    sudo pip install RPi.GPIO
Versions 1 - 2
  • AWS IoT GreengrassSoftware Core v1.7 o versioni successive.

  • Pitoneversione 2.7 installata sul dispositivo core e aggiunta alla variabile di ambiente PATH.

  • Raspberry Pi 4 modello B o Raspberry Pi 3 modello B/B +. È necessario conoscere la sequenza pin del Raspberry Pi. Per ulteriori informazioni, consulta la pagina Sequenza pin GPIO .

  • UNrisorsa dispositivo localenel gruppo Greengrass che punti alla/dev/gpiomemsul computer Raspberry Pi. Se crei la risorsa nella console, devi selezionare laAggiungi automaticamente le autorizzazioni del gruppo OS del gruppo Linux che possiede la risorsaopzione. Nell'API, imposta ilGroupOwnerSetting.AutoAddGroupOwnerproprietà atrue.

  • Il modulo RPi.GPIO installato nel Raspberry Pi. In Raspbian, questo modulo è installato per impostazione predefinita. Puoi utilizzare il seguente comando per reinstallarlo:

    sudo pip install RPi.GPIO

Sequenza pin GPIO

Il connettore GPIO Raspberry Pi fa riferimento ai pin GPIO dallo schema di numerazione del SoC (System on Chip) sottostante, non dal layout fisico dei pin GPIO. L'ordine fisico dei pin potrebbe variare nelle versioni di Raspberry Pi. Per ulteriori informazioni, consultaGPIOnella documentazione di Raspberry Pi.

Il connettore non è in grado di verificare se i pin di input e output in fase di configurazione sono associati correttamente all'hardware sottostante del Raspberry Pi. Se la configurazione dei pin non è valida, il connettore restituisce un errore di runtime al momento dell'avvio nel dispositivo. Per risolvere il problema, riconfigurare il connettore, quindi ridistribuirlo.

Nota

Assicurati che le periferiche dei pin GPIO siano correttamente cablate per evitare danni ai componenti.

Parametri del connettore

Questo connettore fornisce i seguenti parametri:

InputGpios

Un elenco separato da virgole di numeri pin GPIO da configurare come input. Se lo desideri, puoi aggiungere U per impostare una resistenza pull-up del pin oppure D per impostare la resistenza pull-down. Esempio: "5,6U,7D".

Nome visualizzato nellaAWS IoTConsole : Pin GPIO di input

Campo obbligatorio: false. Devi specificare i pin di input, quelli di output o entrambi.

Tipo: string

Modello valido:^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

L'intervallo (in millisecondi) fra ciascuna operazione di polling, che controlla le modifiche dello stato dei pin GPIO di input. Il valore minimo è 1.

Questo valore dipende dallo scenario e dal tipo di dispositivi in fase di polling. Ad esempio, un valore pari a 50 dovrebbe essere sufficientemente rapido per rilevare la pressione di un pulsante.

Nome visualizzato nellaAWS IoTConsole : Periodo di polling GPIO di input

Campo obbligatorio:false

Tipo: string

Modello valido:^$|^[1-9][0-9]*$

OutputGpios

Un elenco separato da virgole di numeri pin GPIO da configurare come output. Puoi aggiungere H per impostare uno stato elevato (1) oppure L per impostare uno stato basso (0). Esempio: "8H,9,27L".

Nome visualizzato nellaAWS IoTConsole : Pin GPIO di output

Campo obbligatorio: false. Devi specificare i pin di input, quelli di output o entrambi.

Tipo: string

Modello valido:^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

L'ID della risorsa del dispositivo locale che rappresenta /dev/gpiomem.

Nota

Al connettore è concesso l'accesso in lettura e scrittura alla risorsa.

Nome visualizzato nellaAWS IoTConsole : Risorsa per il dispositivo /dev/gpiomem

Campo obbligatorio:true

Tipo: string

Modello valido:.+

Esempio di creazione di un connettore (AWS CLI)

Il seguente comando CLI crea unConnectorDefinitioncon una versione iniziale che contiene il connettore GPIO del 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 funzione Lambda in questo connettore ha undi lunga durataciclo di vita.

NellaAWS IoT Greengrassconsole, è possibile aggiungere un connettore dal gruppoConnettori(Certificato creato). Per ulteriori informazioni, consulta la pagina Nozioni di base sui connettori Greengrass (console) .

Dati di input

Questo connettore accetta richieste di lettura o scrittura per i pin GPIO in due argomenti MQTT.

  • Richieste di lettura nell'argomento gpio/+/+/read.

  • Richieste di scrittura nell'argomento gpio/+/+/write.

Per pubblicare in questi argomenti, sostituisci i caratteri jolly + rispettivamente con il nome dell'oggetto core e il numero di pin di destinazione. Ad esempio:

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

Al momento, alla creazione di una sottoscrizione che utilizza il connettore GPIO Raspberry Pi, è necessario specificare un valore per almeno uno dei caratteri jolly + nell'argomento.

Filtro di argomenti: gpio/+/+/read

Utilizza questo argomento per indicare al connettore di leggere lo stato del pin GPIO specificato nell'argomento.

Il connettore pubblica la risposta nel corrispondente argomento di output (ad esempio, gpio/core-thing-name/gpio-number/state).

Proprietà dei messaggi

Nessuna. I messaggi inviati a questo argomento vengono ignorati.

Filtro di argomenti: gpio/+/+/write

Utilizza questo argomento per inviare richieste di scrittura a un pin GPIO. Indica al connettore di impostare il pin GPIO specificato nell'argomento sulla bassa tensione o sull'alta tensione.

  • 0 imposta il pin sulla bassa tensione.

  • 1 imposta il pin sull'alta tensione.

Il connettore pubblica la risposta nel corrispondente argomento /state di output (ad esempio, gpio/core-thing-name/gpio-number/state).

Proprietà dei messaggi

Il valore 0 o 1, come intero o stringa.

Input di esempio
0

Dati di output

Questo connettore pubblica i dati in due argomenti:

  • Le modifiche allo stato alto o basso nell'argomento gpio/+/+/state.

  • Gli errori nell'argomento gpio/+/error.

Filtro di argomenti: gpio/+/+/state

Utilizza questo argomento per ascoltare le modifiche dello stato dei pin di input e risposte alle richieste di lettura. Il connettore restituisce la stringa "0" se lo stato del pin è basso oppure "1" se lo stato è alto.

Durante la pubblicazione in questo argomento, il connettore sostituisce i caratteri jolly + rispettivamente con il nome dell'oggetto core e il numero di pin di destinazione. Ad esempio:

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

Al momento, alla creazione di una sottoscrizione che utilizza il connettore GPIO Raspberry Pi, è necessario specificare un valore per almeno uno dei caratteri jolly + nell'argomento.

Output di esempio
0
Filtro di argomenti: gpio/+/error

Utilizza questo argomento per ascoltare gli errori. Il connettore pubblica in questo argomento in seguito a una richiesta non valida (ad esempio, quando è necessaria una modifica dello stato di un pin di input).

Durante la pubblicazione in questo argomento, il connettore sostituisce il carattere jolly + con il nome dell'oggetto core.

Output di esempio
{ "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." }

Esempio di utilizzo

Utilizza i seguenti passaggi di alto livello per impostare un esempio di funzione Lambda di Python 3.7 che puoi utilizzare per provare il connettore.

Nota
  1. Assicurarsi di soddisfare i requisiti per il connettore.

  2. Crea e pubblica una funzione Lambda che invia i dati di input al connettore.

    Salvare il codice di esempio come file PY. Scarica e decomprimi il fileAWS IoT GreengrassSDK Core per Python. Quindi, crea un pacchetto zip che contiene il file PY e la cartella greengrasssdk a livello root. Questo pacchetto zip è il pacchetto di distribuzione caricato suAWS Lambda.

    Dopo aver creato la funzione Python 3.7 Lambda, pubblica una versione della funzione e crea un alias.

  3. Configurare il gruppo Greengrass.

    1. Aggiungi la funzione Lambda con il suo alias (scelta consigliata). Configurare il ciclo di vita di Lambda come di lunga durata (o"Pinned": truenella CLI).

    2. Aggiungi la risorsa periferica locale richiesta e concedi l'accesso in lettura/scrittura alla funzione Lambda.

    3. Aggiungere il connettore e configurarne i relativi parametri.

    4. Aggiungere sottoscrizioni che consentono al connettore di ricevere i dati di input e inviare i dati di output nei filtri degli argomenti supportati.

      • Imposta la funzione Lambda come origine, il connettore come destinazione e utilizza un filtro per l'argomento di input supportato.

      • Imposta il connettore come origine, AWS IoT Core come destinazione e utilizza un filtro per l’argomento di output supportato. Utilizza questa sottoscrizione per visualizzare i messaggi di stato nellaAWS IoTConsole.

  4. Distribuisci il gruppo.

  5. NellaAWS IoTconsole, sullaTest, sottoscrivi l'argomento dei dati di output per visualizzare i messaggi di stato dal connettore. La funzione Lambda di esempio ha una lunga durata e inizia a inviare messaggi immediatamente dopo la distribuzione del gruppo.

    Al termine del test, puoi impostare il ciclo di vita di Lambda su «on demand» (o"Pinned": falsenella CLI) e distribuire il gruppo. Ciò impedisce alla funzione di inviare messaggi.

Esempio

La funzione Lambda di esempio seguente invia un messaggio di input al connettore. Questo esempio invia richieste di lettura per un set di pin GPIO di input. Illustra come costruire argomenti utilizzando il nome dell'oggetto core e il numero di pin.

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

Licenze

Il connettore Raspberry Pi include il software e le licenze di terze parti indicati di seguito:

Questo connettore viene rilasciato sottoAccordo di licenza del software Greengrass Core.

Changelog

La tabella seguente descrive le modifiche apportate a ogni nuova versione del connettore.

Versione

Modifiche

3

Aggiornato il runtime Lambda a Python 3.7, che modifica il requisito di runtime.

2

ARN del connettore aggiornato perRegione AWSSupporto.

1

Versione iniziale.

Un gruppo Greengrass può contenere una sola versione del connettore alla volta. Per informazioni sull'aggiornamento di una versione del connettore, consulta Aggiornamento delle versioni dei connettori.

Consulta anche