Raspberry Pi-GPIO - AWS IoT Greengrass

AWS IoT Greengrass Version 1 trat am 30. Juni 2023 in die erweiterte Lebensphase ein. Weitere Informationen finden Sie in der AWS IoT Greengrass V1 Wartungsrichtlinie. Nach diesem Datum AWS IoT Greengrass V1 werden keine Updates mehr veröffentlicht, die Funktionen, Verbesserungen, Bugfixes oder Sicherheitspatches bieten. Geräte, die auf laufen, werden AWS IoT Greengrass V1 nicht gestört und funktionieren weiterhin und stellen eine Verbindung zur Cloud her. Wir empfehlen Ihnen dringend, zu migrieren AWS IoT Greengrass Version 2, da dies wichtige neue Funktionen und Unterstützung für zusätzliche Plattformen bietet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Raspberry Pi-GPIO

Warnung

Dieser Konnektor wurde in dieverlängerte Lebensphase, undAWS IoT Greengrassveröffentlicht keine Updates, die Funktionen, Verbesserungen vorhandener Funktionen, Sicherheitspatches oder Fehlerbehebungen bieten. Weitere Informationen finden Sie unter AWS IoT Greengrass Version 1Wartungspolitik.

Der Raspberry Pi-GPIOAnschlusssteuert universell einsetzbare Input/Output (GPIO) -Pins auf einem Raspberry Pi-Core Gerät

Dieser Konnektor fragt Eingangspins in einem bestimmten Intervall ab und veröffentlicht Zustandsänderungen an MQTT-Themen. Es akzeptiert auch Lese- und Schreibanforderungen als MQTT-Nachrichten von benutzerdefinierten Lambda-Funktionen. Schreibanforderungen werden verwendet, um den Pin auf Hoch- oder Niederspannung zu setzen.

Der Konnektor stellt Parameter zur Verfügung, mit denen Sie Eingangs- und Ausgangspins definieren. Dieses Verhalten wird vor der Bereitstellung der Gruppe konfiguriert. Es kann während der Laufzeit nicht geändert werden.

  • Eingangspins können zum Empfangen von Daten von Peripheriegeräten verwendet werden.

  • Ausgangspins können zur Steuerung von Peripheriegeräten oder zum Senden von Daten an Peripheriegeräte verwendet werden.

Sie können diesen Konnektor für viele Szenarien verwenden, wie z. B.:

  • Steuerung der grünen, gelben und roten LED-Leuchten für eine Ampel.

  • Steuern eines Lüfters (mit einem elektrischen Relais verbunden) basierend auf Daten eines Feuchtigkeitssensors.

  • Alarmierung der Mitarbeiter in einem Einzelhandelsgeschäft auf Knopfdruck.

  • Verwendung eines intelligenten Lichtschalters zur Steuerung anderer IoT-Geräte.

Anmerkung

Dieser Konnektor ist nicht geeignet für Anwendungen, die Echtzeitanforderungen haben Ereignisse mit kurzer Dauer können verpasst werden.

Dieser Konnektor hat die folgenden Versionen.

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

Informationen über Versionsänderungen finden Sie im Änderungsprotokoll.

Voraussetzungen

Dieser Konnektor hat die folgenden Anforderungen:

Version 3
  • AWS IoT Greengrass Core-Software v1.9.3 oder höher.

  • PythonVersion 3.7 auf dem Core-Gerät installiert und der Umgebungsvariablen PATH hinzugefügt.

  • Raspberry Pi 4 Modell B oder Raspberry Pi 3 Modell B/B+. Sie müssen die PIN-Reihenfolge Ihres Raspberry Pi kennen. Weitere Informationen finden Sie unter GPIO-Pin-Sequenz.

  • EINlokale Geräteressourcein der Greengrass-Gruppe, die auf zeigt/dev/gpiomemauf dem Raspberry Pi. Wenn Sie die Ressource in der -Konsole erstellen, müssen Sie dasAutomatisch Betriebssystemgruppenberechtigungen der Linux-Gruppe hinzufügen, zu der die Ressource gehörtOption. Legen Sie in der API das festGroupOwnerSetting.AutoAddGroupOwnerEigentum zutrue.

  • Das Modul RPi.GPIO, das auf dem Raspberry Pi installiert ist. In Raspbian ist dieses Modul standardmäßig installiert. Mit dem folgenden Befehl können Sie es neu installieren:

    sudo pip install RPi.GPIO
