- Τι είναι το MQTT;
- Εγκατάσταση του Mosquitto MQTT Broker στο Raspberry Pi
- Δοκιμάζοντας το Raspberry Pi Mosquitto Broker
- Διάγραμμα κυκλώματος
- Κωδικός και επεξήγηση
Το MQTT είναι ένα πρωτόκολλο που χρησιμοποιείται για την αποστολή και λήψη μηνυμάτων μέσω Διαδικτύου. Χρησιμοποιήσαμε προηγουμένως αυτό το πρωτόκολλο στο μετρητή Iot Electricity και στο Raspberry Pi Alexa για να δημοσιεύσουμε τα δεδομένα στο Διαδίκτυο. Σε αυτό το σεμινάριο θα μάθουμε περισσότερα για το MQTT και τους όρους που σχετίζονται με αυτό. Εδώ θα χρησιμοποιήσουμε το Raspberry Pi ως τοπικό μεσίτη MQTT και θα ελέγξουμε ένα LED που είναι συνδεδεμένο στο NodeMCU ESP12E μέσω του ταμπλό εφαρμογών MQTT. Ένας αισθητήρας DHT11 είναι επίσης συνδεδεμένος στο NodeMCU, ώστε να έχουμε την ανάγνωση της θερμοκρασίας και της υγρασίας στον πίνακα ελέγχου MQTT, χρησιμοποιώντας ξανά το Raspberry Pi ως τοπικό μεσίτη MQTT.
Ας ξεκινήσουμε, υποτιμώντας το MQTT και τους όρους που σχετίζονται με αυτό.
Τι είναι το MQTT;
Το MQTT σημαίνει το μήνυμα Queue Telemetry Transport που έχει σχεδιαστεί από την IBM. Αυτό το πρωτόκολλο είναι απλό και ελαφρύ, το οποίο χρησιμοποιείται για την αποστολή και λήψη μηνυμάτων μέσω Διαδικτύου και έχει σχεδιαστεί για συσκευές που έχουν χαμηλό εύρος ζώνης. Σήμερα αυτό το πρωτόκολλο χρησιμοποιείται συχνά στις συσκευές IoT για αποστολή και λήψη δεδομένων αισθητήρων. Επίσης, σε συστήματα οικιακού αυτοματισμού που βασίζονται σε IoT, αυτό το πρωτόκολλο μπορεί εύκολα να χρησιμοποιηθεί χωρίς τη χρήση πολλών δεδομένων στο Διαδίκτυο.
Υπάρχουν μερικοί όροι που χρησιμοποιούνται συχνά στο MQTT:
- Εγγραφείτε και δημοσιεύστε
- Μήνυμα
- Θέμα
- Μεσίτης
1. Εγγραφή και δημοσίευση: Εγγραφή σημαίνει λήψη δεδομένων από άλλη συσκευή και δημοσίευση μέσων για την αποστολή των δεδομένων σε άλλη συσκευή.
Όταν η συσκευή1 στέλνει τα δεδομένα στη συσκευή2 τότε είναι γνωστή ως Εκδότης και ένας άλλος είναι Συνδρομητής και αντίστροφα.
2. Μήνυμα: Τα μηνύματα είναι οι πληροφορίες που στέλνουμε και λαμβάνουμε. Μπορεί να είναι δεδομένα ή οποιοσδήποτε τύπος εντολής. Για παράδειγμα, εάν δημοσιεύουμε τα δεδομένα θερμοκρασίας στο cloud, τότε αυτά τα δεδομένα θερμοκρασίας είναι γνωστά ως μήνυμα.
3. Θέμα: Αυτός είναι ο τρόπος με τον οποίο καταχωρίζετε ενδιαφέρον για εισερχόμενα μηνύματα ή πώς καθορίζετε πού θέλετε να δημοσιεύσετε το μήνυμα. Τα θέματα παρουσιάζονται με συμβολοσειρές διαχωρισμένες με κάθετο. Τα δεδομένα δημοσιεύονται στα θέματα χρησιμοποιώντας το MQTT και στη συνέχεια η συσκευή MQTT εγγραφείτε στο θέμα για να λάβετε τα δεδομένα.
4. MQTT Broker: Αυτό το πράγμα είναι υπεύθυνο για τη λήψη όλων των μηνυμάτων από εκδότες, το φιλτράρισμα των μηνυμάτων και, στη συνέχεια, τη δημοσίευση των μηνυμάτων στους συνδρομητές που ενδιαφέρονται για αυτά.
Όταν αυτός ο μεσίτης φιλοξενείται στο cloud, τότε ονομάζεται MQTT cloud. Υπάρχουν πολλές υπηρεσίες MQTT που βασίζονται σε σύννεφο, όπως Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure κ.λπ.
Μπορούμε να δημιουργήσουμε τον δικό μας μεσίτη MQTT χρησιμοποιώντας το Raspberry Pi. Αυτός θα είναι ο τοπικός μεσίτης MQTT, δηλαδή μπορείτε να στέλνετε και να λαμβάνετε τα δεδομένα στο τοπικό σας δίκτυο όχι μόνο από οπουδήποτε. Έτσι, εδώ θα εγκαταστήσει Mosquitto MQTT μεσίτη στο Raspberry Pi να το τοπικό μεσίτη MQTT κάνει και θα στείλει τα δεδομένα θερμοκρασίας από την εφαρμογή ταμπλό NodeMCU να MQTT. Επίσης, θα ελέγξουμε ένα LED που είναι συνδεδεμένο στο NodeMCU χρησιμοποιώντας τον μεσίτη.
Εγκατάσταση του Mosquitto MQTT Broker στο Raspberry Pi
Ανοίξτε το τερματικό στο Raspberry pi και πληκτρολογήστε τις ακόλουθες εντολές για να εγκαταστήσετε τον μεσίτη
sudo apt update sudo apt install -y mosquitto mosquitto-clients
Περιμένετε να ολοκληρωθεί η εγκατάσταση. Τώρα, για να ξεκινήσετε τον μεσίτη κατά την εκκίνηση του raspberry pi, Πληκτρολογήστε την ακόλουθη εντολή
sudo systemctl ενεργοποιήστε το mosquitto.service
Αυτό είναι, είμαστε έτοιμοι να ξεκινήσουμε τον μεσίτη MQTT. Για να ελέγξετε ότι έχει εγκατασταθεί σωστά, εισαγάγετε την ακόλουθη εντολή
mosquitto -v
Αυτή η εντολή θα σας δώσει την έκδοση του μεσίτη MQTT. Πρέπει να είναι 1.4.x ή παραπάνω.
Δοκιμάζοντας το Raspberry Pi Mosquitto Broker
1. Εκτελέστε τον μεσίτη Mosquitto στο παρασκήνιο χρησιμοποιώντας την παρακάτω εντολή
mosquitto -d
2. Τώρα, θα εγγραφούμε ένα θέμα στο exampleTopic χρησιμοποιώντας την ακόλουθη εντολή
mosquitto_sub -d -t παράδειγμα Θέμα
3. Τώρα, θα δημοσιεύσουμε κάποιο μήνυμα στο exampleTopic
mosquitto_pub -d -t exampleTopic -m "Γεια σας κόσμος!"
Θα λάβετε τον Γεια σας κόσμο! Μήνυμα στο τερματικό συνδρομητών.
Τώρα, ήρθε η ώρα να ελέγξετε και να λάβετε τα δεδομένα από μια άλλη συσκευή στην περίπτωσή μας, χρησιμοποιώντας την εφαρμογή ταμπλό NodeMCU και MQTT .
- Πρώτα θα ελέγξουμε ένα LED στέλνοντας εντολή χρησιμοποιώντας την εφαρμογή, οπότε σε αυτήν την περίπτωση το NodeMCU συμπεριφέρεται ως συνδρομητής και η εφαρμογή ως εκδότης.
- Στη συνέχεια, το ESP12E έχει επίσης συνδεδεμένο αισθητήρα DHT11 και στέλνει αυτήν την ένδειξη θερμοκρασίας στην εφαρμογή Mobile MQTT, οπότε στην περίπτωση αυτή το κινητό θα είναι ο συνδρομητής και το NodeMCU θα είναι ο εκδότης. Και για να προωθήσετε αυτά τα μηνύματα στα αντίστοιχα Θέματα, χρησιμοποιείται ο μεσίτης Mosquitto MQTT.
Διάγραμμα κυκλώματος
Συνδέστε το κύκλωμα όπως φαίνεται στο διάγραμμα. Εδώ το DHT11 χρησιμοποιείται για τις μετρήσεις θερμοκρασίας, αλλά μπορεί επίσης να χρησιμοποιηθεί ένας αισθητήρας θερμοκρασίας LM35. Χρησιμοποιήσαμε ήδη αισθητήρα DHT11 σε πολλά από τα έργα μας, συμπεριλαμβανομένου του NodeMCU για την κατασκευή μετεωρολογικού σταθμού.
Ας αρχίσουμε να γράφουμε τον κωδικό για το NodeMCU για εγγραφή και δημοσίευση των δεδομένων.
Κωδικός και επεξήγηση
Εδώ θα χρησιμοποιήσουμε το πρότυπο βιβλιοθήκης Adafruit MQTT και θα αλλάξουμε τα απαιτούμενα πράγματα στον κώδικα. Ο ίδιος κωδικός μπορεί να χρησιμοποιηθεί για τη δημοσίευση και εγγραφή των δεδομένων στο Adafruit IO cloud αλλάζοντας λίγα πράγματα.Για αυτό το κατεβάστε τη βιβλιοθήκη Adafruit MQTT από το Σκίτσο -> Συμπερίληψη βιβλιοθήκης -> Διαχείριση βιβλιοθηκών. Αναζητήστε το Adafruit MQTT και εγκαταστήστε το. Μετά την εγκατάσταση της βιβλιοθήκης. Μεταβείτε στα παραδείγματα -> Adafruit mqtt library -> mqtt_esp8266
Στη συνέχεια, επεξεργαστείτε αυτόν τον κωδικό σύμφωνα με τη διεύθυνση IP του Raspberry Pi και τα διαπιστευτήρια Wi-Fi.
Συμπεριλάβετε όλες τις βιβλιοθήκες για ESP8266WIFI και Adafruit MQTT .
#περιλαμβάνω
Στη συνέχεια, ορίστε το SSID και τον κωδικό πρόσβασης για το Wi-Fi σας, από τα οποία θέλετε να συνδέσετε το ESP-12e. Βεβαιωθείτε ότι τα RPi και NodeMCU σας συνδέονται με το ίδιο δίκτυο.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Σε αυτήν την ενότητα ορίζεται ο διακομιστής Adafruit, στην περίπτωση αυτή η διεύθυνση IP του Raspberry Pi και της θύρας διακομιστή.
#define AIO_SERVER "διεύθυνση IP του Pi" #define AIO_SERVERPORT 1883
Τα παρακάτω πεδία θα παραμείνουν κενά επειδή δεν χρησιμοποιούμε το Adafruit cloud.
# καθορισμός AIO_USERNAME "" #define AIO_KEY ""
Στη συνέχεια, δημιουργήστε μια κλάση ESP8266 WiFiClient για σύνδεση με τον διακομιστή MQTT.
Πελάτης WiFiClient;
Ρυθμίστε την κλάση πελάτη MQTT περνώντας στον πελάτη WiFi και στο διακομιστή MQTT και τα στοιχεία σύνδεσης.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Ρυθμίστε μια ροή που ονομάζεται «Θερμοκρασία» για τη δημοσίευση της θερμοκρασίας.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ τροφοδοσίες / θερμοκρασία");
Ρυθμίστε μια ροή που ονομάζεται "led1" για εγγραφή σε αλλαγές.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Στη λειτουργία εγκατάστασης , δηλώνουμε το PIN του NodeMCU στο οποίο θέλετε να λάβετε έξοδο. Στη συνέχεια, συνδέστε το NodeMCU στο σημείο πρόσβασης Wi-Fi.
άκυρη ρύθμιση () { Serial.begin (115200); καθυστέρηση (10) pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Συνδεθείτε στο σημείο πρόσβασης WiFi. Serial.println (); Serial.println (); Serial.print ("Σύνδεση σε"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); ενώ (WiFi.status ()! = WL_CONNECTED) { …. …. … Ρύθμιση συνδρομής MQTT για τροφοδοσία LED. mqtt.subscribe (& led1); }
Στη λειτουργία βρόχου , θα διασφαλίσουμε ότι η σύνδεση με τον διακομιστή MQTT είναι ζωντανή χρησιμοποιώντας το MQTT_connect (); λειτουργία.
void loop () { MQTT_connect ();
Τώρα, εγγραφείτε "led" feed και λάβετε τη συμβολοσειρά από τον μεσίτη MQTT και μετατρέψτε αυτήν τη συμβολοσειρά σε αριθμό χρησιμοποιώντας το atoi (); Λειτουργήστε και γράψτε αυτόν τον αριθμό στην καρφίτσα LED χρησιμοποιώντας το digitalWrite (); λειτουργία.
Adafruit_MQTT_Subscribe * συνδρομή; while ((συνδρομή = mqtt.readSubscription (20000))) { if (συνδρομή == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Τώρα, αποκτήστε τη θερμοκρασία σε μια μεταβλητή και δημοσιεύστε αυτήν την τιμή χρησιμοποιώντας τη συνάρτηση Temperature.publish (t) .
float t = dht.readTemperature (); … .. εάν (! Temperature.publish (t)) { Serial.println (F ("Failed")); } αλλιώς { Serial.println (F ("OK!")); }
Πλήρης κωδικός με ένα βίντεο επίδειξης δίνεται στο τέλος αυτού του σεμιναρίου. Ανεβάστε τον κωδικό στην πλακέτα NodeMCU και ανοίξτε την εφαρμογή ταμπλό MQTT που έχετε κατεβάσει στο Smartphone.
Μπορείτε επίσης να ελέγξετε το Raspberry Pi GPIO από οπουδήποτε στον κόσμο χρησιμοποιώντας το MQTT cloud όπως το Adafruit IO, το MQTT.IO κ.λπ., το οποίο θα μάθουμε στο επόμενο σεμινάριο.