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

UbiDots-Σύνδεση ενός ESP32 και δημοσίευση δεδομένων πολλαπλών αισθητήρων: 6 βήματα
UbiDots-Σύνδεση ενός ESP32 και δημοσίευση δεδομένων πολλαπλών αισθητήρων: 6 βήματα

Βίντεο: UbiDots-Σύνδεση ενός ESP32 και δημοσίευση δεδομένων πολλαπλών αισθητήρων: 6 βήματα

Βίντεο: UbiDots-Σύνδεση ενός ESP32 και δημοσίευση δεδομένων πολλαπλών αισθητήρων: 6 βήματα
Βίντεο: Next Videos - ESP32 Development Board (Web Server Project) 2024, Νοέμβριος
Anonim
UbiDots-Σύνδεση ενός ESP32 και δημοσίευση δεδομένων πολλαπλών αισθητήρων
UbiDots-Σύνδεση ενός ESP32 και δημοσίευση δεδομένων πολλαπλών αισθητήρων

Τα 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

Βήμα 2: Δημιουργία πύλης αιχμαλωσίας

Δημιουργία πύλης αιχμαλωσίας
Δημιουργία πύλης αιχμαλωσίας
Δημιουργία πύλης αιχμαλωσίας
Δημιουργία πύλης αιχμαλωσίας
Δημιουργία πύλης αιχμαλωσίας
Δημιουργία πύλης αιχμαλωσίας

Μια δεσμευμένη πύλη είναι μια ιστοσελίδα που εμφανίζεται σε νεοσυνδεδεμένους χρήστες πριν τους δοθεί ευρύτερη πρόσβαση στους πόρους του δικτύου. Εδώ εξυπηρετούμε τρεις ιστοσελίδες για να επιλέξουμε μεταξύ DHCP και Static IP Settings. μπορούμε να ορίσουμε τη διεύθυνση IP στο ESP με δύο τρόπους.

  • Διεύθυνση IP DHCP- είναι ένας τρόπος δυναμικής εκχώρησης της διεύθυνσης IP στη συσκευή. Η προεπιλεγμένη διεύθυνση IP του ESP είναι 192.168.4.1
  • Η στατική διεύθυνση IP- εκχώρηση μόνιμης διεύθυνσης IP στη συσκευή δικτύου μας. για να παρέχουμε τη στατική IP στη συσκευή πρέπει να ορίσουμε τη διεύθυνση IP, τη διεύθυνση πύλης και τη μάσκα υποδικτύου.

Η πρώτη ιστοσελίδα φιλοξενείται στη διεύθυνση 192.168.1.77. Εδώ παρέχεται στον Χρήστη τα κουμπιά επιλογής για να επιλέξετε μεταξύ των ρυθμίσεων DHCP και Στατικής IP. Στην επόμενη ιστοσελίδα, πρέπει να παρέχουμε τις πληροφορίες που σχετίζονται με την IP για να προχωρήσουμε περαιτέρω.

Κώδικας HTML

Ο κώδικας HTML για ιστοσελίδες μπορεί να βρεθεί σε αυτό το αποθετήριο Github. Μπορείτε να χρησιμοποιήσετε οποιοδήποτε IDE ή πρόγραμμα επεξεργασίας κειμένου όπως το Sublime ή το σημειωματάριο ++ για να δημιουργήσετε ιστοσελίδες HTML.

  • Πρώτα δημιουργήστε μια ιστοσελίδα HTML που περιέχει δύο κουμπιά επιλογής για να επιλέξετε μεταξύ DHCP και Στατικών ρυθμίσεων IP.
  • Τώρα δημιουργήστε το κουμπί για να υποβάλετε την απάντησή σας
  • Δώστε κάποιο όνομα στα κουμπιά επιλογής.
  • Η κλάση διακομιστή Ιστού ESP θα λάβει αυτά τα ονόματα ως ορίσματα και θα λάβει την απάντηση των κουμπιών επιλογής χρησιμοποιώντας αυτά τα ορίσματα
  • Τώρα εισάγετε ένα κουμπί "ΥΠΟΒΟΛΗ" για να στείλετε την απάντηση στη συσκευή. Στις άλλες ιστοσελίδες, έχουμε πλαίσια κειμένου.
  • Δώστε την τιμή ονόματος και τον τύπο εισαγωγής στο πλαίσιο κειμένου και προσθέστε ένα κουμπί υποβολής στην "ΥΠΟΒΟΛΗ" υποβολή της απάντησης.
  • Δημιουργήστε ένα κουμπί "ΕΠΑΝΑΦΟΡΑ" για να επαναφέρετε το περιεχόμενο του πεδίου κειμένου.