Versions 1 - 2
  • AWS IoT GreengrassCore-Software v1.7 oder höher.

  • PythonVersion 2.7 auf dem Core-Gerät installiert und der Umgebungsvariablen PATH hinzugefügt.

  • Raspberry Pi 4 Modell B oder Raspberry Pi 3 Modell B/B+. Sie müssen die PIN-Reihenfolge Ihres Raspberry Pi kennen. Weitere Informationen finden Sie unter GPIO-Pin-Sequenz.

  • EINlokale Geräteressourcein der Greengrass-Gruppe, die auf zeigt/dev/gpiomemauf dem Raspberry Pi. Wenn Sie die Ressource in der -Konsole erstellen, müssen Sie dasAutomatisch Betriebssystemgruppenberechtigungen der Linux-Gruppe hinzufügen, zu der die Ressource gehörtOption. Legen Sie in der API das festGroupOwnerSetting.AutoAddGroupOwnerEigentum zutrue.

  • Das Modul RPi.GPIO, das auf dem Raspberry Pi installiert ist. In Raspbian ist dieses Modul standardmäßig installiert. Mit dem folgenden Befehl können Sie es neu installieren:

    sudo pip install RPi.GPIO

GPIO-Pin-Sequenz

Der Raspberry Pi GPIO-Anschluss referenziert GPIO-Pins anhand des Nummerierungsschemas des zugrundeliegenden System on Chip (SoC), nicht anhand des physischen Layouts der GPIO-Pins. Die physische Reihenfolge der Pins kann in Raspberry Pi-Versionen variieren. Weitere Informationen finden Sie unterGPIOin der Raspberry Pi-Dokumentation.

Der Konnektor kann nicht prüfen, ob die von Ihnen konfigurierten Ein- und Ausgangspins korrekt auf die zugrunde liegende Hardware Ihres Raspberry Pi passen. Wenn die Pin-Konfiguration ungültig ist, gibt der Konnektor einen Laufzeitfehler zurück, wenn er versucht, auf dem Gerät zu starten. Um dieses Problem zu beheben, konfigurieren Sie den Konnektor neu und stellen Sie ihn dann erneut bereit.

Anmerkung

Stellen Sie sicher, dass die Peripheriegeräte für GPIO-Pins richtig verdrahtet sind, um Schäden an den Komponenten zu vermeiden.

Connector-Parameter

Dieser Konnektor stellt die folgenden Parameter bereit:

InputGpios

Eine kommagetrennte Liste von GPIO-Pin-Nummern, die als Eingänge konfiguriert werden können. Optional können Sie U anfügen, um den Pull-up-Widerstand eines Pins einzustellen, oder D, um den Pull-down-Widerstand einzustellen. Beispiel: "5,6U,7D".

Anzeigename in derAWS IoT-Konsole Input GPIO Pins

Erforderlich?: false. Sie müssen Eingangspins, Ausgangspins oder beides angeben.

Typ: string

Gültiges Pattern:^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$

InputPollPeriod

Das Intervall (in Millisekunden) zwischen jedem Polling-Vorgang, das die Eingangs-GPIO-Pins auf Zustandsänderungen überprüft. Der minimale Wert beträgt 1.

Dieser Wert hängt von Ihrem Szenario und der Art der abgerufenen Geräte ab. Ein Wert von 50 sollte beispielsweise schnell genug sein, um einen Tastendruck zu erkennen.

Anzeigename in derAWS IoT-Konsole Input GPIO Abrufzeitraum?

Erforderlich?:false

Typ: string

Gültiges Pattern:^$|^[1-9][0-9]*$

OutputGpios

Eine kommagetrennte Liste von GPIO-Pin-Nummern, die als Ausgänge konfiguriert werden können. Optional kann H angefügt werden, um einen hohen Zustand (1) zu setzen, oder L, um einen niedrigen Zustand (0) einzustellen. Beispiel: "8H,9,27L".

Anzeigename in derAWS IoT-Konsole Output GPIO Pins

Erforderlich?: false. Sie müssen Eingangspins, Ausgangspins oder beides angeben.

