- De AWS IOT Device SDK voor Python op Raspberry Pi installeren:
- Schakelschema:
- Programmering van uw Raspberry Pi:
- Het python-programma testen via Shell Window:
- Werken:
Raspberry Pi is altijd de eerste keuze geweest voor het ontwikkelen van op IoT gebaseerde applicaties als er een bepaald rekenniveau bij betrokken is. Met de flexibiliteit van Python en een sterke ontwikkelaarsgemeenschap is het heel gemakkelijk om een set gegevens te verzamelen, loggen, analyseren of rapporteren met behulp van de Pi. In deze tutorial zullen we leren hoe we de kracht van Raspberry Pi kunnen combineren met de Amazon AWS-service om gegevens online op internet te publiceren.
In deze zelfstudie zullen we de DHT11-sensor gebruiken om de waarde van temperatuur en vochtigheid te lezen, vervolgens verbinding maken met de AWS IOT-service en de sensorwaarden bijwerken met behulp van de AWS IOT SDK. Deze gegevens kunnen vervolgens worden gevisualiseerd in de Amazon IOT-console om ervoor te zorgen dat we de gegevens op internet publiceren.
U kunt ook de AWS Elastic Search Service gebruiken om deze sensorwaarden op te halen en in een database op te slaan en vervolgens de Kibana Dashboard- service gebruiken om de sensorgegevens te visualiseren als een nette geplotte grafiek. Interessant genoeg? !!! Dus, laten we beginnen…
Voorwaarden:
In deze tutorial wordt ervan uitgegaan dat u al een gratis AWS-account hebt gemaakt en de basisprincipes van de AWS IoT-service kent, zoals het maken van een ding, certificaat, beleid en het publiceren van waarden met behulp hiervan. Lees anders de onderstaande tutorial.
- Aan de slag met Amazon AWS IOT met MQTT.fx
Het veronderstelt ook dat u weet hoe u een LCD- en DHT11-sensor met Raspberry Pi moet verbinden en dat de bibliotheken om hetzelfde te doen al op uw Pi zijn geïnstalleerd. Als dit niet het geval is, gaat u verder met de onderstaande zelfstudie.
- Koppeling van DHT11 met Raspberry Pi
Aan het einde van de bovenstaande tutorial zou je iets op AWS-IOT hebben gemaakt en je zou ook het makelaaradres voor je ding moeten hebben, samen met de certificaten die nodig zijn om toegang te krijgen tot je ding. We gaan er ook van uit dat je Raspberry pi al is ingesteld met een besturingssysteem en verbinding heeft met internet. Nu deze op hun plaats zijn, gaan we verder met de zelfstudie. Als Raspberry Pi nieuw voor je is, ga dan eerst door Aan de slag met Raspberry Pi.
De AWS IOT Device SDK voor Python op Raspberry Pi installeren:
Om de AWS-service op Pi te gebruiken, kunnen we een van de twee SDK's installeren. Een daarvan is de JavaScript-SDK die JavaScript als programmeertaal gebruikt en de andere is de Python-SDK die uiteraard de python als programmeertaal gebruikt. Hier kiezen we de Python als onze SDK, omdat we wat meer vertrouwd zijn met Python dan met JavaScript.
De volledige informatie over AWS IOT SDK is beschikbaar op de GitHub-pagina.
Stap 1: Om de SDK op uw Pi te installeren, opent u de terminal door de volgende opdracht te typen
git clone
Stap 2: Dit zou de aws- map op je Pi moeten hebben geïnstalleerd, navigeer er nu naar met de volgende opdracht.
cd aws - iot -device- sdk -python
Stap 3: Installeer in de directory het setup-bestand met behulp van de onderstaande regel
python setup.py installeren
Schakelschema:
Aan de hardwarezijde hebben we een Raspberry Pi aangesloten op een DHT11-sensor en een LCD-scherm. De DHT11 wordt gebruikt om de waarde van temperatuur en vochtigheid te krijgen en LCD wordt gebruikt om de waarden weer te geven en informatie te verwijderen. Het schakelschema voor hetzelfde wordt hieronder getoond.
Zowel de LCD- als de DHT11-sensor werken met + 5V-voeding, dus we gebruiken de 5V-pinnen op de Raspberry Pi om beide van stroom te voorzien. Een pull-up weerstand van waarde 1k wordt gebruikt op de output pin van de DHT11 sensor, als je een module gebruikt kun je deze weerstand vermijden.
Een trimmerpot van 10k is toegevoegd aan de Vee-pin van het LCD-scherm om het contrastniveau van het LCD-scherm te regelen. Verder zijn alle verbindingen vrij ongecompliceerd. Maar noteer welke GPIO-pinnen u gebruikt om de pinnen aan te sluiten, aangezien we deze nodig hebben in ons programma. De onderstaande tabel zou u in staat moeten stellen om de GPIO-pincodes te achterhalen.
Gebruik het schema en maak uw aansluitingen volgens het schakelschema. Ik heb een breadboard en jumperdraden gebruikt om mijn verbindingen te maken. Omdat ik een module heb gebruikt, heb ik deze rechtstreeks op Raspberry Pi aangesloten. Mijn hardware zag er hieronder als volgt uit
Programmering van uw Raspberry Pi:
In ons python-programma moeten we de waarde van temperatuur en vochtigheid lezen, deze op het LCD-scherm weergeven en ook beide waarden publiceren naar het Amazon IOT-ding dat we al in de vorige tutorial hebben gemaakt. Zorg er dus voor dat je het ding hebt gemaakt en dat je alle drie de belangrijkste bestanden hebt en het makelaaradres van het ding dat je hebt gemaakt.
In ons python-programma moeten we de drie sleutelbestanden koppelen, zodat Raspberry Pi toegang kan krijgen om waarden over ons ding te publiceren. Kopieer dus alle drie de belangrijkste bestanden en plak deze op het bureaublad van uw Raspberry pi, aangezien we hun padadres nodig hebben in ons programma.
Het volledige python-programma is te vinden onderaan deze pagina, je kunt het programma gebruiken na het bewerken van het makelaaradres en de padmappen volgens het item dat je hebt gemaakt. Verder hieronder heb ik de code in kleine fragmenten uitgelegd.
We beginnen met het importeren van de bibliotheken die nodig zijn voor ons project. De drie belangrijkste bibliotheken zijn AWS SDK, LCD-bibliotheek en DHT-bibliotheek, zorg ervoor dat u alle drie uw Pi hebt geïnstalleerd. De tijd- en datetime- bibliotheek wordt standaard geïnstalleerd.
van AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient #Import from AWS-IoT Library import time # Om vertraging te creëren vanaf datetime import date, datetime #Om datum en tijd te importeren Adafruit_CharLCD als LCD #Import LCD library import Adafruit_DHT #Import DHT Library for sensor
In de volgende regel moeten we de Thing-details opgeven, zoals het adres van de makelaar, de naam van de klant en het pad naar het certificaat en de sleutelbestanden. Hier heb ik de clientnaam gebruikt als new_Client, je kunt dezelfde of een andere naam naar keuze gebruiken. Het makelaar-adres moet worden gewijzigd in het adres van het ding dat u hebt gemaakt en de padmap moet ook worden gewijzigd in overeenstemming met uw ding. Behalve deze 2 dingen hoef je in de volgende regels niets te veranderen.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883 ) myMQTTClient.configureCredentials ("/ home / pi / Desktop" / ESP32-certificaten, "/ home / pi / Desktop / ESP32_Thing-certificaten / private.pem.key", "/ home / pi / Desktop / ESP32_Thing-certificaten / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Oneindige offline publiceer in de wachtrij myMQTTClient. configureDrainingFrequency (2) # Draining : 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec
Vervolgens moeten we de pindetails van onze verbinding specificeren. Het GPIO-pinnummer van elke pin wordt toegewezen aan de respectievelijke naam. Hier hebben we de DHT-sensor op pin 17 en LCD in 4-bits modus gebruikt. De code voor hetzelfde wordt hieronder weergegeven
sensor_name = Adafruit_DHT.DHT11 #we gebruiken de DHT11 sensor sensor_pin = 17 #De sensor is verbonden met GPIO17 op Pi lcd_rs = 7 #RS van LCD is verbonden met GPIO 7 op PI lcd_en = 8 #EN van LCD is verbonden met GPIO 8 op PI lcd_d4 = 25 # D4 van LCD is verbonden met GPIO 25 op PI lcd_d5 = 24 # D5 van LCD is verbonden met GPIO 24 op PI lcd_d6 = 23 # D6 van LCD is verbonden met GPIO 23 op PI lcd_d7 = 18 # D7 van LCD is verbonden met GPIO 18 op PI lcd_backlight = 0 #LED is niet aangesloten, dus wijzen we toe op 0
Vervolgens initialiseren we het LCD-scherm en geven we een klein introbericht op het LCD-scherm weer. Daarna zullen we proberen verbinding te maken met het AWS-ding met behulp van het makelaaradres en de sleutelbestanden die hierboven zijn ingevoerd. Als de verbinding is gelukt, zal het LCD-scherm " Connected to AWS thing " weergeven of het zal het 10 seconden proberen en als het mislukt, zal het een foutbericht weergeven. Als je een foutmelding krijgt, zorg er dan voor dat je het ding met succes hebt aangemaakt en het correct aan de code hebt gekoppeld. Je kunt altijd teruggaan naar de vorige tutorial om te zien of je het ding correct hebt gemaakt in AWS.
if time.time () <connection_time: #try gedurende 10 seconden verbinding te maken met AWS myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) print "MQTT Client connection success!" lcd.message ('Verbonden met \ n AWS-ding') #indien anders verbonden : print 'Fout: controleer uw AWS-details in het programma' lcd.message ('Fout: \ nInvalid details') #indien niet verbonden
Zodra de verbinding tot stand is gebracht, gaan we de oneindige while- lus binnen om de waarde van tijd, temperatuur en vochtigheid als een payload te publiceren. De payload hier moet altijd een tekenreeks in JSON-indeling zijn. Dus eerst zijn we door de huidige datum en tijd te lezen en deze op te slaan in een variabele door de onderstaande regels te gebruiken
now = datetime.utcnow () # verkrijg de datum en tijd current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # verkrijg de huidige tijd in string-formaat
Vervolgens lezen we de vochtigheids- en temperatuurwaarden van de DHT11-sensor en geven deze weer op een LCD-scherm. De variabele vochtigheid en temperatuur houden de waarde van respectievelijk vochtigheid en temperatuur vast
vochtigheid, temperatuur = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #lezen van sensor
en sla de respectieve waarden op in temperatuur- en vochtigheidsvariabelen
lcd.clear () #Clear the LCD screen lcd.message ('Temp =%.1f C'% temperature) # Geef de waarde van temperatuur lcd.message ('\ nHum =%.1f %%'% vochtigheid) #Display de waarde van Vochtigheid time.sleep (2) #Wacht 2 sec en werk dan de waarden bij
Zoals eerder verteld, zou de payload de vorm moeten hebben van een string met accolades eromheen, we voegen de waarde van datum, tijd, temperatuur en vochtigheid toe na het omzetten van de variabele in strings zoals hieronder getoond.
#prepare the payload in string format payload = '{"timestamp": "' + current_time + '", "temperature":' + str (temperatuur) + ', "vochtigheid":' + str (vochtigheid) + '}'
Als de payload eindelijk klaar is, moeten we deze publiceren naar de MQTT-client. Dit kan gedaan worden met de opdracht myMQTTclient.publish . Bij het publiceren naar iets moeten we het ook een naam geven, hier heb ik het DHT11 / data genoemd, maar je kunt het alles noemen wat je maar wilt. Maar zorg ervoor dat u de naam onthoudt, want we zullen ons bij ons ding moeten abonneren om de gegevens te bekijken.
Het python-programma testen via Shell Window:
Zodra het programma klaar is, start u het met uw keuze. Ik heb de Python IDE gebruikt om het programma in het shell-venster te starten. Als alles in orde is, zou je een succesvolle berichtverbinding moeten krijgen en zou alle payload in het venster moeten worden weergegeven. U kunt controleren of de waarden van temperatuur en vochtigheid correct worden afgelezen. De payload wordt elke 5 seconden bijgewerkt. Het shell-venster ziet er hieronder ongeveer zo uit
Als je een probleem hebt, zorg er dan voor dat je de juiste sleuteldetails en het adres van de makelaar hebt opgegeven, controleer ook of het ding kan worden verbonden met de MQTT.fx-software. Als de shell het succes van de MQTT Client-verbinding weergeeft en daar blijft hangen, betekent dit dat de DHT11-sensor niet reageert, controleer of je de juiste pin hebt aangesloten en of de sensor functioneel is.
Werken:
Zodra u het programma start en de bovenstaande details in het shell-venster krijgt, betekent dit dat het programma correct reageert en dat de waarden worden geüpload naar de Amazon AWS-server. U kunt ook het LCD-scherm zien om te controleren of er elke 5 seconden Gepubliceerd naar AWS-IoT staat, zoals hieronder wordt weergegeven.
We kunnen in de MQTT.fx-applicatie komen en ons abonneren op het onderwerp DHT11 / data . Dan zouden we alle gegevens moeten kunnen krijgen die door de Raspberry Pi worden gepubliceerd. Deze gegevens worden ook elke 5 seconden bijgewerkt; uw MQTT-scherm ziet er hieronder ongeveer zo uit
Zoals u kunt zien, wordt de payload ontvangen op de MQTT-software, zoals aangegeven in blauw. Je kunt ook de onderstaande video bekijken om te zien hoe het project werkt. Sinds we onze gegevens op internet hebben, kunnen we deze gebruiken met andere tools van Amazon zoals Elastic search en Lambda om de gegevens in een database op te slaan of ze vervolgens in een grafiek te visualiseren. Er zijn veel meer toepassingen, afhankelijk van hoe we moeten profiteren van de gegevens.
Ik hoop dat je de tutorial hebt begrepen en het leuk vond om iets soortgelijks te bouwen, als je een probleem hebt om dit voor elkaar te krijgen, plaats het dan in het commentaargedeelte hieronder of gebruik de forums voor technische hulp.