Βήμα 3: Παροχή διαπιστευτηρίων WiFi και UbiDots

Παροχή διαπιστευτηρίων WiFi και UbiDots
Παροχή διαπιστευτηρίων WiFi και UbiDots

Το κύριο πρόβλημα παρουσιάζεται κατά τη διαχείριση των διαπιστευτηρίων WiFi. Παρόλο που έχουμε βιβλιοθήκη WiFiMulti για αυτό όπου μπορούμε να δώσουμε πολλαπλά SSID και κωδικούς πρόσβασης στη συσκευή και η συσκευή θα συνδεθεί στο διαθέσιμο δίκτυο. Αλλά, τι γίνεται αν το διαθέσιμο δίκτυο δεν βρίσκεται στη λίστα WiFiMulti. Το να αναβοσβήνει συνεχώς η συσκευή ESP32 δεν είναι αξιόπιστη λύση.

Για την επίλυση αυτού του προβλήματος, φιλοξενούμε μια ιστοσελίδα όπου ο χρήστης μπορεί να υποβάλει το SSID και τον κωδικό πρόσβασης του διαθέσιμου δικτύου. Λειτουργεί ως εξής.

  • Η ιστοσελίδα φιλοξενείται στη στατική IP ή την DHCP IP, όπως την έχει επιλέξει ο χρήστης από την πύλη αιχμής
  • Αυτή η ιστοσελίδα περιέχει πεδία κειμένου για εισαγωγή SSID, κωδικού πρόσβασης και αναγνωριστικό UBIDOTS για σύνδεση της συσκευής με το UbiDots.
  • Εισαγάγετε το SSID και τον κωδικό πρόσβασης του τοπικού WiFi στα πεδία εισαγωγής, εισαγάγετε το αναγνωριστικό διακριτικού του UbiDot και εισαγάγετε ΥΠΟΒΟΛΗ
  • Αυτά τα διαπιστευτήρια αποθηκεύονται στο EEPROM του ESP32
  • Μετά από 60 δευτερόλεπτα, η συσκευή θα αποσυνδεθεί αυτόματα από το AP
  • Την επόμενη φορά που θα ενεργοποιήσετε τη συσκευή, Ο χρήστης δεν χρειάζεται να ακολουθήσει αυτήν τη διαδικασία. Η συσκευή θα λάβει αυτόματα τα διαπιστευτήρια χρήστη από το EEPROM και θα συνεχίσει με τη δημοσίευση των μετρήσεων των αισθητήρων στο UbiDots.

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

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

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

#define _TASK_TIMEOUT#περιλαμβάνει

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 από τους Ασύρματους αισθητήρες θερμοκρασίας και υγρασίας. Αυτό το πλαίσιο χειρίζεται για τη λήψη πραγματικών δεδομένων θερμοκρασίας και υγρασίας

uint8_t δεδομένα [29];

δεδομένα [0] = Serial1.read (); καθυστέρηση (k)? // chck for byte start if (data [0] == 0x7E) {while (! Serial1.available ()); για (i = 1; i <29; i ++) {data = Serial1.read (); καθυστέρηση (1)? } if (δεδομένα [15] == 0x7F) /////// για να ελέγξετε αν τα δεδομένα ανάκτησης είναι σωστά {if (δεδομένα [22] == 1) //////// βεβαιωθείτε ότι ο τύπος αισθητήρα είναι σωστό {

υγρασία = ((((δεδομένα [24]) * 256) + δεδομένα [25]) /100.0); υγρασία /=10.0; cTempint = ((((uint16_t) (δεδομένα [26]) << 8) | δεδομένα [27]); cTemp = (float) cTempint /100.0; cTemp /= 10.0; fTemp = cTemp * 1.8 + 32; fTemp /= 10.0; μπαταρία = τυχαία (100, 327); τάση = μπαταρία/100; nodeId = δεδομένα [16];}

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

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

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

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

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "things.ubidots.com";

ωφέλιμο φορτίο char [100], θέμα char [150];

// δημιουργία μεταβλητής για αποθήκευση αναγνωριστικού διακριτικού

String tokenId;

Δημιουργήστε μεταβλητές για αποθήκευση διαφορετικών δεδομένων αισθητήρων και δημιουργήστε μια μεταβλητή 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

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

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

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

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

Μονάδες

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

Συνιστάται: