- Installieren des AWS IOT Device SDK für Python auf Raspberry Pi:
- Schaltplan:
- Programmieren Ihres Raspberry Pi:
- Testen des Python-Programms über das Shell-Fenster:
- Arbeiten:
Raspberry Pi war schon immer die erste Wahl für die Entwicklung von IoT-basierten Anwendungen, wenn ein gewisses Maß an Berechnung erforderlich ist. Mit der Flexibilität von Python und einer starken Entwicklergemeinschaft ist es sehr einfach, mithilfe des Pi einen Datensatz zu sammeln, zu protokollieren, zu analysieren oder zu melden. In diesem Tutorial erfahren Sie, wie Sie die Leistung von Raspberry Pi mit dem Amazon AWS-Dienst kombinieren, um Daten online im Internet zu veröffentlichen.
In diesem Lernprogramm verwenden wir den DHT11-Sensor, um den Wert von Temperatur und Luftfeuchtigkeit zu lesen, stellen dann eine Verbindung zum AWS IOT-Dienst her und aktualisieren die Sensorwerte mithilfe des AWS IOT SDK. Diese Daten können dann in der Amazon IOT-Konsole visualisiert werden, um sicherzustellen, dass die Daten im Internet veröffentlicht werden.
Sie können den AWS Elastic Search Service auch verwenden, um diese Sensorwerte abzurufen und in einer Datenbank zu speichern. Anschließend können Sie die Sensordaten mithilfe des Kibana Dashboard- Dienstes als übersichtliches Diagramm anzeigen. Interessant genug? !!! Also, fangen wir an…
Voraussetzungen:
In diesem Lernprogramm wird davon ausgegangen, dass Sie bereits Ihr kostenloses AWS-Konto erstellt haben und die Grundlagen des AWS IoT-Dienstes kennen, z. B. das Erstellen einer Sache, eines Zertifikats, einer Richtlinie und das Veröffentlichen von Werten damit. Wenn nicht, lesen Sie das folgende Tutorial.
- Erste Schritte mit Amazon AWS IOT mit MQTT.fx
Es wird auch davon ausgegangen, dass Sie wissen, wie Sie einen LCD- und DHT11-Sensor an Raspberry Pi anschließen, und dass die Bibliotheken dafür bereits auf Ihrem Pi installiert sind. Wenn nicht, fahren Sie mit dem folgenden Tutorial fort.
- Schnittstelle zwischen DHT11 und Raspberry Pi
Am Ende des obigen Tutorials hätten Sie eine Sache auf AWS-IOT erstellt und Sie sollten auch die Brokeradresse für Ihre Sache zusammen mit den Zertifikaten haben, die für den Zugriff auf Ihre Sache erforderlich sind. Wir gehen auch davon aus, dass Ihr Raspberry Pi bereits mit einem Betriebssystem eingerichtet und mit dem Internet verbunden ist. Wenn diese vorhanden sind, fahren wir mit dem Tutorial fort. Wenn Sie Raspberry Pi noch nicht kennen, lesen Sie zuerst Erste Schritte mit Raspberry Pi.
Installieren des AWS IOT Device SDK für Python auf Raspberry Pi:
Um den AWS-Service auf Pi zu verwenden, können wir eines der beiden SDKs installieren. Eines ist das JavaScript SDK, das JavaScript als Programmiersprache verwendet, und das andere ist das Python SDK, das offensichtlich Python als Programmiersprache verwendet. Hier wählen wir Python als unser SDK, da wir mit Python etwas besser vertraut sind als mit JavaScript.
Die vollständigen Informationen zum AWS IOT SDK finden Sie auf seiner GitHub-Seite.
Schritt 1: Um das SDK auf Ihrem Pi zu installieren, öffnen Sie das Terminal, indem Sie den folgenden Befehl eingeben
Git-Klon
Schritt 2: Dies sollte das aws- Verzeichnis auf Ihrem Pi installiert haben. Navigieren Sie nun mit dem folgenden Befehl hinein.
cd aws - iot -device- sdk -python
Schritt 3: Installieren Sie die Setup-Datei im Verzeichnis mithilfe der folgenden Zeile
python setup.py installieren
Schaltplan:
Auf der Hardwareseite haben wir einen Raspberry Pi, der an einen DHT11-Sensor und einen LCD-Bildschirm angeschlossen ist. Der DHT11 wird verwendet, um den Wert von Temperatur und Luftfeuchtigkeit abzurufen, und der LCD wird verwendet, um die Werte und die Fehlerbehebungsinformationen anzuzeigen. Das Schaltbild dafür ist unten dargestellt.
Sowohl der LCD- als auch der DHT11-Sensor arbeiten mit einer + 5V-Versorgung, daher verwenden wir die 5V-Pins am Raspberry Pi, um beide mit Strom zu versorgen. Am Ausgangspin des DHT11-Sensors wird ein Pull-up-Widerstand mit dem Wert 1k verwendet. Wenn Sie ein Modul verwenden, können Sie diesen Widerstand vermeiden.
Ein Trimmer-Topf von 10k wird zum V-Pin des LCD hinzugefügt, um den Kontrastpegel des LCD zu steuern. Ansonsten sind alle Verbindungen ziemlich einfach. Notieren Sie sich jedoch, welche GPIO-Pins Sie zum Verbinden der Pins verwenden, da diese in unserem Programm benötigt werden. Die folgende Tabelle sollte es Ihnen ermöglichen, die GPIO-Pin-Nummern herauszufinden.
Verwenden Sie die Tabelle und stellen Sie Ihre Verbindungen gemäß dem Schaltplan her. Ich habe ein Steckbrett und Überbrückungskabel verwendet, um meine Verbindungen herzustellen. Da ich ein Modul verwendet habe, habe ich es direkt mit Raspberry Pi verbunden. Meine Hardware sah unten so aus
Programmieren Ihres Raspberry Pi:
In unserem Python-Programm müssen wir den Wert von Temperatur und Luftfeuchtigkeit lesen, auf dem LCD-Bildschirm anzeigen und beide Werte auf dem Amazon IOT-Objekt veröffentlichen, das wir bereits im vorherigen Tutorial erstellt haben. Stellen Sie also sicher, dass Sie das Objekt erstellt haben und alle drei Schlüsseldateien und die Brokeradresse des von Ihnen erstellten Objekts haben.
In unserem Python-Programm müssen wir die drei Schlüsseldateien verknüpfen, damit Raspberry Pi Zugriff auf die Veröffentlichung von Werten für unser Ding erhält. Kopieren Sie also alle drei Schlüsseldateien und fügen Sie sie auf dem Desktop Ihres Raspberry Pi ein, da wir deren Pfadadresse in unserem Programm benötigen.
Das vollständige Python-Programm finden Sie unten auf dieser Seite. Sie können das Programm verwenden, nachdem Sie die Brokeradressen- und Pfadverzeichnisse entsprechend dem von Ihnen erstellten Objekt bearbeitet haben. Weiter unten habe ich den Code in kleinen Ausschnitten erklärt.
Wir importieren zunächst die für unser Projekt erforderlichen Bibliotheken. Die drei Hauptbibliotheken sind AWS SDK, LCD-Bibliothek und DHT-Bibliothek. Stellen Sie sicher, dass Sie alle drei Pi installiert haben. Die Zeit- und Datums- / Uhrzeitbibliothek wird standardmäßig installiert.
von AWSIoTPythonSDK.MQTTLib Import AWSIoTMQTTClient # Import von AWS-IoT - Bibliothek importiert Zeit # So erstellen Verzögerung von Datetime - Importdatum, Datumzeit #Um Datum und Uhrzeit erhält Import Adafruit_CharLCD als LCD #import LCD Bibliothek Import Adafruit_DHT #import DHT - Bibliothek für Sensor
In der nächsten Zeile müssen wir die Thing-Details wie Broker-Adresse, Client-Name und Pfad zu den Zertifikat- und Schlüsseldateien angeben. Hier habe ich den Client-Namen als new_Client verwendet. Sie können denselben oder einen beliebigen Namen Ihrer Wahl verwenden. Die Brokeradresse sollte in die Adresse des von Ihnen erstellten Objekts geändert werden, und das Pfadverzeichnis sollte ebenfalls entsprechend Ihrem Objekt geändert werden. Abgesehen von diesen beiden Dingen müssen Sie in den folgenden Zeilen nichts ändern.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desktop / ES32" "/ home / pi / Desktop / ESP32_Thing-Zertifikate / private.pem.key", "/ home / pi / Desktop / ESP32_Thing-Zertifikate / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Unendlich offline Veröffentlichen Sie die Warteschlange myMQTTClient. configureDrainingFrequency (2) # Draining: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 Sek. myMQTTClient.configureMQTTOperationTimeout (5) # 5 Sek
Als nächstes müssen wir die Pin-Details unserer Verbindung angeben. Die GPIO-Pin-Nummer jedes Pins wird seinem jeweiligen Namen zugewiesen. Hier haben wir den DHT-Sensor an Pin 17 und LCD im 4-Bit-Modus verwendet. Der Code dafür ist unten gezeigt
sensor_name = Adafruit_DHT.DHT11 # wir verwenden den DHT11-Sensor sensor_pin = 17 #Der Sensor ist mit GPIO17 auf Pi verbunden lcd_rs = 7 #RS des LCD ist mit GPIO 7 auf PI verbunden lcd_de = 8 #EN des LCD ist mit GPIO 8 verbunden auf PI lcd_d4 = 25 # D4 des LCD ist mit GPIO 25 verbunden auf PI lcd_d5 = 24 # D5 des LCD ist mit GPIO 24 verbunden auf PI lcd_d6 = 23 # D6 des LCD ist mit GPIO 23 auf PI lcd_d7 = 18 # D7 von verbunden Das LCD ist mit dem GPIO 18 auf PI verbunden. Lcd_backlight = 0 #LED ist nicht angeschlossen, daher weisen wir 0 zu
Dann initialisieren wir das LCD und zeigen eine kleine Intro-Meldung auf dem LCD-Bildschirm an. Danach werden wir versuchen, über die oben eingegebene Brokeradresse und die Schlüsseldateien eine Verbindung mit dem AWS-Objekt herzustellen. Wenn die Verbindung erfolgreich hergestellt wurde, zeigt das LCD " Mit AWS verbunden " an oder versucht es 10 Sekunden lang. Wenn dies fehlschlägt, wird eine Fehlermeldung angezeigt. Wenn Sie eine Fehlermeldung erhalten, stellen Sie sicher, dass Sie das Objekt erfolgreich erstellt und ordnungsgemäß mit dem Code verknüpft haben. Sie können jederzeit zum vorherigen Lernprogramm zurückkehren, um festzustellen, ob Sie das Objekt in AWS ordnungsgemäß erstellt haben.
if time.time () <Verbindungszeit: #Versuchen Sie, 10 Sekunden lang eine Verbindung zu AWS herzustellen. myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "verbunden", 0) drucken Sie "MQTT-Client-Verbindungserfolg!" lcd.message ('Verbunden mit \ n AWS-Ding') #wenn verbunden sonst: print "Fehler: Überprüfen Sie Ihre AWS-Details im Programm" lcd.message ('Fehler: \ nUngültige Details') #wenn nicht verbunden
Sobald die Verbindung erfolgreich hergestellt wird, treten wir in die unendliche während Schleife den Wert der Zeit, Temperatur und Feuchtigkeit als Nutzlast zu veröffentlichen. Die Nutzdaten sollten hier immer eine Zeichenfolge im JSON-Format sein. Zuerst lesen wir das aktuelle Datum und die aktuelle Uhrzeit und speichern sie in einer Variablen, indem wir die folgenden Zeilen verwenden
now = datetime.utcnow () # Datum und Uhrzeit abrufen current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # aktuelle Zeit im Zeichenfolgenformat abrufen
Dann lesen wir die Feuchtigkeits- und Temperaturwerte des DHT11-Sensors und zeigen sie auf einem LCD-Bildschirm an. Die variable Luftfeuchtigkeit und Temperatur halten den Wert der Luftfeuchtigkeit bzw. Temperatur
Luftfeuchtigkeit, Temperatur = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read from sensor
und speichern Sie die entsprechenden Werte in Temperatur und Luftfeuchtigkeit
lcd.clear () #Löschen Sie den LCD-Bildschirm lcd.message ('Temp =%.1f C'% Temperatur) # Zeigen Sie den Wert der Temperatur an lcd.message ('\ nHum =%.1f %%'% Luftfeuchtigkeit) #Display Der Wert für Luftfeuchtigkeit time.sleep (2) #Warten Sie 2 Sekunden lang und aktualisieren Sie dann die Werte
Wie bereits erwähnt, sollte die Nutzlast in Form einer Zeichenfolge mit geschweiften Klammern vorliegen. Nach dem Konvertieren der Variablen in Zeichenfolgen wie unten gezeigt wird der Wert für Datum, Uhrzeit, Temperatur und Luftfeuchtigkeit angehängt.
# Bereiten Sie die Nutzdaten im Zeichenfolgenformat vor. payload = '{"timestamp": "' + current_time + '", "temperatur":' + str (Temperatur) + ', "Luftfeuchtigkeit":' + str (Luftfeuchtigkeit) + '}'
Sobald die Nutzdaten fertig sind, müssen wir sie auf dem MQTT-Client veröffentlichen. Dies kann mit dem Befehl myMQTTclient.publish erfolgen . Während wir eine Sache veröffentlichen, sollten wir ihr auch einen Namen geben. Hier habe ich sie DHT11 / data genannt, aber Sie können sie beliebig benennen. Aber stellen Sie sicher, dass Sie sich an den Namen erinnern, da wir unser Ding abonnieren müssen, um die Daten anzuzeigen.
Testen des Python-Programms über das Shell-Fenster:
Sobald das Programm fertig ist, starten Sie es nach Ihrer Wahl. Ich habe die Python-IDE verwendet, um das Programm im Shell-Fenster zu starten. Wenn alles in Ordnung ist, sollten Sie eine erfolgreiche Nachrichtenverbindung erhalten und alle Nutzdaten sollten im Fenster angezeigt werden. Sie können überprüfen, ob die Werte für Temperatur und Luftfeuchtigkeit korrekt abgelesen werden. Die Nutzdaten werden alle 5 Sekunden aktualisiert. Das Shell-Fenster sieht ungefähr so aus
Wenn Sie Probleme haben, stellen Sie sicher, dass Sie die richtigen Schlüsseldetails und die Brokeradresse angegeben haben. Überprüfen Sie auch, ob das Gerät mit der Software MQTT.fx verbunden werden kann. Wenn die Shell den Erfolg der MQTT-Client-Verbindung anzeigt und dort hängt, reagiert der DHT11-Sensor nicht. Überprüfen Sie, ob Sie eine Verbindung zum richtigen Pin hergestellt haben und der Sensor funktionsfähig ist.
Arbeiten:
Sobald Sie das Programm starten und die obigen Details im Shell-Fenster erhalten, bedeutet dies, dass das Programm ordnungsgemäß reagiert und die Werte auf den Amazon AWS-Server hochgeladen werden. Sie können auch auf dem LCD-Display feststellen, ob alle 5 Sekunden die Meldung "Veröffentlicht in AWS-IoT" angezeigt wird (siehe Abbildung unten).
Wir können in die Anwendung MQTT.fx einsteigen und das Thema DHT11 / Daten abonnieren. Dann sollten wir in der Lage sein, alle Daten abzurufen, die vom Raspberry Pi veröffentlicht werden. Diese Daten werden auch alle 5 Sekunden aktualisiert. Ihr MQTT-Bildschirm sieht unten ungefähr so aus
Wie Sie sehen können, werden die Nutzdaten in der MQTT-Software empfangen, wie blau hervorgehoben. Sie können sich auch das folgende Video ansehen, um zu erfahren, wie das Projekt funktioniert. Da wir unsere Daten jetzt im Internet haben, können wir sie mit anderen von Amazon bereitgestellten Tools wie Elastic Search und Lambda verwenden, um die Daten in einer Datenbank zu speichern oder sie dann in einem Diagramm zu visualisieren. Es gibt viel mehr Anwendungen, je nachdem, wie wir von den Daten profitieren müssen.
Ich hoffe, Sie haben das Tutorial verstanden und es genossen, etwas Ähnliches zu erstellen. Wenn Sie Probleme damit haben, veröffentlichen Sie es im Kommentarbereich unten oder nutzen Sie die Foren für technische Hilfe.