Πίνακας περιεχομένων:

Δημοσίευση δεδομένων αισθητήρα ασύρματης πίεσης χρησιμοποιώντας MQTT: 7 βήματα
Δημοσίευση δεδομένων αισθητήρα ασύρματης πίεσης χρησιμοποιώντας MQTT: 7 βήματα

Βίντεο: Δημοσίευση δεδομένων αισθητήρα ασύρματης πίεσης χρησιμοποιώντας MQTT: 7 βήματα

Βίντεο: Δημοσίευση δεδομένων αισθητήρα ασύρματης πίεσης χρησιμοποιώντας MQTT: 7 βήματα
Βίντεο: Σεμινάριο Phyphox - I 2024, Νοέμβριος
Anonim
Δημοσίευση δεδομένων αισθητήρα ασύρματης πίεσης χρησιμοποιώντας MQTT
Δημοσίευση δεδομένων αισθητήρα ασύρματης πίεσης χρησιμοποιώντας MQTT

Τα ESP32 καιESP 8266 είναι πολύ οικεία SoC στον τομέα του IoT. Αυτά είναι ένα είδος όφελος για τα έργα IoT. Το ESP 32 είναι μια συσκευή με ενσωματωμένο WiFi και BLE. Απλώς δώστε τις διαμορφώσεις SSID, κωδικού πρόσβασης και IP και ενσωματώστε τα πράγματα στο cloud. Εδώ σε αυτό το διδακτικό, θα αναλογιστούμε μερικούς από τους βασικούς όρους του IoT όπως πλατφόρμα IoT, MQTT, Captive portals κ.λπ. Ας το περάσουμε λοιπόν

  • Η αρχιτεκτονική IoT με πολύ απλές λέξεις αποτελείται από μια ενσωματωμένη συσκευή και πλατφόρμα IoT για να τοποθετήσετε τη συσκευή στο σύννεφο. Εδώ χρησιμοποιούμε την πλατφόρμα UbiDots IoT για να απεικονίσουμε τα δεδομένα του αισθητήρα.
  • Η διαχείριση των ρυθμίσεων IP και των διαπιστευτηρίων χρήστη μπορεί να προκαλέσει πονοκέφαλο στον χρήστη. Τι γίνεται αν ο Χρήστης θέλει να αλλάξει τα διαπιστευτήρια WiFi; Τι γίνεται αν ο χρήστης θέλει να αλλάξει τις ρυθμίσεις DHCP/Στατική IP; Το να αναβοσβήνει το ESP32 κάθε φορά δεν είναι αξιόπιστο ούτε καν η λύση για αυτά τα προβλήματα. Έτσι, θα περάσουμε από την πύλη αιχμής για να αποθηκεύσουμε τα διαπιστευτήρια WiFi και άλλες διαμορφώσεις.
  • Το MQTT γίνεται τώρα ένας πολύ συνηθισμένος όρος στον κόσμο του IoT. έχει ξεπεράσει το αίτημα και τις απαντήσεις (HTTP) από το Publish and Subscribe λόγω της γρήγορης, στιβαρής και αδύνατης αρχιτεκτονικής.

Εδώ σε αυτό το διδακτικό, θα δείξουμε.

  • Χορήγηση διαπιστευτηρίων WiFi και MQTT χρησιμοποιώντας το Captive Portal.
  • Δημοσίευση και εγγραφή πολλών δεδομένων αισθητήρων στο UbiDots.
  • Ανάγνωση δεδομένων αισθητήρα από αισθητήρα ασύρματης πίεσης και θερμοκρασίας
  • Φιλοξενία φόρμας ιστού από το ESP32.
  • Ανάγνωση και γραφή από το SPIFFS ESP32.

Βήμα 1: Προδιαγραφή υλικού και λογισμικού

Προδιαγραφή υλικού

  • ESP32 WiFi/BLE
  • Αισθητήρας ασύρματης πίεσης και θερμοκρασίας

Προδιαγραφές λογισμικού

  • Arduino IDE
  • XCTU
  • Βοηθητικό πρόγραμμα Labview

Βήμα 2: Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας

Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας
Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας
Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας
Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας
Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας
Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας

Χαρακτηριστικά

  • Αισθητήρας βιομηχανικού βαθμού Αισθητήρας θερμοκρασίας ασύρματης πίεσης μεγάλης εμβέλειας
  • Εύρος λειτουργίας 0 έως 14000 mbar -40 ° έως +85 ° C (-40 ° έως 185 ° F)
  • Διαμορφώσιμος εσωτερικός υπολογισμός Ανάλυση πίεσης 0,012 έως 0,065 mbar
  • Διαμορφώσιμος εσωτερικός υπολογισμός olutionήφισμα θερμοκρασίας 0,002 έως 0,012 ° C
  • Ακρίβεια ± 2,5 mbar, ± 2 ° C
  • Απόλυτες Πιέσεις, Σχετική Πίεση και Σχετικό Υψόμετρο Αλλαγή εξόδων
  • Εύρος γραμμής θέασης 2 μιλίων με κεραία επί του σκάφους
  • Ανώτερη εμβέλεια LOS έως 28 μίλια με κεραίες υψηλής απόδοσης
  • Διασύνδεση με Raspberry Pi, Microsoft® Azure®, Arduino και άλλα
  • Ασύρματη δικτύωση πλέγματος χρησιμοποιώντας DigiMesh®

Διαμόρφωση αισθητήρα ασύρματης πίεσης και θερμοκρασίας χρησιμοποιώντας το βοηθητικό πρόγραμμα Labview και το XCTU

Ο αισθητήρας λειτουργεί σε δύο λειτουργίες

  • Λειτουργία διαμόρφωσης: Διαμόρφωση του αναγνωριστικού Pan, καθυστέρηση, αριθμός επαναλήψεων κ.λπ.
  • Λειτουργία εκτέλεσης: Εκτελούμε τη συσκευή σε λειτουργία εκτέλεσης. Και για να αναλύσουμε αυτές τις τιμές χρησιμοποιούμε το βοηθητικό πρόγραμμα Labview

Αυτό το περιβάλλον εργασίας χρήστη του Labview δείχνει τις τιμές σε ωραία γραφήματα. Δείχνει τις τρέχουσες καθώς και τις προηγούμενες τιμές. Μπορείτε να μεταβείτε σε αυτόν τον σύνδεσμο για να κατεβάσετε το περιβάλλον εργασίας χρήστη του Labview. κάντε κλικ στο εικονίδιο Εκτέλεση από το μενού της σελίδας προορισμού για να μεταβείτε στη λειτουργία εκτέλεσης.

Βήμα 3: Σύνδεση σε WiFi

Σύνδεση σε WiFi
Σύνδεση σε WiFi
Σύνδεση σε WiFi
Σύνδεση σε WiFi

Χρησιμοποιούμε την αποκλειστική πύλη για να αποθηκεύσουμε τα διαπιστευτήρια WiFi και να τοποθετήσουμε το δείκτη του ποντικιού στις ρυθμίσεις IP. Για τη λεπτομερή εισαγωγή στην πύλη αιχμαλωσίας, μπορείτε να διαβάσετε τα παρακάτω διδακτικά.

Η πύλη δέσμευσης μας δίνει την επιλογή να επιλέξουμε μεταξύ των ρυθμίσεων Static και DHCP. Απλώς εισάγετε τα διαπιστευτήρια όπως το Static IP, Subnet Mask, gateway και η Wireless Sensor Gateway θα διαμορφωθεί σε αυτήν την IP.

Φιλοξενείται μια ιστοσελίδα όπου εμφανίζεται μια λίστα με τα διαθέσιμα δίκτυα WiFi και εκεί RSSI. Επιλέξτε το δίκτυο WiFi και τον κωδικό πρόσβασης και πληκτρολογήστε υποβολή. Τα διαπιστευτήρια θα αποθηκευτούν στο EEPROM και η ρύθμιση IP θα αποθηκευτεί στο SPIFFS. Περισσότερα για αυτό μπορείτε να βρείτε σε αυτό το εκπαιδευτικό.

Βήμα 4: Ρύθμιση του UbiDots στο ESP32

Ρύθμιση UbiDots στο ESP32
Ρύθμιση UbiDots στο ESP32

