- Namestitev SDK naprave AWS IOT za Python na Raspberry Pi:
- Shema vezja:
- Programiranje vašega Raspberry Pi:
- Testiranje programa python skozi okno Shell:
- Delo:
Raspberry Pi je bil vedno prva izbira za razvoj aplikacij, ki temeljijo na IoT, če gre za določeno stopnjo računanja. S prilagodljivostjo pythona in močno skupnostjo razvijalcev je zelo enostavno zbirati, beležiti, analizirati ali poročati o naboru podatkov s pomočjo Pi. V tej vadnici bomo izvedeli, kako združiti moč Raspberry Pi s storitvijo Amazon AWS za objavo podatkov na spletu v internetu.
V tej vadnici bomo s senzorjem DHT11 odčitali vrednost temperature in vlažnosti, nato se povezali s storitvijo AWS IOT in posodobili vrednosti senzorja s pomočjo AWS IOT SDK. Te podatke lahko nato vizualiziramo v konzoli Amazon IOT, da zagotovimo, da podatke objavljamo na internetu.
S storitvijo AWS Elastic Search lahko tudi pridobite te vale senzorjev in jih shranite v bazo podatkov, nato pa s pomočjo storitve Kibana Dashboard vizualizirate podatke senzorja kot urejen graf. Dovolj zanimivo? !!! Torej, začnimo…
Predpogoji:
Ta vadnica predpostavlja, da ste že ustvarili svoj brezplačni račun AWS in poznate osnove storitve AWS IoT, kot je ustvarjanje stvari, potrdila, pravilnika in objava vrednosti z njim. Če je drugače, preberite spodnjo vadnico.
- Uvod v Amazon AWS IOT z MQTT.fx
Predpostavlja se tudi, da znate povezati LCD in senzor DHT11 z Raspberry Pi, knjižnice za to pa so že nameščene na vašem Pi. V nasprotnem primeru nadaljujte s spodnjo vadnico.
- Povezava DHT11 z Raspberry Pi
Na koncu zgornje vaje bi ustvarili stvar na AWS-IOT, poleg tega pa bi morali imeti tudi naslov posrednika za svojo stvar skupaj s potrdili, potrebnimi za dostop do vaše stvari. Predvidevamo tudi, da je vaš Raspberry pi že nastavljen z operacijskim sistemom in je povezan z internetom. Ko so ti nameščeni, nadaljujmo z vadnico. Če ste novi v Raspberry Pi, najprej pojdite skozi Uvod v Raspberry pi.
Namestitev SDK naprave AWS IOT za Python na Raspberry Pi:
Za uporabo storitve AWS na Pi lahko namestimo katerega koli od obeh SDK-jev. Eden je JavaScript SDK, ki uporablja JavaScript kot programski jezik, drugi pa Python SDK, ki očitno uporablja python kot programski jezik. Tu izberemo Python kot svoj SDK, saj nam je Python bolj všeč kot JavaScript.
Popolne informacije o AWS IOT SDK so na voljo na njegovi strani GitHub.
1. korak: Če želite namestiti SDK na svoj Pi, odprite terminal, vnesite naslednji ukaz
klon git
2. korak: To bi moralo namestiti imenik aws na vaš Pi, zdaj se pomaknite vanj z naslednjim ukazom.
cd AWS - Internet stvari -device- SDK -python
3. korak: V imeniku namestite namestitveno datoteko s spodnjo vrstico
python setup.py namestite
Shema vezja:
Na strojni strani imamo Raspberry Pi, priključen na senzor DHT11, in LCD zaslon. DHT11 se uporablja za pridobivanje vrednosti temperature in vlažnosti, LCD pa za prikaz vrednosti in informacij o odpravljanju napak. Shema vezja za isto je prikazana spodaj.
Tako LCD kot senzor DHT11 delujeta z napajanjem + 5V, zato za napajanje obeh uporabljamo 5V nožice na Raspberry Pi. Na izhodnem zatiču senzorja DHT11 se uporablja vlečni upor vrednosti 1k, če uporabljate modul, se temu uporu lahko izognete.
Na zatič Vee LCD-ja se doda loputa za obrezovanje 10k za nadzor stopnje kontrasta LCD-ja. Razen tega so vse povezave precej naravnost naprej. Vendar si zapišite, katere GPIO nožice uporabljate za povezavo nožic, saj jih bomo potrebovali v našem programu. Spodnja tabela naj vam omogoča, da ugotovite številke pinov GPIO.
Uporabite tabelo in vzpostavite povezave v skladu z vezjem. Za povezave sem uporabil lepenko in mostične žice. Ker sem uporabil modul, sem ga priklopil neposredno na Raspberry Pi. Moja strojna oprema je bila spodaj videti tako
Programiranje vašega Raspberry Pi:
V našem programu python moramo prebrati vrednost temperature in vlažnosti, jo prikazati na LCD zaslonu in obe vrednosti objaviti tudi na Amazon IOT, ki smo jo ustvarili že v prejšnji vadnici. Torej se prepričajte, da ste stvar ustvarili in imate vse tri ključne datoteke in naslov posrednika stvari, ki ste jo ustvarili.
V našem programu python moramo povezati tri ključne datoteke, da lahko Raspberry Pi pridobi dostop do objavljanja vrednosti o naši stvari. Kopirajte torej vse tri ključne datoteke in jih prilepite na namizje vašega Raspberry pi, saj bomo v našem programu potrebovali naslov njihove poti.
Celoten program piton lahko najdete na dnu te strani, lahko program uporabljati po urejanju posrednik naslov in pot imenike glede na stvari, ki jo je ustvaril. Nadalje spodaj sem razložil kodo v majhnih delčkih.
Smo začeli z uvozom knjižnice, potrebne za naš projekt. Tri glavne knjižnice so AWS SDK, LCD knjižnica in DHT knjižnica, poskrbite, da ste namestili vse tri svoje Pi. Čas in datetime knjižnica bo nameščena privzeto.
od AWSIoTPythonSDK.MQTTLib uvozne AWSIoTMQTTClient #import od AWS-internet stvari Knjižnica uvoz časovnem # želite ustvariti zamudo od datetime uvoza dan, datetime #To dobili datum in čas uvoza Adafruit_CharLCD kot LCD #import LCD knjižnica uvoz Adafruit_DHT #import DHT knjižnice za senzor
V naslednji vrstici moramo navesti podrobnosti o stvari, kot so naslov posrednika, ime stranke in pot do datotek s potrdili in ključi. Tu sem uporabil ime odjemalca kot new_Client , lahko uporabite isto ali katero koli ime po svoji izbiri. Naslov posrednika je treba spremeniti v naslov stvari, ki ste jo ustvarili, in imenik poti je treba spremeniti glede na vašo stvar. Razen teh dveh stvari vam v naslednjih vrsticah ni treba ničesar spreminjati.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / piš / Desk / CA32 / CA / piš / CA / CA / pi. "/ home / pi / Desktop / ESP32_Thing certifikati / private.pem.key", "/ home / pi / Desktop / ESP32_Thing certificate / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Neskončno objavljanje v čakalni vrsti myMQTTClient. configureDrainingFrequency (2) # Odvajanje: 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sek myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec
Nato moramo določiti podrobnosti pin-a naše povezave. Številka GPIO zatiča vsakega zatiča je dodeljena njegovemu ustreznemu imenu. Tu smo uporabili senzor DHT na zatiču 17 in LCD v 4-bitnem načinu. Koda za isto je prikazana spodaj
sensor_name = Adafruit_DHT.DHT11 # uporabljamo senzor DHT11 sensor_pin = 17 # Senzor je povezan z GPIO17 na Pi lcd_rs = 7 #RS LCD je povezan z GPIO 7 na PI lcd_en = 8 #EN LCD je povezan z GPIO 8 na PI lcd_d4 = 25 # D4 LCD je povezan z GPIO 25 na PI lcd_d5 = 24 # D5 LCD je povezan z GPIO 24 na PI lcd_d6 = 23 # D6 LCD je povezan z GPIO 23 na PI lcd_d7 = 18 # D7 od LCD je povezan z GPIO 18 na PI lcd_backlight = 0 #LED ni povezan, zato dodelimo 0
Nato inicijaliziramo LCD in na LCD zaslonu prikažemo majhno uvodno sporočilo. Po tem se bomo poskušali povezati s stvarjo AWS z uporabo zgoraj vnesenega naslova posrednika in ključnih datotek. Če je povezava uspešna, se na LCD-prikazovalniku prikaže sporočilo » Connected to AWS thing « ali bo poskusil 10 sekund, če pa ne, bo prikazano sporočilo o napaki. Če prejmete sporočilo o napaki, se prepričajte, da ste stvar uspešno ustvarili in ste jo pravilno povezali s kodo. Vedno se lahko vrnete na prejšnjo vadnico in preverite, ali ste stvar pravilno ustvarili v AWS.
if time.time () <connection_time: # poskusite 10 sekund povezati AWS myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "connected", 0) natisnite "MQTT Client connection connection!" lcd.message ('Povezan z \ n stvarjo AWS') # če je povezan drugje: tiskanje "Napaka: preverite podrobnosti AWS v programu" lcd.message ('Napaka: \ nNeveljavne podrobnosti') # če ni povezan
Ko je povezava uspešno vzpostavljena, vstopimo v neskončno zanko while, da objavimo vrednost časa, temperature in vlažnosti kot koristni tovor. Uporabna obremenitev tukaj mora biti vedno niz v obliki JSON. Najprej torej beremo trenutni datum in čas in ga shranimo v spremenljivko z uporabo spodnjih vrstic
now = datetime.utcnow () #get datum in ura current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') #get trenutni čas v obliki niza
Nato iz senzorja DHT11 preberemo vrednosti vlažnosti in temperature ter jih prikažemo na LCD zaslonu. Spremenljiva vlažnost in temperatura bosta ohranili vrednost vlažnosti oziroma temperature
vlaga, temperatura = Adafruit_DHT.read_retry (ime_senzorja, senzor_pin) #read from sensor
in shranite ustrezne vrednosti pri temperaturi in vlažnosti
lcd.clear () # Počistite LCD zaslon lcd.message ('Temp =%.1f C'% temperature) # Prikažite vrednost temperature lcd.message ('\ nHum =%.1f %%'% vlage) #Prikaži vrednost Humidity time.sleep (2) # Počakajte 2 sekundi in nato posodobite vrednosti
Kot smo že povedali, mora biti koristni tovor v obliki niza z zavitimi oklepaji, po pretvorbi spremenljivke v nize pa dodamo vrednost datuma, časa, temperature in vlažnosti, kot je prikazano spodaj.
#prepare tovor v nizovnem formatu payload = '{"timestamp": "' + current_time + '", "temperature":' + str (temperatura) + ', "vlažnost":' + str (vlažnost) + '}'
Ko je tovor pripravljen, ga moramo objaviti odjemalcu MQTT. To lahko storite z ukazom myMQTTclient.publish . Med objavo stvari bi ji morali tudi dati ime, tukaj sem jo poimenoval DHT11 / data, lahko pa ji poimenujete karkoli želite. Vendar si obvezno zapomnite ime, saj se bomo morali za ogled podatkov naročiti pri naši stvari.
Testiranje programa python skozi okno Shell:
Ko je program pripravljen, ga zaženite po svoji izbiri. Uporabil sem Python IDE za zagon programa v oknu lupine. Če je vse v redu, morate uspešno vzpostaviti sporočilno povezavo in v oknu prikazati ves tovor. Lahko preverite, ali so vrednosti temperature in vlažnosti pravilno odčitane. Nosilnost se posodablja vsakih 5 sekund. Okno lupine bo spodaj videti približno tako
Če imate kakršne koli težave, preverite, ali ste navedli pravilne ključne podatke in naslov posrednika, preverite tudi, ali je stvar mogoče povezati s pomočjo programske opreme MQTT.fx. Če lupina prikaže uspeh povezave MQTT Client in visi tam, to pomeni, da se senzor DHT11 ne odziva, preverite, ali ste priključili pravi pin in senzor deluje.
Delo:
Ko zaženete program in prejmete zgornje podrobnosti v oknu lupine, to pomeni, da se program pravilno odziva in vrednosti naložijo na strežnik Amazon AWS. Opazite lahko tudi LCD zaslon, da preveri, ali na vsakih 5 sekund piše Objavljeno v AWS-IoT, kot je prikazano spodaj.
Lahko vstopimo v aplikacijo MQTT.fx in se naročimo na temo DHT11 / podatki . Potem bi morali dobiti vse podatke, ki jih objavlja Raspberry Pi. Ti podatki se bodo posodabljali tudi vsakih 5 sekund; zaslon vašega MQTT bo spodaj videti približno tako
Kot lahko vidite, je tovor v programski opremi MQTT sprejet v modri barvi. Spodaj si lahko ogledate tudi video, če želite vedeti, kako projekt deluje. Ker imamo zdaj svoje podatke v internetu, jih lahko uporabljamo z drugimi orodji, ki jih ponuja Amazon, kot sta Elastic search in Lambda, da podatke shranimo v bazo podatkov ali nato vizualiziramo na grafu. Programov je veliko več, odvisno od tega, kako moramo dobiti podatke.
Upam, da ste razumeli vadnico in ste uživali pri izdelavi česa podobnega, če imate kakršne koli težave pri tem, jo objavite v spodnjem oddelku za komentarje ali uporabite forume za tehnično pomoč.