Typ: string

Gültiges Pattern:^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$

GpioMem-ResourceId

Die ID der lokalen Geräteressource, die /dev/gpiomem repräsentiert.

Anmerkung

Dieser Konnektor hat Zugriff zum Lesen und Schreiben auf die Ressource.

Anzeigename in derAWS IoT-Konsole Ressource für /dev/gpiomem Gerät

Erforderlich?:true

Typ: string

Gültiges Pattern:.+

Beispiel für das Erstellen eines Konnektors (AWS CLI)

Der folgende -CLI-Befehl erstellt eineConnectorDefinitionmit einer Erstversion, die den Raspberry Pi-GPIO -Konnektor enthält.

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" } } ] }'
Anmerkung

Die Lambda-Funktion in diesem Konnektor hat einelanglebig-Lebenszyklus.

In derAWS IoT Greengrass-Konsole können Sie einen Connector aus demKonnektorenangezeigten. Weitere Informationen finden Sie unter Erste Schritte mit Greengrass-Konnektoren (Konsole).

Eingabedaten

Dieser Connector akzeptiert Lese- oder Schreibanforderungen für GPIO-Pins zu zwei MQTT-Themen.

  • Leseanforderungen zum Thema gpio/+/+/read.

  • Schreibanforderungen zum Thema gpio/+/+/write.

Um zu diesen Themen zu veröffentlichen, ersetzen Sie jeweils die Platzhalter + durch den Namen der Core-Objekte und die Nummer des Zielpins. Zum Beispiel:

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

Derzeit müssen Sie beim Erstellen eines Abonnements, das den Raspberry Pi-GPIO-Konnektor verwendet, einen Wert für mindestens einen der+-Platzhalter im Thema angeben.

Themenfilter: gpio/+/+/read

Verwenden Sie dieses Thema, um den Konnektor anzuweisen, den Zustand des GPIO-Pins zu lesen, der im Thema angegeben ist.

Der Konnektor veröffentlicht die Antwort zum entsprechenden Ausgabethema (z. B. gpio/core-thing-name/gpio-number/state).

Nachrichten-Eigenschaften

Keine. Nachrichten, die an dieses Thema gesendet werden, werden ignoriert.

Themenfilter: gpio/+/+/write

Verwenden Sie dieses Thema, um Schreibanfragen an einen GPIO-Pin zu senden. Dadurch wird der Konnektor angewiesen, den GPIO-Pin, der im Thema angegeben ist, auf eine Nieder- oder Hochspannung einzustellen.

  • 0 setzt den Pin auf Niederspannung.

  • 1 setzt den Pin auf Hochspannung.

Der Konnektor veröffentlicht die Antwort zum entsprechenden /state-Thema (z. B. gpio/core-thing-name/gpio-number/state).

Nachrichten-Eigenschaften

Der Wert 0 oder 1 als ganze Zahl oder Zeichenkette.

Beispieleingabe
0

Ausgabedaten

Dieser Konnektor veröffentlicht Daten zu zwei Themen:

  • Hohe oder niedrige Zustandsänderungen im Thema gpio/+/+/state.

  • Fehler im Thema gpio/+/error.

Themenfilter: gpio/+/+/state

Verwenden Sie dieses Thema, um auf Zustandsänderungen an den Eingangspins und Antworten auf Leseanforderungen zu warten. Der Konnektor gibt die Zeichenkette "0" zurück, wenn sich der Pin in einem niedrigen Zustand befindet, oder "1", wenn er sich in einem hohen Zustand befindet.

Bei der Veröffentlichung zu diesem Thema ersetzt der Konnektor die Platzhalter + durch den Namen des Core-Objekts bzw. den Zielpin. Zum Beispiel:

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

Derzeit müssen Sie beim Erstellen eines Abonnements, das den Raspberry Pi-GPIO-Konnektor verwendet, einen Wert für mindestens einen der+-Platzhalter im Thema angeben.

Beispielausgabe
0
Themenfilter: gpio/+/error

Verwenden Sie dieses Thema, um nach Fehlern zu suchen. Der Konnektor veröffentlicht zu diesem Thema aufgrund einer ungültigen Anforderung, (z. B., wenn eine Zustandsänderung an einem Eingangspin angefordert wird).

Bei der Veröffentlichung zu diesem Thema ersetzt der Konnektor den Platzhalter + durch den Namen des Core-Objekts.

Beispielausgabe
{ "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." }

Verwendungsbeispiel

Führen Sie die folgenden allgemeinen Schritte aus, um eine Python 3.7—Lambda—Beispielfunktion einzurichten, mit der Sie den Konnektor ausprobieren können.

Anmerkung
  1. Stellen Sie sicher, dass Sie die Anforderungen für den Konnektor erfüllen.

  2. Erstellen und veröffentlichen Sie eine Lambda-Funktion, die Eingabedaten an den Konnektor sendet.

    Speichern Sie den Beispielcode als PY-Datei. Downloaden und entpacken Sie dasAWS IoT GreengrassCore-SDK für Python. Erstellen Sie dann ein ZIP-Paket, das die PY-Datei und den Ordner greengrasssdk auf Stammebene enthält. Dieses ZIP-Paket ist das Bereitstellungspaket, das Sie auf hochladen.AWS Lambda.

    Nachdem Sie die Python 3.7—Lambda-Funktion erstellt haben, veröffentlichen Sie eine Funktionsversion und erstellen Sie einen Alias.

  3. Konfigurieren Sie Ihre Greengrass-Gruppe.

    1. Fügen Sie die Lambda-Funktion über ihren Alias hinzu (empfohlen). Konfiguration des Lambda-Lebenszyklus als langlebig (oder"Pinned": truein der CLI).

    2. Fügen Sie die erforderliche lokale Geräteressource hinzu und gewähren Sie Lese-/Schreibzugriff auf die Lambda-Funktion.

    3. Fügen Sie den Konnektor hinzu und konfigurieren Sie seine Parameter.

    4. Fügen Sie Abonnements hinzu, die es dem Konnektor ermöglichen, Eingabedaten zu empfangen und Ausgabedaten zu unterstützten Themenfiltern zu senden.

      • Legen Sie die Lambda-Funktion als Quelle und den Konnektor als Ziel fest und verwenden Sie einen unterstützten Eingabethemenfilter.

      • Legen Sie den Konnektor als Quelle und AWS IoT Core als Ziel fest und verwenden Sie einen unterstützten Ausgabethemenfilter. Sie verwenden dieses Abonnement zum Anzeigen von Statusmeldungen in derAWS IoTconsole.

  4. Stellen Sie die Gruppe bereit.

  5. In derAWS IoT-Konsole auf derTestdas Thema Ausgabedaten abonnieren, um Statusmeldungen vom Connector anzuzeigen. Die -Beispielfunktion Lambda ist langlebig und beginnt sofort nach der Bereitstellung der Gruppe mit dem Senden von Nachrichten.

    Wenn Sie mit dem Testen fertig sind, können Sie den Lambda-Lebenszyklus auf On-Demand (oder"Pinned": falsein der CLI) und stellen Sie die Gruppe bereit. Dadurch wird verhindert, dass die Funktion Nachrichten sendet.

Beispiel

Die folgende Lambda-Beispielfunktion sendet eine Input-Nachricht an den Konnektor. Dieses Beispiel sendet Leseanforderungen für einen Satz von Input-GPIO-Pins. Es zeigt, wie Sie Themen mit dem Namen des Core-Objekts und der PIN-Nummer erstellen.

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

Lizenzen

Der Raspberry PiO; -Konnektor enthält die folgende Drittanbieter-Software/Lizenz:

Dieser Connector wird unter demLizenzvereinbarung für die Greengrass Core-Software.

Änderungsprotokoll

In der folgenden Tabelle werden die Änderungen in jeder Version des Konnektors für beschrieben.

Version

Änderungen

3

Die Lambda-Laufzeitumgebung auf Python 3.7 aktualisiert, wodurch sich die Laufzeitanforderung ändert.

2

Konnektor-ARN für aktualisiertAWS-Region-Unterstützung.

1

Erstversion.

Eine Greengrass-Gruppe kann nur jeweils eine Version des Konnektors enthalten. Weitere Informationen zum Aktualisieren einer Konnektorversion finden Sie unter Aktualisieren von Konnektorversionen.

Weitere Informationen finden Sie auch unter