- Installera AWS IOT-enhetens SDK för Python på Raspberry Pi:
- Kretsschema:
- Programmering av din Raspberry Pi:
- Testa pythonprogrammet genom Shell Window:
- Arbetssätt:
Raspberry Pi har alltid varit det första valet för att utveckla IoT-baserade applikationer om någon beräkningsnivå är inblandad. Med flexibiliteten hos python och den starka utvecklargemenskapen är det mycket enkelt att samla in, logga, analysera eller rapportera en uppsättning data med Pi. I den här handledningen kommer vi att lära oss att blanda in kraften i Raspberry Pi med Amazon AWS-tjänsten för att publicera data online till Internet.
I den här handledningen kommer vi att använda DHT11-sensorn för att läsa av temperaturen och luftfuktigheten, sedan ansluta till AWS IOT-tjänsten och uppdatera sensorvärdena med AWS IOT SDK. Dessa data kan sedan visualiseras i Amazon IOT-konsolen för att se till att vi får informationen publicerad på internet.
Du kan också använda AWS Elastic Search Service för att hämta dessa sensorvärden och lagra den i en databas och sedan använda Kibana Dashboard- tjänsten för att visualisera sensordata som ett snyggt diagram. Intressant nog? !!! Så, Lets kommer igång…
Förutsättningar:
Denna handledning förutsätter att du redan har skapat ditt gratis AWS-konto och vet grunderna för AWS IoT-tjänst som att skapa en sak, ett certifikat, en policy och att publicera värden med den. Läs annars handledningen nedan.
- Komma igång med Amazon AWS IOT med MQTT.fx
Det antar också att du vet hur man gränssnitt en LCD- och DHT11-sensor till Raspberry Pi och biblioteken för att göra detsamma är redan installerade på din Pi. Om inte, fortsätt med nedanstående handledning.
- Gränssnitt DHT11 med Raspberry Pi
I slutet av ovanstående handledning skulle du ha skapat en sak på AWS-IOT och du borde också ha mäklaradressen för din sak tillsammans med de certifikat som behövs för att komma åt din sak. Vi antar också att din Raspberry pi redan är konfigurerad med ett operativsystem och är ansluten till internet. Med dessa på plats, låt oss fortsätta med handledningen. Om du är ny på Raspberry Pi, gå igenom Komma igång med Raspberry pi först.
Installera AWS IOT-enhetens SDK för Python på Raspberry Pi:
För att använda AWS-tjänsten på Pi kan vi installera någon av de två SDK: erna. En är JavaScript SDK som använder JavaScript som programmeringsspråk och den andra är Python SDK som uppenbarligen använder python som programmeringsspråk. Här väljer vi Python som vår SDK eftersom vi är lite mer bekväma med Python än JavaScript.
Den fullständiga informationen om AWS IOT SDK finns på GitHub-sidan.
Steg 1: För att installera SDK på din Pi, öppna terminalen och skriv följande kommando
git-klon
Steg 2: Detta borde ha installerat aws- katalogen på din Pi, navigera nu in i den med följande kommando.
cd aws - iot -enhet- sdk -python
Steg 3: Installera installationsfilen i katalogen med hjälp av raden nedan
python setup.py installera
Kretsschema:
På hårdvarusidan har vi en Raspberry Pi ansluten till en DHT11-sensor och en LCD-skärm. DHT11 används för att få värdet av temperatur och luftfuktighet och LCD används för att visa värden och avfelningsinformation. Kretsschemat för detsamma visas nedan.
Både LCD- och DHT11-sensorn fungerar med + 5V-matning så vi använder 5V-stiften på Raspberry Pi för att driva båda. Ett dragmotstånd med värdet 1k används på utgångsstiftet på DHT11-sensorn. Om du använder en modul kan du undvika detta motstånd.
En trimmerpott på 10k läggs till Vee-stiftet på LCD-skärmen för att styra LCD-skärmens kontrastnivå. Annat än att alla anslutningar är ganska rakt framåt. Men notera vilka GPIO-stift du använder för att ansluta stiften eftersom vi behöver i vårt program. Nedanstående diagram bör låta dig räkna ut GPIO-stiftnumren.
Använd diagrammet och gör dina anslutningar enligt kretsschemat. Jag använde ett brödbräda och bygelkablar för att skapa mina kontakter. Eftersom jag använde en modul kopplade jag den direkt till Raspberry Pi. Min hårdvara såg ut så här nedan
Programmering av din Raspberry Pi:
I vårt pythonprogram måste vi läsa värdet på temperatur och fuktighet, visa det på LCD-skärmen och också publicera båda värdena för Amazon IOT-sak som vi skapade redan i föregående handledning. Så se till att du har skapat saken och att du har alla de tre nyckelfilerna och mäklaradressen för den sak du har skapat.
I vårt pythonprogram måste vi länka de tre nyckelfilerna så att Raspberry Pi kan få tillgång till att publicera värden på vår sak. Så kopiera alla tre nyckelfilerna och klistra in den på skrivbordet på din Raspberry pi eftersom vi behöver deras sökadress i vårt program.
Det fullständiga pythonprogrammet hittar du längst ner på den här sidan, du kan använda programmet efter att du har redigerat mäklaradressen och sökvägarna enligt den sak du skapade. Vidare nedan har jag förklarat koden i små utdrag.
Vi börjar med att importera de bibliotek som krävs för vårt projekt. De tre huvudbiblioteken är AWS SDK, LCD-bibliotek och DHT-bibliotek, se till att du har installerat alla tre på din Pi. Den tid och datetime bibliotek kommer att installeras som standard.
från AWSIoTPythonSDK.MQTTLib-import AWSIoTMQTTClient #Import från AWS-IoT-biblioteksimporttid # För att skapa fördröjning från importdatum för datetime , datetime #To get date and time import Adafruit_CharLCD as LCD #Import LCD library import Adafruit_DHT #Import DHT Library for sensor
I nästa rad måste vi ange information om saker som mäklare, kundnamn och sökväg till certifikatet och nyckelfiler. Här har jag använt klientnamnet som new_Client, du kan använda samma eller valfritt namn efter eget val. Mäklaradressen bör ändras till adressen till den sak som du skapade och sökkatalogen bör också ändras enligt din sak. Förutom dessa två saker behöver du inte ändra något på följande rader.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desktop / ESP32. "/ home / pi / Desktop / ESP32_Thing certifikat / private.pem.key", "/ home / pi / Desktop / ESP32_Thing certifikat / certifikat.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Infinite offline Publicera kö myMQTTClient. configureDrainingFrequency (2) # Dränering: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sek myMQTTClient.configureMQTTOperationTimeout (5) # 5 sek
Därefter måste vi ange stiftdetaljerna för vår anslutning. GPIO-stiftnumret för varje stift tilldelas dess respektive namn. Här har vi använt DHT-sensorn på stift 17 och LCD i 4-bitars läge. Koden för detsamma visas nedan
sensor_name = Adafruit_DHT.DHT11 # vi använder DHT11-sensorn sensor_pin = 17 # Sensorn är ansluten till GPIO17 på Pi lcd_rs = 7 #RS på LCD är ansluten till GPIO 7 på PI lcd_en = 8 #EN på LCD är ansluten till GPIO 8 på PI lcd_d4 = 25 # D4 på LCD är ansluten till GPIO 25 på PI lcd_d5 = 24 # D5 på LCD är ansluten till GPIO 24 på PI lcd_d6 = 23 # D6 på LCD är ansluten till GPIO 23 på PI lcd_d7 = 18 # D7 av LCD är ansluten till GPIO 18 på PI lcd_backlight = 0 # LED är inte ansluten så vi tilldelar 0
Sedan initialiserar vi LCD-skärmen och visar ett litet introduktionsmeddelande på LCD-skärmen. Därefter försöker vi ansluta till AWS-saken med hjälp av mäklaradressen och nyckelfilerna som anges ovan. Om anslutningen lyckas visar LCD: n " Ansluten till AWS-sak " eller den försöker i 10 sekunder och om den misslyckas kommer den att visa Felmeddelande. Om du får ett felmeddelande, se till att du har skapat saken framgångsrikt och har länkat den ordentligt till koden. Du kan alltid gå tillbaka till föregående handledning för att se om du har skapat saken ordentligt i AWS.
om tid.tid () <anslutningstid: # försök att ansluta till AWS i 10 sekunder myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "ansluten", 0) skriv ut "MQTT Client-anslutning lyckad!" lcd.message ('Ansluten till \ n AWS-sak') # om ansluten annat: skriv ut "Fel: Kontrollera dina AWS-detaljer i programmet" lcd.message ('Fel: \ nOgiltiga detaljer') # om inte ansluten
När anslutningen har upprättats framgångsrikt går vi in i den oändliga while- slingan för att publicera värdet på tid, temperatur och luftfuktighet som nyttolast. Nyttolasten här ska alltid vara en sträng i JSON-format. Så först är vi genom att läsa aktuellt datum och tid och spara den i en variabel med hjälp av nedanstående rader
nu = datetime.utcnow () #get datum och tid current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # get aktuell tid i strängformat
Sedan läser vi fukt- och temperaturvärdena från DHT11-sensorn och visar den på en LCD-skärm. Den variabla luftfuktigheten och temperaturen håller värdet på fuktighet respektive temperatur
luftfuktighet, temperatur = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #läs från sensor
och spara respektive värden i temperatur- och fuktighetsvaribalen
lcd.clear () # Rensa LCD-skärmen lcd.message ('Temp =%.1f C'% temperatur) # Visa värdet på temperatur lcd.message ('\ nHum =%.1f %%'% fuktighet) #Display värdet på luftfuktighetstid. sömn (2) # Vänta i 2 sekunder och uppdatera sedan värdena
Som tidigare nämnts bör nyttolasten vara i form av en sträng med krökta parenteser runt, vi lägger till värdet på datum, tid, temperatur och luftfuktighet efter omvandling av variabeln till strängar som visas nedan.
#prepare the payload in string format payload = '{"timestamp": "' + current_time + '", "temperature":' + str (temperature) + ', "fuktighet":' + str (fuktighet) + '}'
När nyttolasten är klar måste vi slutligen publicera den till MQTT-klienten. Detta kan göras med kommandot myMQTTclient.publish . När vi publicerar för en sak borde vi också ge det ett namn, här har jag kallat det DHT11 / data men du kan namnge det vad du vill. Men se till att du kommer ihåg namnet eftersom vi kommer att behöva prenumerera på vår sak för att se informationen.
Testa pythonprogrammet genom Shell Window:
När programmet är klart startar du det med ditt val. Jag har använt Python IDE för att starta programmet i skalfönstret. Om allt är okej bör du få en meddelandeförbindelse lyckad och all nyttolast ska visas i fönstret. Du kan kontrollera om värdena för temperatur och fuktighet läses korrekt. Nyttolasten uppdateras var femte sekund. Skalfönstret ser ut ungefär så här nedan
Om du har några problem, se till att du har angett rätt nyckelinformation och mäklaradress, kontrollera också att om saken kan anslutas till med MQTT.fx-programvaran. Om skalet visar MQTT-klientanslutningens framgång och hänger där, betyder det att DHT11-sensorn inte svarar, kontrollera om du har anslutit till rätt stift och att sensorn fungerar.
Arbetssätt:
När du har startat programmet och fått ovanstående detaljer i skalfönstret betyder det att programmet svarar ordentligt och att värdena laddas upp till Amazon AWS-servern. Du kan också märka LCD-skärmen för att kontrollera om det står Publicerad till AWS-IoT var 5: e sekund enligt nedan.
Vi kan komma in i MQTT.fx-applikationen och prenumerera på ämnet DHT11 / data . Då borde vi kunna få all information som publiceras av Raspberry Pi. Dessa data kommer också att uppdateras var femte sekund. din MQTT-skärm kommer att se ut så här nedan
Som du kan se mottas nyttolasten på MQTT-programvaran som markerad i blått. Du kan också titta på videon nedan för att veta hur projektet fungerar. Sedan nu har vi våra data på internet kan vi använda den med andra verktyg som tillhandahålls av Amazon som Elastic search och Lambda för att spara data i en databas eller visualisera sedan i en graf. Det finns mycket fler applikationer, baserat på hur vi måste dra nytta av uppgifterna.
Hoppas att du förstod handledningen och tyckte om att bygga något liknande, om du har några problem med att få det gjort, lägg upp det i kommentarsektionen nedan eller använd forumen för teknisk hjälp.