Raspberry Pi - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Raspberry Pi

Avertissement

Ce connecteur a été déplacé dans lePhase de vie prolongée, etAWS IoT Greengrassne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations à des fonctionnalités existantes, des correctifs de sécurité ou des corrections de bogues. Pour plus d'informations, consultez AWS IoT Greengrass Version 1politique de maintenance.

Le Raspberry PiconnecteurContrôle les broches d'entrée/sortie à usage général (GPIO) sur un appareil principal Raspberry Pi.

Ce connecteur interroge les broches d'entrée à un intervalle spécifié et publie les changements d'état dans des rubriques MQTT. Il accepte également les demandes de lecture et d'écriture adressées comme des messages MQTT à partir de fonctions Lambda définies par l'utilisateur Les demandes d'écriture sont utilisées pour régler la broche sur haute ou basse tension.

Le connecteur fournit des paramètres que vous utilisez pour désigner des broches d'entrée et de sortie. Ce comportement est configuré avant le déploiement de groupe. Il ne peut pas être modifié au moment de l'exécution.

  • Les broches d'entrée peuvent être utilisées pour recevoir des données à partir des appareils périphériques.

  • Les broches de sortie peuvent être utilisées pour contrôler les périphériques ou envoyer des données aux périphériques.

Vous pouvez utiliser ce connecteur pour de nombreux scénarios, tels que :

  • contrôler des feux vert, orange et rouge d'un feu de circulation.

  • contrôler un ventilateur (relié à un relais électrique) basé sur les données provenant d'un capteur d'humidité.

  • alerter des employés dans un magasin lorsque les clients appuient sur un bouton.

  • utiliser un commutateur de lumière intelligent pour contrôler d'autres appareils IoT.

Note

Ce connecteur n'est pas adapté aux applications qui ont des besoins en temps réel. Des événements de courte durée peuvent être manqués.

Ce connecteur a les versions suivantes.

Version

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

Pour obtenir des informations sur les changements apportés aux versions, veuillez consulter le Journal des modifications.

Prérequis

Ce connecteur possède les critères suivants :

Version 3
  • Logiciel AWS IoT Greengrass Core 1.9.3 ou version ultérieure.

  • Pythonversion 3.7 installée sur l'appareil principal et ajoutée à la variable d'environnement PATH.

  • Raspberry Pi 4 modèle B ou Raspberry Pi 3 modèle B/B+. Vous devez connaître la séquence de broches de votre Raspberry Pi. Pour plus d'informations, consultez Séquence de broches GPIO.

  • UNressource de périphérique localedans le groupe Greengrass qui pointe vers/dev/gpiomemsur le Raspberry Pi. Si vous créez la ressource dans la console, vous devez sélectionnerAjouter automatiquement les autorisations de groupe de système d'exploitation du groupe Linux qui possède la ressourceoption. Dans l'API, définissezGroupOwnerSetting.AutoAddGroupOwnerpropriété verstrue.

  • Le module RPi.GPIO installé sur le Raspberry Pi. Dans Raspbian, ce module est installé par défaut. Vous pouvez utiliser la commande suivante pour le réinstaller :

    sudo pip install RPi.GPIO
Versions 1 - 2
  • AWS IoT GreengrassLogiciel Core v1.7 ou version ultérieure.

  • PythonVersion 2.7 installée sur l'appareil principal et ajoutée à la variable d'environnement PATH.

  • Raspberry Pi 4 modèle B ou Raspberry Pi 3 modèle B/B+. Vous devez connaître la séquence de broches de votre Raspberry Pi. Pour plus d'informations, consultez Séquence de broches GPIO.

  • UNressource de périphérique localedans le groupe Greengrass qui pointe vers/dev/gpiomemsur le Raspberry Pi. Si vous créez la ressource dans la console, vous devez sélectionnerAjouter automatiquement les autorisations de groupe de système d'exploitation du groupe Linux qui possède la ressourceoption. Dans l'API, définissezGroupOwnerSetting.AutoAddGroupOwnerpropriété verstrue.

  • Le module RPi.GPIO installé sur le Raspberry Pi. Dans Raspbian, ce module est installé par défaut. Vous pouvez utiliser la commande suivante pour le réinstaller :

    sudo pip install RPi.GPIO

Séquence de broches GPIO

Le connecteur GPIO du Raspberry Pi référence les broches GPIO par le schéma de numérotation du système sur puce (SoC) sous-jacent, et non par la disposition physique des broches GPIO. L'ordre physique des broches peut varier selon les versions du Raspberry Pi. Pour de plus amples informations, veuillez consulterGPIOdans la documentation Raspberry Pi.

Le connecteur ne peut pas valider que les broches d'entrée et de sortie que vous configurez se mappent correctement au matériel sous-jacent de votre Raspberry Pi. Si la configuration de broche n'est pas valide, le connecteur renvoie une erreur d'exécution lorsqu'il essaie de démarrer sur le périphérique. Pour résoudre ce problème, reconfigurez le connecteur puis redéployez.

Note

Assurez-vous que les périphériques des broches GPIO sont correctement connectés pour empêcher les dommages des composants.

Paramètres du connecteur

Ce connecteur fournit les paramètres suivants :

InputGpios

Une liste séparée par des virgules de numéros de broches GPIO à configurer en tant qu'entrées. Vous pouvez également ajouter U pour définir une résistance de tirage de la broche ou D pour définir la résistance de rappel. Exemple: "5,6U,7D".

Nom d'affichage dansAWS IoTConsole  : Broches d'entrée GPIO

Obligatoire : false. Vous devez spécifier les broches d'entrée, de sortie ou les deux.

Type: string

Modèle valide :^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

Intervalle (en millisecondes) entre chaque opération d'interrogation, qui vérifie les broches GPIO d'entrée pour les changements d'état. La valeur minimale est de 1.

Cette valeur dépend de votre scénario et des types d'appareils qui sont interrogés. Par exemple, une valeur 50 doit être suffisamment rapide pour détecter une pression de bouton.

Nom d'affichage dansAWS IoTConsole  : Période d'interrogation de GPIO

Obligatoire :false

Type: string

Modèle valide :^$|^[1-9][0-9]*$

OutputGpios

Une liste séparée par des virgules de nombres de broches GPIO à configurer en tant que sorties. Vous pouvez ajouter H pour régler sur un état haut (1) ou L pour régler sur un état faible (0). Exemple: "8H,9,27L".

Nom d'affichage dansAWS IoTConsole  : Broches de sortie GPIO

Obligatoire : false. Vous devez spécifier les broches d'entrée, de sortie ou les deux.

Type: string

Modèle valide :^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

ID de la ressource de l'appareil local qui représente /dev/gpiomem.

Note

Ce connecteur bénéficie d'un accès en lecture/écriture à la ressource.

Nom d'affichage dansAWS IoTConsole  : Resource pour appareil /dev/gpiomem

Obligatoire :true

Type: string

Modèle valide :.+

Exemple de création de connecteur (AWS CLI)

La commande d'interface de ligne de commande suivante créeConnectorDefinitionavec une version initiale qui contient le connecteur GPIO 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" } } ] }'
Note

La fonction Lambda de ce connecteur possède unlongue duréecycle de vie.

DansAWS IoT Greengrass, vous pouvez ajouter un connecteur à partir de la consoleConnecteurs. Pour plus d'informations, consultez Mise en route avec les connecteurs Greengrass (console).

Données d'entrée

Ce connecteur accepte les demandes de lecture ou d'écriture pour les broches GPIO sur deux rubriques MQTT.

  • Lire les demandes dans la rubrique gpio/+/+/read.

  • Écrire les demandes dans la rubrique gpio/+/+/write.

Pour publier dans ces rubriques, remplacez respectivement les caractères génériques + par le nom d'objet principal et le nombre de broches cibles. Par exemple :

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

Actuellement, lorsque vous créez un abonnement qui utilise le connecteur GPIO pour Raspberry Pi, vous devez spécifier une valeur pour au moins un des caractères génériques de la rubrique.

Filtre de rubriques : gpio/+/+/read

Utilisez cette rubrique pour demander au connecteur de lire l'état de la broche GPIO spécifiée dans la rubrique.

Le connecteur publie la réponse dans la rubrique de sortie correspondante (par exemple, gpio/core-thing-name/gpio-number/state).

Propriétés des messages

Aucun. Les messages qui sont envoyés dans cette rubrique sont ignorés.

Filtre de rubriques : gpio/+/+/write

Utilisez cette rubrique pour envoyer des demandes d'écriture à une broche GPIO. Cela demande au connecteur de régler la broche GPIO spécifiée dans la rubrique sur faible ou haute tension.

  • 0 règle la broche sur faible tension.

  • 1 règle la broche sur haute tension.

Le connecteur publie la réponse dans la rubrique /state de sortie correspondante (par exemple, gpio/core-thing-name/gpio-number/state).

Propriétés des messages

Valeur 0 ou 1, sous forme d'un nombre entier ou d'une chaîne.

Exemple d'entrée
0

Données de sortie

Ce connecteur publie des données dans deux rubriques :

  • Changements d'états hauts ou faibles dans la rubrique gpio/+/+/state.

  • Erreurs dans la rubrique gpio/+/error.

Filtre de rubriques : gpio/+/+/state

Utilisez cette rubrique pour écouter les changements d'état sur les broches d'entrée et les réponses pour les demandes de lecture. Le connecteur renvoie la chaîne "0" si la broche est dans un état faible ou "1" s'il est dans un état haut.

Lorsqu'il publie dans cette rubrique, le connecteur remplace respectivement les caractères génériques + par le nom d'objet principal et la broche cible. Par exemple :

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

Actuellement, lorsque vous créez un abonnement qui utilise le connecteur GPIO pour Raspberry Pi, vous devez spécifier une valeur pour au moins un des caractères génériques de la rubrique.

Exemple de sortie
0
Filtre de rubriques : gpio/+/error

Utilisez cette rubrique pour écouter les erreurs. Le connecteur publie dans cette rubrique suite à une demande non valide (par exemple, lorsqu'un changement d'état est demandé sur une broche d'entrée).

Lorsqu'il publie dans cette rubrique, le connecteur remplace respectivement le caractère générique + par le nom d'objet principal.

Exemple de sortie
{ "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." }

Exemple d'utilisation

Suivez les étapes détaillées suivantes pour configurer un exemple de fonction Lambda Python 3.7 que vous pouvez utiliser pour tester le connecteur.

Note
  1. Veillez à répondre aux conditions requises pour le connecteur.

  2. Créez et publiez une fonction Lambda qui envoie des données d'entrée au connecteur.

    Enregistrez l'exemple de code en tant que fichier PY. Téléchargez et décompressezAWS IoT GreengrassKit SDK Core pour Python. Ensuite, créez un package zip contenant le fichier PY et le dossier greengrasssdk au niveau racine. Ce package zip correspond au package de déploiement que vous chargez surAWS Lambda.

    Après avoir créé la fonction Lambda Python 3.7, publiez une version de fonction et créez un alias.

  3. Configurez votre groupe Greengrass.

    1. Ajoutez la fonction Lambda par son alias (recommandé). Configurez le cycle de vie Lambda comme long (ou"Pinned": truedans la CLI).

    2. Ajoutez la ressource de périphérique local requise et accordez un accès en lecture/écriture à la fonction Lambda.

    3. Ajoutez le connecteur et configurez ses paramètres.

    4. Ajoutez des abonnements qui permettent au connecteur de recevoir des données d'entrée et d'envoyer des données de sortie sur des filtres de rubrique pris en charge.

      • Définissez la fonction Lambda en tant que source, le connecteur en tant que cible et utilisez un filtre de rubrique d'entrée pris en charge.

      • Définissez le connecteur en tant que source, AWS IoT Core en tant que cible et utilisez un filtre de rubrique de sortie pris en charge. Vous utilisez cet abonnement pour afficher les messages d'état dansAWS IoTconsole

  4. Déployez le groupe.

  5. DansAWS IoTsur la console,Test, abonnez-vous à la rubrique des données de sortie pour afficher les messages d'état du connecteur. L'exemple de fonction Lambda à longue durée de vie commence à envoyer des messages immédiatement après le déploiement du groupe.

    Lorsque vous avez terminé le test, vous pouvez définir le cycle de vie Lambda sur"Pinned": falsedans l'interface de ligne de commande) et déployez le groupe. Cela empêche la fonction d'envoyer des messages.

Exemple

L'exemple de fonction Lambda suivant envoie un message d'entrée au connecteur. Cet exemple envoie des demandes de lecture pour un ensemble de broches GPIO d'entrée. Il indique comment construire des rubriques à l'aide du nom de l'objet principale et du nombre de broches.

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

Licences

Le connecteur Raspberry Pi inclut les logiciels et licences tiers suivants :

Ce connecteur est libéré sous leContrat de licence du logiciel Greengrass Core.

Journal des modifications

Le tableau suivant décrit les modifications apportées à chaque version du connecteur.

Version

Modifications

3

Mise à niveau du moteur d'exécution Lambda vers Python 3.7, ce qui modifie l'exigence d'environnement exécution.

2

Mise à jour d'ARN du connecteurRégion AWSPrise en charge.

1

Première version.

Un groupe Greengrass ne peut contenir qu'une seule version du connecteur à la fois. Pour de plus amples informations sur la mise à niveau d'une version de connecteur, veuillez consulter Mise à niveau des versions du connecteur.

Consulter aussi