- Τι είναι το πρωτόκολλο MQTT;
- Πώς λειτουργεί το MQTT;
- Ο μεσίτης του Eclipse Mosquitto
- Απαιτούμενα στοιχεία
- Eclipse MQTT Test-Circuit - Σχηματικό
- Προγραμματισμός ESP8266 για τη δημιουργία επικοινωνίας με το Broker
- Δοκιμή MQTT με ESP8266 χρησιμοποιώντας το Arduino
Τα τελευταία χρόνια, οι συσκευές IoT (Internet of Things) έχουν γίνει ένα διακριτό μέρος της καθημερινής μας ζωής. Από έξυπνα σπίτια, έξυπνους λαμπτήρες έως έξυπνες συσκευές. δημιουργοί και προγραμματιστές ενσωματώνουν αυτήν την τεχνολογία για να δημιουργήσουν ένα δίκτυο συνδεδεμένων συσκευών που κάνει την καθημερινή μας ζωή λίγο πιο συναρπαστική. Όλα αυτά κατέστη δυνατή χάρη στην ευκολία επικοινωνίας. Υπάρχουν πολλοί πιθανοί τρόποι επικοινωνίας μεταξύ συσκευών, αλλά σε εμπορικά προϊόντα και σε προϊόντα χόμπι, ένα μόνο πρωτόκολλο που χρησιμοποιείται συνήθως είναι το Transport Queuing Telemetry Transport (MQTT). Προηγουμένως δημιουργήσαμε ένα ραδιόφωνο FM ελεγχόμενο με φωνή χρησιμοποιώντας το Arduino και το Google Assistant που χρησιμοποιεί το MQTT για επικοινωνία με την πλακέτα NodeMCU. Ελέγξτε το αν σας φαίνεται ενδιαφέρον.
Σε αυτό το έργο, θα χρησιμοποιούμε έναν δωρεάν και δημοφιλή μεσίτη Eclipse MQTT και θα μάθουμε πώς να συνδέουμε μια συσκευή IoT (στην περίπτωσή μας, είναι μια μονάδα NodeMCU) σε έναν μεσίτη MQTT και να μεταφέρουμε δεδομένα μεταξύ του μεσίτη MQTT και του NodeMCU.
Τι είναι το πρωτόκολλο MQTT;
Πριν προχωρήσουμε περαιτέρω, είναι καλύτερα να έχουμε μια σαφή ιδέα για το MQTT (Message Queuing Τηλεμετρίας Μεταφορών) πρωτόκολλο. Πρόκειται για ένα ελαφρύ πρωτόκολλο ανταλλαγής μηνυμάτων που χρησιμοποιεί τη μέθοδο δημοσίευσης / εγγραφής και μεταφράζει μηνύματα μεταξύ πολλών συσκευών. Χρησιμοποιώντας το πρωτόκολλο MQTT, μπορούμε επίσης να στείλουμε / λάβουμε δεδομένα και να ελέγξουμε διάφορες συσκευές εξόδου, όπως δεδομένα αισθητήρα ανάγνωσης κ.λπ. Αναπτύσσεται πάνω από το TCP, γι 'αυτό είναι ταχύτερο από παρόμοια πρωτόκολλα όπως HTTP. Εκτός από αυτό, έχει πολλά άλλα πλεονεκτήματα σε σχέση με άλλα πρωτόκολλα όπως το πολύ ελαφρύ, οπότε δεν καταναλώνει υπερβολική μνήμη, μπορεί να λειτουργήσει με πολύ μικρότερο εύρος ζώνης δικτύου, επιπλέον, έχει ενσωματωμένο ένα ισχυρό πρωτόκολλο ασφαλείας. Αυτά τα χαρακτηριστικά το καθιστούν κατάλληλο για πολλές εφαρμογές.
Πώς λειτουργεί το MQTT;
Για να κατανοήσουμε τη λειτουργία του πρωτοκόλλου MQTT, πρέπει απλώς να κατανοήσουμε τρία βασικά πράγματα. Το παραπάνω διάγραμμα δείχνει ότι. Επίσης, το εξηγήσαμε παρακάτω στο άρθρο.
Πελάτης MQTT:
Ένας πελάτης MQTT είναι οποιαδήποτε συσκευή (μπορεί να είναι ένας μικροελεγκτής ή ένας διακομιστής) που εκτελεί λειτουργίες MQTT και επικοινωνεί με έναν κεντρικό διακομιστή, ο οποίος είναι γνωστός ως « μεσίτης ». Ο μεσίτης χειρίζεται την επικοινωνία δεδομένων μεταξύ των συνδεδεμένων πελατών.
Εκδότης MQTT:
Όταν ένας πελάτης θέλει να στείλει οποιαδήποτε πληροφορία, ο πελάτης είναι γνωστός ως «Εκδότης». Ο εκδότης θα δημοσιεύσει τις πληροφορίες για ένα συγκεκριμένο θέμα. Το " Θέμα " είναι μια διαδρομή όπου μπορούμε να δημοσιεύσουμε / εγγραφούμε μηνύματα. Ο μεσίτης στέλνει έπειτα τις πληροφορίες που δημοσιεύει ο χρήστης στους πελάτες (επίσης γνωστοί ως συνδρομητές) που έχουν εγγραφεί στο συγκεκριμένο θέμα.
Συνδρομητής MQTT:
Ο Συνδρομητής MQTT εγγράφεται σε θέματα ενός μεσίτη MQTT για να διαβάσει τα μηνύματα που έστειλε ο μεσίτης.
Ο μεσίτης του Eclipse Mosquitto
Το Eclipse Mosquitto είναι ένας μεσίτης ανοιχτού κώδικα MQTT, ο οποίος είναι ελαφρύς και είναι κατάλληλος για χρήση σε συσκευές IoT για επικοινωνία. Το πρωτόκολλο MQTT παρέχει μια ελαφριά μέθοδο μεταφοράς πληροφοριών χρησιμοποιώντας ένα μοντέλο δημοσίευσης / εγγραφής. Εάν θέλετε να μάθετε περισσότερα σχετικά με το θέμα, μπορείτε να επισκεφθείτε τον επίσημο ιστότοπο κουνουπιών.
Δημιουργία μεσίτη Eclipse Mosquitto:
Προκειμένου να δημιουργήσουμε επικοινωνία με τον μεσίτη, πρέπει να το ρυθμίσουμε πρώτα. Σε αυτό το έργο, μια εφαρμογή Android χρησιμοποιείται για τη δημοσίευση και εγγραφή των πληροφοριών στο Broker. Τα παρακάτω βήματα θα σας δώσουν μια καλύτερη ιδέα για τη διαδικασία εγκατάστασης.
Βήμα 1:
Αρχικά, κατεβάστε οποιαδήποτε εφαρμογή "MQTT client" διαθέσιμη στο Google Play Store / App Store και εγκαταστήστε την. Σε αυτό το έργο, χρησιμοποιείται μια εφαρμογή με την ονομασία "MQTT client", η οποία μοιάζει με την παρακάτω εικόνα.
Βήμα 2:
Κάντε κλικ στο σύμβολο "+" για να εμφανίσετε τις πρόσθετες επιλογές στην εφαρμογή, όπου θα προσθέσουμε έναν νέο μεσίτη. Όταν κάνετε κλικ στο κουμπί, εμφανίζεται μια νέα οθόνη όπως φαίνεται παρακάτω.
Βήμα-3:
Στη συνέχεια, οι λεπτομέρειες του μεσίτη πρέπει να συμπληρωθούν στο απαιτούμενο πεδίο. Πρώτα, κάντε κλικ στην επιλογή "Ενεργοποιημένο" που εμφανίζεται στην Εφαρμογή. Σε αυτό το έργο, χρησιμοποιείται ο μεσίτης Eclipse MQTT, οι λεπτομέρειες που πρέπει να συμπληρωθούν δίνονται παρακάτω:
Όνομα ψευδώνυμου: Δώστε ένα όνομα της προτίμησής σας
Κεντρικός υπολογιστής: mqtt.eclipse.org
Λιμάνι: 1883
Αναγνωριστικό πελάτη: Δώστε ένα αναγνωριστικό της προτίμησής σας
Οι παραπάνω λεπτομέρειες πρέπει να συμπληρωθούν στα αντίστοιχα πεδία τους. Όλα τα άλλα πεδία δεν είναι απαραίτητα και μπορούν να παραμείνουν κενά. Μετά την επιτυχή ολοκλήρωση, κάντε κλικ στο κουμπί αποθήκευσης για να αποθηκεύσετε τις λεπτομέρειες του Broker.
Μόλις τελειώσει, η διαδικασία ρύθμισης της εφαρμογής Android τελείωσε και τώρα μπορούμε να προχωρήσουμε στην πλευρά του υλικού.
Απαιτούμενα στοιχεία
Ο πλήρης κατάλογος των απαιτούμενων ανταλλακτικών περιγράφεται παρακάτω. Καθώς αυτό το κύκλωμα είναι απλό, μπορείτε να βρείτε όλα τα απαραίτητα ανταλλακτικά στο τοπικό κατάστημα χόμπι σας.
- NodeMCU
- LED
- Ψωμί
- Σύνδεση καλωδίων
- Καλώδιο προγραμματισμού
Eclipse MQTT Test-Circuit - Σχηματικό
Το διάγραμμα κυκλώματος για το έργο Basic MQTT δίνεται παρακάτω:
Προγραμματισμός ESP8266 για τη δημιουργία επικοινωνίας με το Broker
Ένας απλός κωδικός Arduino φροντίζει για όλες τις απαραίτητες επικοινωνίες μεταξύ του μεσίτη MQTT και του NodeMCU. Σε αυτήν την ενότητα, θα μάθουμε πώς λειτουργεί αυτή η λειτουργικότητα λεπτομερώς.
Ρυθμίστε το Arduino IDE και ανεβάστε τον κωδικό:
Εάν ανεβάζετε τον κωδικό στο NodeMCU για πρώτη φορά, πρέπει πρώτα να ρυθμίσετε το Arduino IDE. Για να το κάνετε αυτό, απλώς ακολουθήστε τις απλές οδηγίες που δίνονται παρακάτω.
Κατ 'αρχάς, το Open Arduino IDE, τότε πηγαίνετε στο Αρχείο-> Προτιμήσεις> Ρυθμίσεις .
Στη συνέχεια, αντιγράψτε το παρακάτω URL και επικολλήστε το στο πεδίο "Πρόσθετη διεύθυνση URL διαχειριστή πίνακα " και κάντε κλικ στο "Ok". Μπορείτε να ελέγξετε την παρακάτω εικόνα για να μάθετε πώς το έχουμε κάνει.
Σύνδεσμος:
Στη συνέχεια, μεταβείτε στην επιλογή Εργαλεία> Πίνακας> Διαχείριση πινάκων . Στο παράθυρο του διαχειριστή του πίνακα, πληκτρολογήστε ESP 8266 στο πλαίσιο αναζήτησης και πατήστε enter. Στη συνέχεια, επιλέξτε την πιο πρόσφατη έκδοση από το αναπτυσσόμενο μενού και κάντε κλικ στην εγκατάσταση. Η παρακάτω εικόνα θα σας δώσει μια σαφή ιδέα.
Τέλος, μόλις ολοκληρωθεί η εγκατάσταση, μεταβείτε στο Εργαλεία -> Πίνακας -> και επιλέξτε NodeMCU 1.0 (ESP-12E Module). Τώρα, μπορείτε να προγραμματίσετε το NodeMCU με το Arduino IDE. Καθώς ολοκληρώσαμε τη ρύθμιση του Arduino IDE, μπορούμε τώρα να ανεβάσουμε τον πλήρη κώδικα. Αλλά πρώτα, διαβάστε για τη γρήγορη εξήγηση ολόκληρου του κώδικα.
Πρώτον, συμπεριλάβαμε το "ESP8266WiFi.h" για τη χρήση ESP8266 και το "PubSubClient.h" για το MQTT.
Μπορείτε να βρείτε τη βιβλιοθήκη ESP8266 προεγκατεστημένη στη βιβλιοθήκη Arduino, αλλά πρέπει να κατεβάσετε τη βιβλιοθήκη PubSubClient από το σχετικό αποθετήριο GitHub.
#περιλαμβάνω
Στη συνέχεια, ορίστε τα διαπιστευτήρια δικτύου, όπως το όνομα χρήστη και τον κωδικό πρόσβασης Wi-Fi. Αντικαταστήστε τα διαπιστευτήριά σας στη θέση "διαχειριστής" και "12345678" αντίστοιχα.
const char * ssid = "διαχειριστής"; const char * password = "12345678";
Στη συνέχεια, πρέπει να ρυθμίσουμε τον διακομιστή MQTT. Έχουμε χρησιμοποιήσει τον διακομιστή Eclipse MQTT για αυτό το έργο, γι 'αυτό η διεύθυνση του διακομιστή δίνεται ως "mqtt.eclipse.org". Αλλά εάν σκοπεύετε να χρησιμοποιήσετε οποιονδήποτε άλλο διακομιστή όπως το Mosquitto, το Adafruit, τότε μπορείτε να τον αντικαταστήσετε με τη συγκεκριμένη διεύθυνση διακομιστή και τον αριθμό θύρας.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Στη συνέχεια, οι παρουσίες δημιουργούνται για κλάση WiFiClient και PubSubClient , τα οποία θα χρησιμοποιηθούν σε όλο το πρόγραμμα.
WiFiClient espClient; Πελάτης PubSubClient (espClient);
Στην ενότητα setup () , καλούμε πρώτα το WiFi.begin () , καλώντας αυτή τη μέθοδο θα συνδέσει το ESP στο HotSpot που προτιμάτε.
WiFi.begin (SSD, κωδικός πρόσβασης);
Στη συνέχεια, ελέγχουμε μια επιτυχημένη σύνδεση δικτύου χρησιμοποιώντας τη μέθοδο WiFi.status () Μετά από μια επιτυχημένη σύνδεση, εκτυπώνεται ένα μήνυμα στο Serial Monitor με το SSID του συνδεδεμένου δικτύου.
ενώ (WiFi.status ()! = WL_CONNECTED) {καθυστέρηση (500); Serial.println ("Σύνδεση σε WiFi.."); } Serial.print ("Συνδεδεμένο με WiFi:"); Serial.println (WiFi.SSID ());
Τώρα, πρέπει να δημιουργήσουμε έναν μεσίτη. Για αυτό, χρησιμοποιήσαμε τη μέθοδο setServer . Αυτή η μέθοδος παίρνει δύο επιχειρήματα που έχουμε προκαθορίσει νωρίτερα. Τώρα, εάν θέλουμε να λαμβάνουμε μηνύματα από το διακομιστή, πρέπει να δημιουργήσουμε μια λειτουργία επανάκλησης. Για αυτό, χρησιμοποιούμε τη μέθοδο setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Τώρα, χρησιμοποιήσαμε τη συνάρτηση connect (clientID) για σύνδεση με τον πελάτη ESP8266. Εδώ το clientID είναι το όνομα του πελάτη και πρέπει να είναι μοναδικό. Εάν είναι συνδεδεμένο, τότε μπορεί να εμφανιστεί ένα μήνυμα επιτυχίας μέσα στη σειριακή οθόνη.
εάν (client.connect ("ESP8266")) {Serial.println ("συνδεδεμένο"); } αλλιώς {Serial.print ("απέτυχε με κατάσταση") Serial.println (client.state ()); καθυστέρηση (2000); }
Στη συνέχεια, καλούμε το client.subscribe () , μια ενσωματωμένη συνάρτηση MQTT, η οποία χρησιμοποιείται για την εγγραφή σε ένα συγκεκριμένο θέμα. Για αυτό το έργο, χρησιμοποιήσαμε το " esp / test " ως όνομα συνδρομητή μας.
client.subscribe ("esp / test");
Τώρα, η λειτουργία MQTTcallback καλείται για να ελέγξει εάν υπάρχουν διαθέσιμες ενημερωμένες πληροφορίες ή όχι. Εάν υπάρχουν νέα δεδομένα, αυτή η λειτουργία χειρίζεται τα ληφθέντα δεδομένα και εκτυπώνει ένα μήνυμα στη σειριακή οθόνη με το αρχικό μήνυμα και το όνομα θέματος όπου λαμβάνεται το μήνυμα.
Στη συνέχεια, μετατρέπουμε τα μηνύματα σε συμβολοσειρά, ώστε να μπορούν να συγκριθούν και να ελεγχθούν για τυχόν ενέργειες ενεργοποίησης. Σε αυτό το έργο, ένα LED ανάβει / απενεργοποιεί χρησιμοποιώντας εντολές MQTT, όπως φαίνεται στον παρακάτω κώδικα.
για (int i = 0; i <length; i ++) {message = message + (char) ωφέλιμο φορτίο; } Serial.print (μήνυμα); εάν (μήνυμα == "on") {digitalWrite (LED, HIGH); }
Τέλος, για να δημοσιεύσετε τις πληροφορίες σχετικά με το θέμα. Χρησιμοποιείται η συνάρτηση client.publish () . Σε αυτό το έργο, ελέγχεται η κατάσταση ενός κουμπιού, εάν πατηθεί το κουμπί, τότε ένα μήνυμα δημοσιεύεται σε ένα θέμα " esp / test1 " όπως φαίνεται παρακάτω.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Γεια σας από ESP8266"); } αλλιώς client.loop ();
Δοκιμή MQTT με ESP8266 χρησιμοποιώντας το Arduino
Για την τελική μας δοκιμή, θα χρησιμοποιήσουμε την εφαρμογή Android, την οποία έχουμε ρυθμίσει νωρίτερα.
Ανοίξτε την εφαρμογή πελάτη MQTT και βεβαιωθείτε ότι το κινητό σας διαθέτει ενεργή σύνδεση στο Διαδίκτυο. Επίσης, το hotspot στο οποίο είναι συνδεδεμένο το NodeMCU πρέπει να έχει ενεργή σύνδεση στο Διαδίκτυο. Μόλις όλα συνδεθούν στο Διαδίκτυο, θα στείλουμε μια συμβολοσειρά "Hello from ESP8266" από τη μονάδα ESP, η οποία θα αντικατοπτρίζεται στην εφαρμογή Android και θα λάβουμε μια ειδοποίηση. Στη συνέχεια, θα στείλουμε μια συμβολοσειρά από την εφαρμογή Android, η οποία θα ανάψει μια LED που είναι συνδεδεμένη στην πλακέτα ESP8266 Node MCU.
Βήμα-1: (Εγγραφείτε στο θέμα):
Κάντε κλικ στην επιλογή Saved MQTT στην εφαρμογή, την οποία έχουμε διαμορφώσει νωρίτερα. Θα εμφανιστεί μια οθόνη, όπου θα σας ζητηθεί να "Εγγραφείτε σε ένα θέμα". Έχουμε διαμορφώσει προηγουμένως το θέμα ως " esp / test1 ". Έτσι, στην εφαρμογή Android, θα γράψουμε το " esp / test1 ". Κάντε κλικ στο Εγγραφή, κάτι τέτοιο θα σας παρουσιάσει μια οθόνη όπως παρακάτω, όπου θα γραφτεί σαν "Δεν έχει ληφθεί μήνυμα" από το συγκεκριμένο Θέμα.
Τώρα, κάντε κλικ στο κουμπί «Connected» που είναι συνδεδεμένο με τον κόμβοMCU. Τώρα σύμφωνα με τον κωδικό μας, ένα μήνυμα « Γεια σας από το ESP8266 » θα δημοσιευτεί στο Θέμα και θα εμφανιστεί μια ειδοποίηση στην οθόνη με το μήνυμα που ελήφθη όπως φαίνεται παρακάτω.
Βήμα-2: Δημοσίευση στο θέμα:
Τώρα για δημοσίευση στο θέμα, κάντε κλικ στο κουμπί ΕΠΑΝΩ ΒΕΛΟΣ της Εφαρμογής και θα ανοίξει μια οθόνη όπως φαίνεται παρακάτω.
Τώρα, στο πεδίο Θέμα, γράψτε " esp / test " και στο πεδίο μηνύματος, γράψτε " on " ή " off " για να ανάψετε και να σβήσετε το LED αντίστοιχα. Για παράδειγμα, εάν το "on" δημοσιεύεται στο θέμα, τότε το LED θα ανάψει και αν το "off" δημοσιευτεί στο θέμα, τότε το LED θα σβήσει.
Ελπίζω να σας άρεσε το άρθρο και να μάθετε κάτι νέο. Εάν έχετε οποιεσδήποτε ερωτήσεις σχετικά με αυτό το άρθρο, μη διστάσετε να σχολιάσετε παρακάτω ή μπορείτε να χρησιμοποιήσετε το φόρουμ μας.