6.1 KiB
Ελέγξτε το νυχτερινό σας φως μέσω του Διαδικτύου - Wio Terminal
Σε αυτό το μέρος του μαθήματος, θα εγγραφείτε σε εντολές που αποστέλλονται από έναν MQTT broker στο Wio Terminal σας.
Εγγραφή σε εντολές
Το επόμενο βήμα είναι να εγγραφείτε στις εντολές που αποστέλλονται από τον MQTT broker και να ανταποκριθείτε σε αυτές.
Εργασία
Εγγραφείτε σε εντολές.
-
Ανοίξτε το έργο του νυχτερινού φωτός στο VS Code.
-
Προσθέστε τον παρακάτω κώδικα στο τέλος του αρχείου
config.h
για να ορίσετε το όνομα του θέματος για τις εντολές:const string SERVER_COMMAND_TOPIC = ID + "/commands";
Το
SERVER_COMMAND_TOPIC
είναι το θέμα στο οποίο η συσκευή θα εγγραφεί για να λαμβάνει εντολές για το LED. -
Προσθέστε την παρακάτω γραμμή στο τέλος της συνάρτησης
reconnectMQTTClient
για να εγγραφείτε στο θέμα εντολών όταν ο MQTT client επανασυνδέεται:client.subscribe(SERVER_COMMAND_TOPIC.c_str());
-
Προσθέστε τον παρακάτω κώδικα κάτω από τη συνάρτηση
reconnectMQTTClient
.void clientCallback(char *topic, uint8_t *payload, unsigned int length) { char buff[length + 1]; for (int i = 0; i < length; i++) { buff[i] = (char)payload[i]; } buff[length] = '\0'; Serial.print("Message received:"); Serial.println(buff); DynamicJsonDocument doc(1024); deserializeJson(doc, buff); JsonObject obj = doc.as<JsonObject>(); bool led_on = obj["led_on"]; if (led_on) digitalWrite(D0, HIGH); else digitalWrite(D0, LOW); }
Αυτή η συνάρτηση θα είναι η callback που θα καλείται από τον MQTT client όταν λαμβάνει ένα μήνυμα από τον server.
Το μήνυμα λαμβάνεται ως πίνακας από unsigned 8-bit ακέραιους, οπότε πρέπει να μετατραπεί σε πίνακα χαρακτήρων για να αντιμετωπιστεί ως κείμενο.
Το μήνυμα περιέχει ένα έγγραφο JSON, το οποίο αποκωδικοποιείται χρησιμοποιώντας τη βιβλιοθήκη ArduinoJson. Η ιδιότητα
led_on
του εγγράφου JSON διαβάζεται, και ανάλογα με την τιμή της, το LED ανάβει ή σβήνει. -
Προσθέστε τον παρακάτω κώδικα στη συνάρτηση
createMQTTClient
:client.setCallback(clientCallback);
Αυτός ο κώδικας ορίζει τη
clientCallback
ως τη callback που θα καλείται όταν λαμβάνεται ένα μήνυμα από τον MQTT broker.💁 Ο χειριστής
clientCallback
καλείται για όλα τα θέματα στα οποία έχει γίνει εγγραφή. Εάν αργότερα γράψετε κώδικα που ακούει σε πολλαπλά θέματα, μπορείτε να λάβετε το θέμα στο οποίο στάλθηκε το μήνυμα από την παράμετροtopic
που περνά στη συνάρτηση callback. -
Μεταφορτώστε τον κώδικα στο Wio Terminal σας και χρησιμοποιήστε το Serial Monitor για να δείτε τα επίπεδα φωτός που αποστέλλονται στον MQTT broker.
-
Ρυθμίστε τα επίπεδα φωτός που ανιχνεύονται από τη φυσική ή εικονική σας συσκευή. Θα δείτε μηνύματα να λαμβάνονται και εντολές να αποστέλλονται στο τερματικό. Θα δείτε επίσης το LED να ανάβει και να σβήνει ανάλογα με το επίπεδο φωτός.
💁 Μπορείτε να βρείτε αυτόν τον κώδικα στον φάκελο code-commands/wio-terminal.
😀 Έχετε προγραμματίσει με επιτυχία τη συσκευή σας να ανταποκρίνεται σε εντολές από έναν MQTT broker.
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.