Εδώ χρησιμοποιούμε Ασύρματους Αισθητήρες Πίεσης και Θερμοκρασίας με τη συσκευή ESP 32 για να λάβουμε τα δεδομένα θερμοκρασίας και υγρασίας. Στέλνουμε τα δεδομένα στο UbiDots χρησιμοποιώντας το πρωτόκολλο MQTT. Το MQTT ακολουθεί έναν μηχανισμό δημοσίευσης και εγγραφής και όχι αυτό το αίτημα και απάντηση. Είναι πιο γρήγορο και αξιόπιστο από το HTTP. Αυτό λειτουργεί ως εξής.

  • Χρησιμοποιούμε το Task Scheduler για να προγραμματίσουμε την εργασία, όπως λήψη δεδομένων από αισθητήρες, δημοσίευση των μετρήσεων αισθητήρων, εγγραφή σε θέμα MQTT.
  • Αρχικά, συμπεριλάβετε τα αρχεία κεφαλίδας Task Scheduler, είναι η παρουσία της και προγραμματίζει τις εργασίες.
  • Έχουμε προγραμματίσει δύο εργασίες που αναφέρονται σε δύο διαφορετικές λειτουργίες ελέγχου.

#define _TASK_TIMEOUT#include Scheduler ts; // --------- Εργασίες ------------ // Task tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Εργασία tWiFi (10* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

  • Η εργασία 1 είναι για την ανάγνωση της τιμής του αισθητήρα, η οποία εκτελείται για 1 δευτερόλεπτο έως ότου φτάσει το χρονικό όριο των 10 δευτερολέπτων.
  • Όταν τελειώσει το Task1 Συνδεόμαστε με τοπικό μεσίτη Wifi και MQTT.
  • Τώρα η Εργασία 2 είναι ενεργοποιημένη και απενεργοποιούμε την Εργασία 1
  • Η εργασία 2 είναι για τη δημοσίευση των δεδομένων αισθητήρων στον μεσίτη UbiDots MQTT. Αυτή η εργασία εκτελείται για 20 δευτερόλεπτα έως ότου φτάσει το χρονικό όριο των 20 δευτερολέπτων
  • Όταν το Task2 φτάσει στο χρόνο λήξης του Το Task 1 ενεργοποιείται ξανά και το Task2 απενεργοποιείται. Και πάλι εδώ, λαμβάνουμε την ενημερωμένη τιμή και η διαδικασία συνεχίζεται.

Ανάγνωση δεδομένων αισθητήρα I2C

Παίρνουμε ένα πλαίσιο 29 byte από τους Ασύρματους αισθητήρες θερμοκρασίας και υγρασίας. Αυτό το πλαίσιο χειρίζεται για να λάβει τα πραγματικά δεδομένα θερμοκρασίας και υγρασίας

εάν (Serial1.available ())

{data [0] = Serial1.read (); καθυστέρηση (k)? if (δεδομένα [0] == 0x7E) {while (! Serial1.available ()); για (i = 1; i <36; i ++) {data = Serial1.read (); καθυστέρηση (1)? } if (δεδομένα [15] == 0x7F) /////// για να ελέγξετε αν τα δεδομένα ανάκτησης είναι σωστά {if (δεδομένα [22] == 0x06) //////// βεβαιωθείτε ότι ο τύπος αισθητήρα είναι σωστό {int cTemp = ((((δεδομένα [24]) * 256) + δεδομένα [25])); int16_t abs_pressure = (((((uint16_t) (δεδομένα [26]) << 8) | δεδομένα [27])*0.001); int rlt_pressure = ((((δεδομένα [28]) * 256) + δεδομένα [29]) * 0.001); int16_t delta_alt = (((((uint16_t) (δεδομένα [30]) << 8) | δεδομένα [31])*0.01); μπαταρία πλωτήρα = ((δεδομένα [18] * 256) + δεδομένα [19]); τάση πλωτήρα = 0.00322 * μπαταρία. Serial.print ("Αριθμός αισθητήρα"); Serial.println (δεδομένα [16]); Serial.print ("Τύπος αισθητήρα"); Serial.println (δεδομένα [22]); Serial.print ("Έκδοση υλικολογισμικού"); Serial.println (δεδομένα [17]); Serial.print ("Θερμοκρασία σε Κελσίου:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Απόλυτη Πίεση:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Σχετική πίεση:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Delta Altitude:"); Serial.println (delta_alt); Serial.print ("μετρητής"); Serial.print ("ADC value:"); Serial.println (μπαταρία); Serial.print ("Τάση μπαταρίας:"); Serial.print (τάση); Serial.println ("\ n"); if (τάση <1) {Serial.println ("Timeρα για αντικατάσταση της μπαταρίας"); }}} else {for (i = 0; i <36; i ++) {Serial.print (data ); Serial.print (","); καθυστέρηση (1)? }}}}

Σύνδεση με το UbiDots MQTT API

Συμπεριλάβετε το αρχείο κεφαλίδας για τη διαδικασία MQTT

#περιλαμβάνω

ορίστε άλλες μεταβλητές για το MQTT όπως όνομα πελάτη, διεύθυνση μεσίτη, αναγνωριστικό διακριτικού

#define TOKEN "BBFF-*********************************" // Το Ubidots TOKEN#define MQTT_CLIENT_NAME "***************************"

char mqttBroker = "things.ubidots.com";

ωφέλιμο φορτίο char [100]? char θέμα [150]; // δημιουργία μεταβλητής για αποθήκευση διακριτικού αναγνωριστικού διακριτικού

Βήμα 5: Δημοσίευση αναγνωστικών αισθητήρων στο UbiDots

Δημοσίευση αναγνωστικών αισθητήρων στο UbiDots
Δημοσίευση αναγνωστικών αισθητήρων στο UbiDots

Δημιουργήστε μεταβλητές για αποθήκευση διαφορετικών δεδομένων αισθητήρων και δημιουργήστε μια μεταβλητή char για αποθήκευση θέματος

#define VARIABLE_LABEL_TEMPF "tempF" // Assing the variable label #define VARIABLE_LABEL_TEMPC "tempC" // Assing the variable label #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid label" // assing

char topic1 [100];

char topic2 [100]; char topic3 [100];

δημοσιεύστε τα δεδομένα στο αναφερόμενο θέμα MQTT, το ωφέλιμο φορτίο θα μοιάζει με {"tempc": {value: "tempData"}}

sprintf (topic1, "%s", ""); sprintf (topic1, "%s%s", "/v1.6/devices/", DEVICE_LABEL); sprintf (ωφέλιμο φορτίο, "%s", ""); // Καθαρίζει το ωφέλιμο sprintf (ωφέλιμο φορτίο, "{"%s / ":", VARIABLE_LABEL_TEMPC); // Προσθέτει την τιμή sprintf (ωφέλιμο φορτίο, "%s {" value / ":%s}", ωφέλιμο φορτίο, str_cTemp); // Προσθέτει την τιμή sprintf (ωφέλιμο φορτίο, "%s}", ωφέλιμο φορτίο); // Κλείνει τις αγκύλες του λεξικού Serial.println (ωφέλιμο φορτίο). Serial.println (client.publish (topic1, payload)? "Published": "notpublished"); // Κάντε το ίδιο και για άλλο θέμα

Το client.publish () δημοσιεύει τα δεδομένα στο UbiDots

Βήμα 6: Οπτικοποίηση των δεδομένων

Οπτικοποίηση των Δεδομένων
Οπτικοποίηση των Δεδομένων
  • Μεταβείτε στο Ubidots και συνδεθείτε στο λογαριασμό σας.
  • Μεταβείτε στον Πίνακα ελέγχου από την καρτέλα Δεδομένα που εμφανίζεται στο επάνω μέρος.
  • Τώρα κάντε κλικ στο εικονίδιο "+" για να προσθέσετε τα νέα γραφικά στοιχεία.
  • Επιλέξτε ένα widget από τη λίστα και προσθέστε μια μεταβλητή και συσκευές.
  • Τα δεδομένα των αισθητήρων μπορούν να απεικονιστούν στον πίνακα ελέγχου χρησιμοποιώντας διαφορετικά γραφικά στοιχεία.

Βήμα 7: Συνολικός κώδικας

Ο κωδικός Over για HTML και ESP32 μπορεί να βρεθεί σε αυτό το αποθετήριο GitHub.

Μονάδες

  • ncd ESP32 breakout board.
  • ncd Ασύρματοι αισθητήρες πίεσης και θερμοκρασίας
  • pubsubclient
  • UbiDots
  • Χρονοδιάγραμμα εργασιών

Συνιστάται: