- AWS IOT įrenginio SDK, skirtas „Python“, įdiegimas į „Raspberry Pi“:
- Grandinės schema:
- „Raspberry Pi“ programavimas:
- „Python“ programos testavimas per „Shell Window“:
- Darbas:
„Raspberry Pi“ visada buvo pirmasis pasirinkimas kuriant IoT pagrįstas programas, jei tam tikro lygio skaičiavimas yra susijęs. Su „Python“ ir stiprios kūrėjų bendruomenės lankstumu labai lengva rinkti, registruoti, analizuoti ar pranešti apie duomenų rinkinį naudojant „Pi“. Šioje pamokoje sužinosime, kaip suderinti „ Raspberry Pi“ galią su „Amazon AWS“ paslauga skelbiant duomenis internete internete.
Šioje pamokoje naudosime jutiklį DHT11 temperatūros ir drėgmės vertei nuskaityti, tada prisijungsime prie AWS IOT tarnybos ir atnaujinsime jutiklio reikšmes naudodami AWS IOT SDK. Šiuos duomenis galima vizualizuoti „Amazon IOT“ konsolėje, kad įsitikintume, jog duomenis skelbiame internete.
Taip pat galite naudoti „ AWS Elastic Search Service“, kad gautumėte šiuos jutiklio vožtuvus ir saugotumėte juos duomenų bazėje, tada naudokite „ Kibana Dashboard“ paslaugą, kad vizualizuotumėte jutiklio duomenis kaip tvarkingą brėžinį. Užteks pakankamai? !!! Taigi, pradedame…
Išankstinės sąlygos:
Šioje pamokoje daroma prielaida, kad jau sukūrėte nemokamą AWS paskyrą ir žinote pagrindinius dalykus apie AWS IoT paslaugą, pvz., Kurdami daiktą, sertifikatą, politiką ir skelbdami vertes naudodami ją. Jei kitaip, perskaitykite toliau pateiktą pamoką.
- Darbo su „Amazon AWS IOT“ su „MQTT.fx“ pradžia
Taip pat daroma prielaida, kad jūs žinote, kaip susieti LCD ir DHT11 jutiklį su „Raspberry Pi“, o bibliotekos, kaip tai padaryti, jau įdiegtos jūsų „Pi“. Jei ne, tęskite toliau pateiktą mokymo programą.
- DHT11 sąsaja su Raspberry Pi
Ankstesnės pamokos pabaigoje būtumėte sukūrę daiktą AWS-IOT, taip pat turėtumėte turėti savo daikto tarpininko adresą kartu su sertifikatais, reikalingais norint pasiekti daiktą. Mes taip pat manome, kad jūsų „Raspberry pi“ jau yra įdiegta su OS ir yra prijungta prie interneto. Turėdami tai vietoje, pradėkime pamoką. Jei esate „Raspberry Pi“ naujokas, pirmiausia pereikite prie „Raspberry pi“ pradžios.
AWS IOT įrenginio SDK, skirtas „Python“, įdiegimas į „Raspberry Pi“:
Norėdami naudoti AWS paslaugą Pi, galime įdiegti bet kurį iš dviejų SDK. Vienas yra „JavaScript“ SDK, kuris naudoja „JavaScript“ kaip programavimo kalbą, o kitas yra „Python SDK“, kuris akivaizdžiai naudoja „Python“ kaip programavimo kalbą. Čia mes renkamės „Python“ kaip savo SDK, nes „ Python“ mums yra patogiau nei „JavaScript“.
Visą informaciją apie AWS IOT SDK galite rasti „GitHub“ puslapyje.
1 žingsnis: Norėdami įdiegti SDK „Pi“, atidarykite terminalą įveskite šią komandą
„git“ klonas
2 žingsnis: Tai turėjo būti įdiegęs aws katalogą jūsų Pi, dabar eikite į jį naudodami šią komandą.
cd aws - iot -device- sdk -python
3 žingsnis: Viduje katalogo įdiekite sąrankos failą naudodami žemiau esančią eilutę
python setup.py įdiegti
Grandinės schema:
Aparatinės įrangos pusėje turime „ Raspberry Pi“, sujungtą su DHT11 jutikliu ir LCD ekranu. DHT11 naudojamas norint gauti temperatūros ir drėgmės vertę, o LCD naudojamas rodyti vertes ir pašalinti informaciją. To paties schema parodyta žemiau.
Tiek skystųjų kristalų, tiek DHT11 jutiklis veikia su + 5 V maitinimo šaltiniu, todėl abiejų maitinimui naudojame „Raspberry Pi“ 5 V kaiščius. DHT11 jutiklio išvesties kaiščiui naudojamas 1k vertės traukimo rezistorius, jei naudojate modulį, galite išvengti šio rezistoriaus.
Peiliukas puodai 10k yra įtraukta į Vee kaiščio LCD kontroliuoti kontrasto lygį skystųjų kristalų ekrano. Išskyrus tai, kad visos jungtys yra gana tiesios. Bet pažymėkite, kuriuos GPIO kaiščius naudojate smeigtukams sujungti, nes mums jų reikės mūsų programoje. Žemiau pateikiama diagrama turėtų leisti jums išsiaiškinti GPIO PIN kodus.
Naudokitės diagrama ir atlikite ryšius pagal grandinės schemą. Savo ryšiams užmegzti naudoju duonos lentą ir laidų laidus. Kadangi naudojau modulį, jį prijungiau tiesiai prie „Raspberry Pi“. Mano aparatūra atrodė taip žemiau
„Raspberry Pi“ programavimas:
Savo python programoje turime perskaityti temperatūros ir drėgmės vertę, parodyti ją LCD ekrane ir paskelbti abi reikšmes „Amazon IOT“ dalykui, kurį sukūrėme jau ankstesnėje mokymo programoje. Taigi įsitikinkite, kad sukūrėte daiktą ir turite visus tris pagrindinius failus ir sukurto daikto tarpininko adresą.
Savo „ Python“ programoje turime susieti tris pagrindinius failus, kad „Raspberry Pi“ galėtų gauti prieigą prie mūsų daikto vertybių paskelbimo. Taigi nukopijuokite visus tris pagrindinius failus ir įklijuokite juos į savo „Raspberry pi“ darbalaukį, nes mums jų programoje reikės jų kelio adreso.
Pilnas python programa galima rasti šio puslapio apačioje galite naudoti programą po redagavimo brokeris adresų ir kelias katalogus pagal dalykas, kurį sukūrėte. Toliau paaiškinau kodą mažais fragmentais.
Pirmiausia importuojame bibliotekas, reikalingas mūsų projektui. Trys pagrindinės bibliotekos yra AWS SDK, LCD biblioteka ir DHT biblioteka. Įsitikinkite, kad įdiegėte visas tris savo Pi. Laikas ir datetime biblioteka bus įdiegta pagal nutylėjimą.
nuo AWSIoTPythonSDK.MQTTLib importo AWSIoTMQTTClient #import nuo AWS-DI biblioteka importavimo metu # Norėdami sukurti uždelsimą nuo datetime importo datos, datetime #To gauti datą ir laiką importo Adafruit_CharLCD kaip skystųjų kristalų #import skystųjų kristalų biblioteka importo Adafruit_DHT #import DHT bibliotekoje jutikliu
Kitoje eilutėje turime pateikti dalyko informaciją, pvz., Brokerio adresą, kliento vardą ir kelią į sertifikatą bei pagrindinius failus. Čia aš naudojau kliento vardą kaip new_Client , galite naudoti tą patį arba bet kurį jūsų pasirinktą vardą. Tarpininko adresas turėtų būti pakeistas į jūsų sukurto daikto adresą, o kelio katalogas taip pat turėtų būti pakeistas pagal jūsų dalyką. Šiose eilutėse nieko nereikia keisti, išskyrus šiuos 2 dalykus.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883 ) myMQTTClient.configureCredentials ("/ home / pi / darbastalio "/ home / pi / Desktop / ESP32_Thing sertifikatai / private.pem.key", "/ home / pi / Desktop / ESP32_Thing sertifikatai / certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Begalinis neprisijungęs Skelbti eilėje myMQTTClient. configureDrainingFrequency (2) # Ištuštinimas : 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 sec
Toliau turime nurodyti mūsų ryšio kaiščio detales. Kiekvieno kaiščio GPIO kaiščio numeris priskiriamas jo atitinkamam pavadinimui. Čia mes naudojome DHT jutiklį 17 kaištyje ir LCD 4 bitų režimu. To paties kodas parodytas žemiau
sensor_name = Adafruit_DHT.DHT11 # mes naudojame DHT11 jutiklį sensor_pin = 17 # Jutiklis yra prijungtas prie GPIO17 Pi lcd_rs = 7 # LCD LCD yra prijungtas prie GPIO 7 PI lcd_en = 8 #EN LCD yra prijungtas prie GPIO 8 ant PI lcd_d4 = 25 # LCD D4 yra prijungtas prie GPIO 25 PI lcd_d5 = 24 # D5 LCD yra prijungtas prie GPIO 24 PI lcd_d6 = 23 # LCD D6 prijungtas prie GPIO 23 PI lcd_d7 = 18 # D7 iš LCD yra prijungtas prie GPIO 18 PI lcd_backlight = 0 #LED nėra prijungtas, todėl mes priskiriame 0
Tada mes inicijuojame skystųjų kristalų ekraną ir rodome mažą įvadinį pranešimą LCD ekrane. Po to bandysime susisiekti su AWS dalyku naudodami aukščiau įvestą brokerio adresą ir pagrindinius failus. Jei prisijungimas bus sėkmingas, skystųjų kristalų ekrane pasirodys pranešimas „ Prisijungta prie AWS “ arba jis bandys 10 sekundžių, o jei nepavyko, bus rodomas klaidos pranešimas. Jei gaunate klaidos pranešimą, įsitikinkite, kad sėkmingai sukūrėte daiktą ir tinkamai susiejote jį su kodu. Visada galite grįžti į ankstesnę mokymo programą ir sužinoti, ar tinkamai sukūrėte dalyką AWS.
jei time.time () <connect_time: # bandykite prisijungti prie AWS 10 sekundžių myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "prijungtas", 0) spausdinkite "MQTT kliento prisijungimo sėkmė!" lcd.message ('Prisijungta prie \ n AWS daikto') #jei prijungta dar: spausdinti "Klaida: Patikrinkite savo AWS informaciją programoje" lcd.message ('Klaida: \ nNeteisinga informacija') #jeigu neprijungta
Kai užmegzti ryšį sėkmingai, mes įvesti į begalinį , o kilpos skelbia laiko, temperatūros ir drėgmės kaip naudingosios apkrovos vertę. Naudingoji apkrova čia visada turėtų būti JSON formato eilutė. Taigi pirmiausia mes skaitome dabartinę datą ir laiką ir išsaugome jį kintamajame naudodami žemiau pateiktas eilutes
now = datetime.utcnow () #get data and time current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') #get dabartinis laikas eilutės formatu
Tada mes perskaitėme DHT11 jutiklio drėgmės ir temperatūros vertes ir rodome ją LCD ekrane. Kintama drėgmė ir temperatūra išlaikys drėgmės ir temperatūros vertę
drėgmė, temperatūra = Adafruit_DHT.read_retry (sensor_name, sensor_pin) # skaityti iš jutiklio
ir išsaugokite atitinkamas temperatūros ir drėgmės varibale reikšmes
lcd.clear () #Išvalykite skystųjų kristalų ekraną lcd.message ('Temp =%.1f C'% temperature) # Parodykite temperatūros lcd.message vertę ('\ nHum =%.1f %%'% drėgmės) #Display drėgmės laiko reikšmė.miega (2) # Palaukite 2 sekundes, tada atnaujinkite vertes
Kaip sakyta anksčiau, naudingoji apkrova turėtų būti virvelių forma su garbanotais skliaustais aplink ją, pridedant datos, laiko, temperatūros ir drėgmės vertę, pavertus kintamąjį į eilutes, kaip parodyta žemiau.
#preparate naudingoji apkrova eilutės formatu naudingoji apkrova = '{"timestamp": "' + current_time + '", "temperature":' + str (temperature) + ', "drėgmė":' + str (drėgmė) + '}'
Galiausiai, kai naudingoji apkrova bus paruošta, turime ją paskelbti MQTT klientui. Tai galima padaryti naudojant komandą myMQTTclient.publish . Skelbdami daiktą, mes taip pat turėtume jam suteikti pavadinimą, čia aš jį pavadinau DHT11 / data, bet jūs galite pavadinti viską, ko norite. Tačiau nepamirškite prisiminti vardo, nes norėdami peržiūrėti duomenis turėsime užsiprenumeruoti mūsų dalyką.
„Python“ programos testavimas per „Shell Window“:
Kai programa bus paruošta, paleiskite ją naudodamiesi savo pasirinkimu. Aš naudoju „Python IDE“, norėdamas paleisti programą apvalkalo lange. Jei viskas gerai, turėtumėte sėkmingai prisijungti prie pranešimo ir visas naudingasis krovinys turėtų būti rodomas lange. Galite patikrinti, ar teisingai nuskaitomos temperatūros ir drėgmės vertės. Naudingoji apkrova bus atnaujinama kas 5 sekundes. Korpuso langas žemiau atrodys maždaug taip
Jei turite kokių nors problemų, įsitikinkite, kad nurodėte teisingą pagrindinę informaciją ir brokerio adresą, taip pat patikrinkite, ar dalyką galima prijungti naudojant „MQTT.fx“ programinę įrangą. Jei apvalkalas rodo „MQTT Client“ ryšio sėkmę ir ten pakimba, tai reiškia, kad DHT11 jutiklis neatsako, jei patikrinote, ar prisijungėte prie tinkamo kaiščio ir jutiklis veikia.
Darbas:
Paleidę programą ir gavę aukščiau pateiktą informaciją ant apvalkalo lango, tai reiškia, kad programa tinkamai reaguoja, o reikšmės įkeliamos į „Amazon AWS“ serverį. Taip pat galite pastebėti skystųjų kristalų ekraną, kad patikrintumėte, ar jame rašoma Paskelbta AWS-IoT kas 5 sekundes, kaip parodyta žemiau.
Galime patekti į „MQTT.fx“ programą ir užsiprenumeruoti temą DHT11 / data . Tada turėtume sugebėti gauti visus duomenis, kuriuos skelbia „Raspberry Pi“. Šie duomenys taip pat bus atnaujinami kas 5 sekundes; žemiau jūsų MQTT ekranas atrodys maždaug taip
Kaip matote, naudingoji apkrova gaunama MQTT programinėje įrangoje, kaip paryškinta mėlyna spalva. Taip pat galite žiūrėti toliau pateiktą vaizdo įrašą, kad sužinotumėte, kaip veikia projektas. Kadangi dabar turime savo duomenis internete, galime juos naudoti su kitais „Amazon“ teikiamais įrankiais, pvz., „Elastic Search“ ir „Lambda“, kad išsaugotumėte duomenis duomenų bazėje arba vizualizuotumėte grafike. Yra daug daugiau programų, atsižvelgiant į tai, kaip mes turime gauti naudos iš duomenų.
Tikiuosi, kad supratote pamoką ir jums patiko kurti kažką panašaus. Jei turite kokių nors problemų tai padaryti, paskelbkite ją žemiau esančiame komentarų skyriuje arba naudokite forumus techninei pagalbai.