- Εγκατάσταση του AWS IOT Device SDK για Python στο Raspberry Pi:
- Διάγραμμα κυκλώματος:
- Προγραμματισμός του Raspberry Pi:
- Δοκιμή του προγράμματος python μέσω του Shell Window:
- Εργαζόμενος:
Το Raspberry Pi ήταν ανέκαθεν η πρώτη επιλογή για την ανάπτυξη εφαρμογών που βασίζονται σε IoT εάν εμπλέκεται κάποιο επίπεδο υπολογισμού. Με την ευελιξία του python και της ισχυρής κοινότητας προγραμματιστών, είναι πολύ εύκολο να συλλέξετε, να καταγράψετε, να αναλύσετε ή να αναφέρετε ένα σύνολο δεδομένων χρησιμοποιώντας το Pi. Σε αυτό το σεμινάριο θα μάθουμε πώς να συνδυάζουμε τη δύναμη του Raspberry Pi με την υπηρεσία Amazon AWS για τη δημοσίευση δεδομένων στο Διαδίκτυο.
Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε τον αισθητήρα DHT11 για να διαβάσουμε την τιμή της θερμοκρασίας και της υγρασίας και, στη συνέχεια, να συνδεθούμε με την υπηρεσία AWS IOT και να ενημερώσουμε τις τιμές του αισθητήρα χρησιμοποιώντας το AWS IOT SDK. Αυτά τα δεδομένα μπορούν στη συνέχεια να απεικονιστούν στην κονσόλα Amazon IOT για να βεβαιωθούμε ότι δημοσιεύουμε τα δεδομένα στο Διαδίκτυο.
Μπορείτε επίσης να χρησιμοποιήσετε την Υπηρεσία ελαστικής αναζήτησης AWS για να ανακτήσετε αυτές τις τιμές αισθητήρων και να την αποθηκεύσετε σε μια βάση δεδομένων και, στη συνέχεια, να χρησιμοποιήσετε την υπηρεσία Πίνακας ελέγχου Kibana για να απεικονίσετε τα δεδομένα του αισθητήρα ως τακτοποιημένο γράφημα. Αρκετά ενδιαφέρον; !!! Λοιπόν, Ας ξεκινήσουμε…
Προαπαιτούμενα:
Αυτό το σεμινάριο προϋποθέτει ότι έχετε ήδη δημιουργήσει τον δωρεάν λογαριασμό σας AWS και γνωρίζετε τα βασικά στοιχεία για την υπηρεσία AWS IoT, όπως τη δημιουργία ενός αντικειμένου, πιστοποιητικού, πολιτικής και τη δημοσίευση αξιών που τη χρησιμοποιούν. Εάν διαβάστε το παρακάτω σεμινάριο.
- Ξεκινώντας με το Amazon AWS IOT με το MQTT.fx
Υποθέτει επίσης ότι γνωρίζετε πώς να συνδέσετε έναν αισθητήρα LCD και DHT11 με το Raspberry Pi και οι βιβλιοθήκες για το ίδιο είναι ήδη εγκατεστημένες στο Pi σας. Εάν όχι, συνεχίστε με τον παρακάτω οδηγό.
- Διασύνδεση DHT11 με Raspberry Pi
Στο τέλος του παραπάνω φροντιστηρίου θα έχετε δημιουργήσει κάτι στο AWS-IOT και θα πρέπει επίσης να έχετε τη διεύθυνση μεσίτη για το πράγμα σας μαζί με τα πιστοποιητικά που απαιτούνται για την πρόσβαση στο πράγμα σας. Υποθέτουμε επίσης ότι το Raspberry pi έχει ήδη ρυθμιστεί με λειτουργικό σύστημα και είναι συνδεδεμένο στο διαδίκτυο. Με αυτά στη θέση του ας συνεχίσουμε το σεμινάριο. Εάν είστε νέοι στο Raspberry Pi, τότε ξεκινήστε πρώτα με το Raspberry pi.
Εγκατάσταση του AWS IOT Device SDK για Python στο Raspberry Pi:
Για να χρησιμοποιήσουμε την υπηρεσία AWS στο Pi, μπορούμε να εγκαταστήσουμε ένα από τα δύο SDK. Το ένα είναι το JavaScript SDK που χρησιμοποιεί το JavaScript ως γλώσσα προγραμματισμού και το άλλο είναι το Python SDK το οποίο προφανώς χρησιμοποιεί το python ως γλώσσα προγραμματισμού. Εδώ επιλέγουμε το Python ως SDK μας, καθώς είμαστε λίγο πιο άνετοι με το Python από το JavaScript.
Οι πλήρεις πληροφορίες για το AWS IOT SDK διατίθενται στη σελίδα του GitHub.
Βήμα 1: Για να εγκαταστήσετε το SDK στο Pi σας, ανοίξτε το τερματικό πληκτρολογήστε την ακόλουθη εντολή
git clone
Βήμα 2: Αυτό θα έπρεπε να είχε εγκαταστήσει τον κατάλογο aws στο Pi σας, τώρα πλοηγηθείτε σε αυτόν χρησιμοποιώντας την ακόλουθη εντολή.
cd AWS - IoT -device- SDK -python
Βήμα 3: Μέσα στον κατάλογο, εγκαταστήστε το αρχείο εγκατάστασης χρησιμοποιώντας την παρακάτω γραμμή
python setup.py εγκατάσταση
Διάγραμμα κυκλώματος:
Από την πλευρά του υλικού έχουμε ένα Raspberry Pi συνδεδεμένο με έναν αισθητήρα DHT11 και μια οθόνη LCD. Το DHT11 χρησιμοποιείται για να πάρει την τιμή της θερμοκρασίας και της υγρασίας και το LCD χρησιμοποιείται για την εμφάνιση των τιμών και των πληροφοριών αποσφαλμάτωσης. Το διάγραμμα κυκλώματος για το ίδιο φαίνεται παρακάτω.
Τόσο ο αισθητήρας LCD όσο και ο αισθητήρας DHT11 λειτουργούν με τροφοδοσία + 5V, οπότε χρησιμοποιούμε τους ακροδέκτες 5V στο Raspberry Pi για τροφοδοσία και των δύο. Μία αντίσταση τραβήγματος αξίας 1k χρησιμοποιείται στον πείρο εξόδου του αισθητήρα DHT11, εάν χρησιμοποιείτε μια μονάδα μπορείτε να αποφύγετε αυτήν την αντίσταση.
Ένα δοχείο κοπής 10k προστίθεται στον πείρο Vee της οθόνης LCD για τον έλεγχο του επιπέδου αντίθεσης της οθόνης LCD. Εκτός από αυτό όλες οι συνδέσεις είναι αρκετά απλές. Αλλά σημειώστε ποιες καρφίτσες GPIO χρησιμοποιείτε για να συνδέσετε τις καρφίτσες αφού θα χρειαζόμαστε στο πρόγραμμά μας. Το παρακάτω γράφημα θα σας επιτρέψει να υπολογίσετε τους αριθμούς pin GPIO.
Χρησιμοποιήστε το γράφημα και πραγματοποιήστε τις συνδέσεις σας σύμφωνα με το διάγραμμα κυκλώματος. Χρησιμοποίησα ένα καλώδιο breadboard και jumper για να κάνω τις συνδέσεις μου. Εφόσον χρησιμοποίησα μια ενότητα, το ενσύρραξα απευθείας στο Raspberry Pi. Το υλικό μου έμοιαζε έτσι παρακάτω
Προγραμματισμός του Raspberry Pi:
Στο πρόγραμμα python πρέπει να διαβάσουμε την τιμή της θερμοκρασίας και της υγρασίας, να την εμφανίσουμε στην οθόνη LCD και επίσης να δημοσιεύσουμε και τις δύο τιμές στο Amazon IOT πράγμα που έχουμε δημιουργήσει ήδη στο προηγούμενο σεμινάριο. Γι 'αυτό βεβαιωθείτε ότι έχετε δημιουργήσει το πράγμα και ότι έχετε και τα τρία βασικά αρχεία και τη διεύθυνση μεσίτη για το πράγμα που έχετε δημιουργήσει.
Στο πρόγραμμα python μας πρέπει να συνδέσουμε τα τρία βασικά αρχεία έτσι ώστε το Raspberry Pi να αποκτήσει πρόσβαση για να δημοσιεύσει τιμές για το πράγμα μας. Αντιγράψτε λοιπόν και τα τρία βασικά αρχεία και επικολλήστε το στην επιφάνεια εργασίας του Raspberry pi, καθώς θα χρειαζόμαστε τη διεύθυνση διαδρομής στο πρόγραμμά μας.
Το πλήρες πρόγραμμα python βρίσκεται στο κάτω μέρος αυτής της σελίδας, μπορείτε να χρησιμοποιήσετε το πρόγραμμα αφού επεξεργαστείτε τη διεύθυνση μεσιτών και τους καταλόγους διαδρομών σύμφωνα με το πράγμα που δημιουργήσατε. Περαιτέρω παρακάτω εξήγησα τον κώδικα σε μικρά αποσπάσματα.
Ξεκινάμε εισάγοντας τις βιβλιοθήκες που απαιτούνται για το έργο μας. Οι τρεις κύριες βιβλιοθήκες είναι AWS SDK, βιβλιοθήκη LCD και DHT Library, βεβαιωθείτε ότι έχετε εγκαταστήσει και τα τρία Pi σας. Ο χρόνος και datetime βιβλιοθήκη θα εγκατασταθεί από προεπιλογή.
από AWSIoTPythonSDK.MQTTLib εισαγωγή AWSIoTMQTTClient #Import από AWS-IoT Library εισαγωγής ώρας # Για να δημιουργήσετε καθυστέρηση από την ημερομηνία εισαγωγής ημερομηνίας, ημερομηνία χρόνου #Για λήψη ημερομηνίας και ώρας εισαγωγή Adafruit_CharLCD ως LCD #Import Βιβλιοθήκη εισαγωγής Adafruit_DHT #Import DHT Library για αισθητήρα
Στην επόμενη γραμμή θα πρέπει να παρέχουμε τα στοιχεία όπως διεύθυνση Broker, όνομα πελάτη και διαδρομή προς το πιστοποιητικό και τα βασικά αρχεία. Εδώ έχω χρησιμοποιήσει το όνομα πελάτη ως new_Client μπορείτε να χρησιμοποιήσετε το ίδιο ή οποιοδήποτε όνομα της επιλογής σας. Η διεύθυνση του μεσίτη θα πρέπει να αλλάξει στη διεύθυνση του πράγμα που δημιουργήσατε και ο κατάλογος διαδρομών θα πρέπει επίσης να αλλάξει ανάλογα με το πράγμα σας. Εκτός από αυτά τα 2 πράγματα δεν χρειάζεται να αλλάξετε τίποτα στις ακόλουθες γραμμές.
myMQTTClient = AWSIoTMQTTClient ("new_Client") myMQTTClient.configureEndpoint ("qwert1234567yuio89.iot.us-east-2.amazonaws.com", 8883) myMQTTClient.configureCredentials ("/ home / pi / Desktop / ESP32, CA / Desktop / ESP32 "/ home / pi / Desktop / ESP32_Thing πιστοποιητικά / private.pem.key", "/ home / pi / Desktop / ESP32_Thing πιστοποιητικά / Certificate.pem.crt") myMQTTClient.configureOfflinePublishQueueing (-1) # Infinite offline Δημοσίευση ουράς myMQTTClient. configureDrainingFrequency (2) # Draining : 2 Hz myMQTTClient.configureConnectDisconnectTimeout (10) # 10 sec myMQTTClient.configureMQTTOperationTimeout (5) # 5 δευτ.
Στη συνέχεια πρέπει να καθορίσουμε τις λεπτομέρειες pin της σύνδεσής μας. Ο αριθμός pin GPIO κάθε καρφίτσας εκχωρείται στο αντίστοιχο όνομά του. Εδώ χρησιμοποιήσαμε τον αισθητήρα DHT στον ακροδέκτη 17 και την οθόνη LCD σε λειτουργία 4-bit. Ο κωδικός για το ίδιο φαίνεται παρακάτω
sensor_name = Adafruit_DHT.DHT11 #we χρησιμοποιείτε το DHT11 αισθητήρα sensor_pin = 17 # Ο αισθητήρας συνδέεται με GPIO17 σχετικά Pi lcd_rs = 7 #RS της LCD είναι συνδεδεμένη με GPIO 7 σχετικά με PI lcd_en = 8 #EN της LCD είναι συνδεδεμένη με GPIO 8 στο PI lcd_d4 = 25 # D4 του LCD είναι συνδεδεμένο στο GPIO 25 στο PI lcd_d5 = 24 # D5 της LCD είναι συνδεδεμένο στο GPIO 24 στο PI lcd_d6 = 23 # D6 της LCD είναι συνδεδεμένο στο GPIO 23 στο PI lcd_d7 = 18 # D7 Η LCD είναι συνδεδεμένη με το GPIO 18 στο PI lcd_backlight = 0 #LED δεν είναι συνδεδεμένο οπότε αντιστοιχίζουμε στο
Στη συνέχεια αρχικοποιούμε την οθόνη LCD και εμφανίζεται ένα μικρό εισαγωγικό μήνυμα στην οθόνη LCD. Μετά από αυτό θα προσπαθήσουμε να συνδεθούμε με το πράγμα AWS χρησιμοποιώντας τη διεύθυνση του μεσίτη και τα βασικά αρχεία που έχουν εισαχθεί παραπάνω. Εάν η σύνδεση είναι επιτυχής, η οθόνη LCD θα εμφανίσει " Connected to AWS πράγμα " ή θα προσπαθήσει για 10 δευτερόλεπτα και εάν απέτυχε τότε θα εμφανίσει μήνυμα σφάλματος. Εάν λάβετε μήνυμα σφάλματος, βεβαιωθείτε ότι έχετε δημιουργήσει το πράγμα με επιτυχία και το έχετε συνδέσει σωστά με τον κωδικό. Μπορείτε πάντα να επιστρέψετε στο προηγούμενο σεμινάριο για να δείτε εάν έχετε δημιουργήσει το πράγμα σωστά στο AWS.
εάν time.time () <connect_time: #try σύνδεση με AWS για 10 δευτερόλεπτα myMQTTClient.connect () myMQTTClient.publish ("DHT11 / info", "συνδεδεμένο", 0) εκτύπωση "Επιτυχία σύνδεσης πελάτη MQTT!" lcd.message ('Connected to \ n AWS thing') #if συνδεδεμένο άλλο: print "Σφάλμα: Ελέγξτε τις λεπτομέρειες AWS στο πρόγραμμα" lcd.message ('Σφάλμα: \ nΑκυρώσεις')
Μόλις η σύνδεση με επιτυχία, μπαίνουμε μέσα στο άπειρο , ενώ βρόχο για να δημοσιεύσει την αξία του χρόνου, της θερμοκρασίας και της υγρασίας ως ωφέλιμο φορτίο. Το ωφέλιμο φορτίο εδώ πρέπει πάντα να είναι συμβολοσειρά σε μορφή JSON. Πρώτα λοιπόν, διαβάζοντας την τρέχουσα ημερομηνία και ώρα και αποθηκεύοντάς την σε μια μεταβλητή χρησιμοποιώντας τις παρακάτω γραμμές
now = datetime.utcnow () #get ημερομηνία και ώρα current_time = now.strftime ('% Y-% m-% dT% H:% M:% SZ') # get τρέχουσα ώρα σε μορφή συμβολοσειράς
Στη συνέχεια, διαβάζουμε τις τιμές υγρασίας και θερμοκρασίας από τον αισθητήρα DHT11 και τον εμφανίζουμε σε οθόνη LCD. Η μεταβλητή υγρασία και θερμοκρασία διατηρούν την τιμή της υγρασίας και της θερμοκρασίας αντίστοιχα
υγρασία, θερμοκρασία = Adafruit_DHT.read_retry (sensor_name, sensor_pin) #read από αισθητήρα
και αποθηκεύστε τις αντίστοιχες τιμές σε θερμοκρασία και υγρασία
lcd.clear () # Καθαρίστε την οθόνη LCD lcd.message ('Temp =%.1f C'% θερμοκρασία) # Εμφάνιση της τιμής της θερμοκρασίας lcd.message ('\ nHum =%.1f %%'% υγρασία) #Display η τιμή του χρόνου υγρασίας. ύπνος (2) # Περιμένετε 2 δευτερόλεπτα και στη συνέχεια ενημερώστε τις τιμές
Όπως ειπώθηκε νωρίτερα, το ωφέλιμο φορτίο θα πρέπει να έχει τη μορφή συμβολοσειράς με αγκύλες γύρω από αυτό, προσθέτουμε την τιμή της ημερομηνίας, της ώρας, της θερμοκρασίας και της υγρασίας μετά τη μετατροπή της μεταβλητής σε συμβολοσειρές όπως φαίνεται παρακάτω.
#prepare το ωφέλιμο φορτίο σε μορφή συμβολοσειράς payload = '{"timestamp": "' + current_time + '", "suhu":' + str (θερμοκρασία) + ', "υγρασία":' + str (υγρασία) + '}'
Τέλος, όταν το ωφέλιμο φορτίο είναι έτοιμο, πρέπει να το δημοσιεύσουμε στον MQTT Client. Αυτό μπορεί να γίνει χρησιμοποιώντας την εντολή myMQTTclient.publish . Κατά τη δημοσίευση σε ένα πράγμα θα πρέπει επίσης να του δώσουμε ένα όνομα, εδώ το έχω ονομάσει DHT11 / data, αλλά μπορείτε να το ονομάσετε οτιδήποτε θέλετε. Αλλά βεβαιωθείτε ότι θυμάστε το όνομα, καθώς θα πρέπει να εγγραφείτε από το πράγμα μας για να δείτε τα δεδομένα.
Δοκιμή του προγράμματος python μέσω του Shell Window:
Μόλις το πρόγραμμα είναι έτοιμο, ξεκινήστε το χρησιμοποιώντας την επιλογή σας. Έχω χρησιμοποιήσει το Python IDE για να ξεκινήσω το πρόγραμμα στο παράθυρο κελύφους. Αν όλα είναι εντάξει, θα πρέπει να έχετε μια σύνδεση μηνύματος επιτυχημένη και όλο το ωφέλιμο φορτίο θα πρέπει να εμφανίζεται στο παράθυρο. Μπορείτε να ελέγξετε εάν οι τιμές θερμοκρασίας και υγρασίας διαβάζονται σωστά. Το ωφέλιμο φορτίο θα ενημερώνεται για κάθε 5 δευτερόλεπτα. Το παράθυρο κελύφους θα μοιάζει με αυτό παρακάτω
Εάν έχετε κάποιο πρόβλημα, βεβαιωθείτε ότι έχετε δώσει τις σωστές βασικές λεπτομέρειες και τη διεύθυνση του μεσίτη, ελέγξτε επίσης αν το πράγμα μπορεί να συνδεθεί με τη χρήση του λογισμικού MQTT.fx. Εάν το κέλυφος εμφανίζει επιτυχία σύνδεσης MQTT Client και κρέμεται εκεί, αυτό σημαίνει ότι ο αισθητήρας DHT11 δεν ανταποκρίνεται, ελέγξτε εάν έχετε συνδεθεί στον σωστό πείρο και ο αισθητήρας είναι λειτουργικός.
Εργαζόμενος:
Μόλις ξεκινήσετε το πρόγραμμα και λάβετε τις παραπάνω λεπτομέρειες στο παράθυρο κελύφους, αυτό σημαίνει ότι το πρόγραμμα αποκρίνεται σωστά και οι τιμές μεταφορτώνονται στο διακομιστή Amazon AWS. Μπορείτε επίσης να παρατηρήσετε την οθόνη LCD για να ελέγξετε αν λέει Δημοσιεύεται σε AWS-IoT κάθε 5 δευτερόλεπτα όπως φαίνεται παρακάτω.
Μπορούμε να μπει στην εφαρμογή MQTT.fx και να εγγραφείτε στο θέμα DHT11 / data . Τότε θα πρέπει να είμαστε σε θέση να λάβουμε όλα τα δεδομένα που δημοσιεύονται από το Raspberry Pi. Αυτά τα δεδομένα θα ενημερώνονται επίσης για κάθε 5 δευτερόλεπτα. η οθόνη MQTT θα μοιάζει με αυτό παρακάτω
Όπως μπορείτε να δείτε, το ωφέλιμο φορτίο λαμβάνεται στο λογισμικό MQTT όπως επισημαίνεται με μπλε χρώμα. Μπορείτε επίσης να παρακολουθήσετε το παρακάτω βίντεο για να μάθετε πώς λειτουργεί το έργο. Δεδομένου ότι τώρα έχουμε τα δεδομένα μας στο Διαδίκτυο, μπορούμε να τα χρησιμοποιήσουμε με άλλα εργαλεία που παρέχονται από την Amazon, όπως το Elastic search και το Lambda, για να αποθηκεύσουμε τα δεδομένα σε μια βάση δεδομένων ή να τα απεικονίσουμε στη συνέχεια σε ένα γράφημα. Υπάρχουν πολύ περισσότερες εφαρμογές, με βάση το πώς πρέπει να επωφεληθούμε από τα δεδομένα.
Ελπίζω ότι καταλάβατε το σεμινάριο και σας άρεσε να φτιάξετε κάτι παρόμοιο, εάν έχετε κάποιο πρόβλημα να το κάνετε αυτό, δημοσιεύστε το στην παρακάτω ενότητα σχολίων ή χρησιμοποιήστε τα φόρουμ για τεχνική βοήθεια.