Πίνακας περιεχομένων:
- Βήμα 1: Ρύθμιση λογαριασμού AWS
- Βήμα 2: Προδιαγραφές υλικού και λογισμικού
- Βήμα 3: Ασύρματοι αισθητήρες δόνησης και θερμοκρασίας
- Βήμα 4: Υλικολογισμικό ESP32 AWS
- Βήμα 5: Λήψη δεδομένων αισθητήρα από αισθητήρα ασύρματης δόνησης και θερμοκρασίας
- Βήμα 6: Σύνδεση στο AWS
- Βήμα 7: Οπτικοποίηση δεδομένων σε AWS
- Βήμα 8: Συνολικός κώδικας
Βίντεο: Ξεκινώντας με το AWS IoT με ασύρματο αισθητήρα θερμοκρασίας χρησιμοποιώντας MQTT: 8 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Σε προηγούμενα Instructables, έχουμε περάσει από διαφορετικές πλατφόρμες cloud όπως Azure, Ubidots, ThingSpeak, Losant κ.λπ. Χρησιμοποιούμε το πρωτόκολλο MQTT για την αποστολή των δεδομένων αισθητήρων στο σύννεφο σχεδόν σε όλη την πλατφόρμα του cloud. Για περισσότερες πληροφορίες σχετικά με το MQTT, τα πλεονεκτήματα και τα οφέλη του σε σχέση με το πρωτόκολλο HTTP, μπορείτε να ανατρέξετε σε αυτό το διδακτικό.
Σε αυτό το διδακτικό, θα μεγεθύνουμε σε μια άλλη και πιο οικεία πλατφόρμα cloud cloud Amazon Web Services. Πολλοί από εσάς μπορεί να είστε εξοικειωμένοι με το AWS, γνωστό ως Amazon Web Services και τη λειτουργικότητα του cloud που παρέχεται από το AWS. Αποτελεί τον πυρήνα της ανάπτυξης ιστοσελίδων για πολλά χρόνια. Με την αυξανόμενη κλίμακα εφαρμογών IoT, το AWS κατέληξε στη λύση του AWSIoT. Το AWSIoT είναι μια αξιόπιστη λύση για τη φιλοξενία εφαρμογών IoT.
Ακολουθώντας αυτό το διδακτικό:
- Θα μπορείτε να δημιουργήσετε λογαριασμό AWS για την εφαρμογή IoT
- Θα μπορείτε να συνδέσετε το ESP32 στον πυρήνα AWS IoT
- Αποστολή και λήψη μηνυμάτων χρησιμοποιώντας πρωτόκολλο MQTT και
- Οπτικοποιήστε τα αποσταλμένα δεδομένα στο AWS
Βήμα 1: Ρύθμιση λογαριασμού AWS
Η δημιουργία λογαριασμού AWS είναι αρκετά εύκολη. Απλώς πρέπει να ανεβάσετε μερικά πιστοποιητικά, να επισυνάψετε πολιτικές σε αυτήν, να καταχωρίσετε τη συσκευή και να αρχίσετε να λαμβάνετε μηνύματα δεδομένων αισθητήρα στο AWS.
Για να ρυθμίσετε τον λογαριασμό AWS ακολουθήστε αυτό το σεμινάριο.
Βήμα 2: Προδιαγραφές υλικού και λογισμικού
Προδιαγραφές λογισμικού
Ένας λογαριασμός AWS
Προδιαγραφή υλικού
- ESP32
- Ασύρματος αισθητήρας θερμοκρασίας και δόνησης
- Δέκτης Zigmo Gateway
Βήμα 3: Ασύρματοι αισθητήρες δόνησης και θερμοκρασίας
Πρόκειται για έναν ασύρματο αισθητήρα κραδασμών και θερμοκρασίας Industrial IoT Long Range, που μπορεί να υπερηφανεύεται για εμβέλεια 2 Mile χρησιμοποιώντας αρχιτεκτονική ασύρματης δικτύωσης πλέγματος. Ενσωματώνοντας έναν αισθητήρα δόνησης και θερμοκρασίας 16-bit, αυτός ο αισθητήρας μεταδίδει υψηλής ακρίβειας δεδομένα δόνησης σε διαστήματα καθορισμένα από τον χρήστη. Έχει τα ακόλουθα χαρακτηριστικά:
- Αισθητήρας δόνησης βιομηχανικού βαθμού 3 αξόνων με εύρος ± 32g
- Υπολογίζει δόνηση RMS, MAX και MIN g
- Αφαίρεση θορύβου χρησιμοποιώντας φίλτρο χαμηλής διέλευσης
- Εύρος συχνοτήτων (εύρος ζώνης) έως 12, 800 Hz
- Ρυθμός δείγματος έως 25, 600Hz
- Κρυπτογραφημένη επικοινωνία με ασύρματο εύρος 2 μιλίων
- Εύρος θερμοκρασίας λειτουργίας -40 έως +85 ° C
- Επιτοίχιο ή με μαγνήτη περίβλημα με βαθμολογία IP65 Παράδειγμα λογισμικού για Visual Studio και LabVIEW
- Αισθητήρας δόνησης με εξωτερική επιλογή ανιχνευτή
- Έως 500, 000 κιβώτια ταχυτήτων από 4 μπαταρίες AA Πολλές διαθέσιμες επιλογές πύλης και μόντεμ
Βήμα 4: Υλικολογισμικό ESP32 AWS
Για να συνδεθείτε στο AWS και να ξεκινήσετε την αποστολή των δεδομένων, ακολουθήστε τα παρακάτω βήματα
- Κατεβάστε τη βιβλιοθήκη AWS από το ακόλουθο αποθετήριο Github
- κλωνοποιήστε το repo και τοποθετήστε το αρχείο AWS_IOT στο φάκελο βιβλιοθήκης του καταλόγου Arduino
git clone
Πάμε τώρα στον κώδικα:
- Σε αυτήν την εφαρμογή, χρησιμοποιήσαμε μια δεσμευμένη πύλη για να αποθηκεύσουμε τα διαπιστευτήρια του WiFi και να τοποθετήσουμε το δείκτη του ποντικιού στις ρυθμίσεις IP. Για τη λεπτομερή εισαγωγή στην πύλη αιχμαλωσίας, μπορείτε να διαβάσετε τα παρακάτω διδακτικά.
- Η πύλη δέσμευσης μας δίνει την επιλογή να επιλέξουμε μεταξύ των ρυθμίσεων Static και DHCP. Απλώς εισάγετε τα διαπιστευτήρια όπως το Static IP, Subnet Mask, gateway και η Wireless Sensor Gateway θα διαμορφωθεί σε αυτήν την IP.
- Φιλοξενείται μια ιστοσελίδα όπου εμφανίζεται μια λίστα με τα διαθέσιμα δίκτυα WiFi και εκεί RSSI. Επιλέξτε το δίκτυο WiFi και τον κωδικό πρόσβασης και πληκτρολογήστε υποβολή. Τα διαπιστευτήρια θα αποθηκευτούν στο EEPROM και η ρύθμιση IP θα αποθηκευτεί στο SPIFFS. Περισσότερα για αυτό μπορείτε να βρείτε σε αυτό το εκπαιδευτικό.
Βήμα 5: Λήψη δεδομένων αισθητήρα από αισθητήρα ασύρματης δόνησης και θερμοκρασίας
Λαμβάνουμε ένα πλαίσιο 54-byte από τους Ασύρματους αισθητήρες θερμοκρασίας και δόνησης. Αυτό το πλαίσιο χειρίζεται για να λάβει την πραγματική θερμοκρασία και τα δεδομένα δόνησης.
Το ESP32 διαθέτει τρία UART για σειριακή χρήση
- RX0 GPIO 3, TX0 GPIO 1
- RX1 GPIO9, TX1 GPIO 10
- RX2 GPIO 16, TX2 GPIO 17
και 3 σειριακές θύρες υλικού
- Κατα συρροη
- Σειριακός 1
- Σειριακό2
Αρχικά, προετοιμάστε το αρχείο επικεφαλίδας σειριακού υλικού. Εδώ θα χρησιμοποιήσουμε RX2 και TX2 aka. GPIO 16 και GPIO 17 ακίδες του πίνακα ESP32 για λήψη των σειριακών δεδομένων.
#περιλαμβάνω
# καθορισμός RXD2 16 # καθορισμός TXD2 17
Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // καρφίτσες 16 rx2, 17 tx2, 19200 bps, 8 bits no parity 1 stop bit
Τα παρακάτω βήματα θα σας οδηγήσουν περαιτέρω στη λήψη των πραγματικών τιμών του αισθητήρα
- Δημιουργήστε μεταβλητές για αποθήκευση θερμοκρασίας, υγρασίας, μπαταρίας και άλλων τιμών αισθητήρων
- Ορίστε τα Rx, tx pin, baud rate και parity bits για το σειριακό υλικό
- Αρχικά, ελέγξτε ότι υπάρχει κάτι για ανάγνωση χρησιμοποιώντας το Serial1.available ()
- Θα λάβουμε το πλαίσιο των 54 byte.
- Ελέγξτε για 0x7E που είναι byte έναρξης.
- Τα δεδομένα δόνησης αποτελούνται από τιμή RMS για τον 3 άξονα, ελάχιστες τιμές για 3 άξονες, μέγιστες τιμές για 3 άξονες.
- Οι τιμές θερμοκρασίας και μπαταρίας θα περιέχουν 2 byte δεδομένων
- λάβετε το όνομα του αισθητήρα, τον τύπο, η έκδοση του αισθητήρα θα περιέχει 1 byte δεδομένων και μπορείτε να τα πάρετε από εκεί αντίστοιχη διεύθυνση
if (Serial2.available ()) {Serial.println ("Read Serial"); δεδομένα [0] = Serial2.read (); καθυστέρηση (k)? if (δεδομένα [0] == 0x7E) {Serial.println ("Got Packet"); ενώ (! Serial2.available ()); για (i = 1; i <55; i ++) {data = Serial2.read (); καθυστέρηση (1)? } if (δεδομένα [15] == 0x7F) /////// για να ελέγξετε αν τα δεδομένα ανάκτησης είναι σωστά {if (δεδομένα [22] == 0x08) //////// βεβαιωθείτε ότι ο τύπος αισθητήρα είναι σωστό {rms_x = ((uint16_t) (((δεδομένα [24]) << 16) + ((δεδομένα [25]) << 8) + (δεδομένα [26]))/100); rms_y = ((uint16_t) (((δεδομένα [27]) << 16) + ((δεδομένα [28]) << 8) + (δεδομένα [29]))/100); rms_z = ((uint16_t) (((δεδομένα [30]) << 16) + ((δεδομένα [31]) << 8) + (δεδομένα [32]))/100); int16_t max_x = ((uint16_t) (((δεδομένα [33]) << 16) + ((δεδομένα [34]) << 8) + (δεδομένα [35]))/100); int16_t max_y = ((uint16_t) (((δεδομένα [36]) << 16) + ((δεδομένα [37]) << 8) + (δεδομένα [38]))/100); int16_t max_z = ((uint16_t) (((δεδομένα [39]) << 16) + ((δεδομένα [40]) << 8) + (δεδομένα [41]))/100);
int16_t min_x = ((uint16_t) (((δεδομένα [42]) << 16) + ((δεδομένα [43]) << 8) + (δεδομένα [44]))/100); int16_t min_y = ((uint16_t) (((δεδομένα [45]) << 16) + ((δεδομένα [46]) << 8) + (δεδομένα [47]))/100); int16_t min_z = ((uint16_t) (((δεδομένα [48]) << 16) + ((δεδομένα [49]) << 8) + (δεδομένα [50]))/100);
cTemp = (((((δεδομένα [51]) * 256) + δεδομένα [52])); μπαταρία πλωτήρα = ((δεδομένα [18] * 256) + δεδομένα [19]); τάση = 0.00322 * μπαταρία. Serial.print ("Αριθμός αισθητήρα"); Serial.println (δεδομένα [16]); senseNumber = δεδομένα [16]; Serial.print ("Τύπος αισθητήρα"); Serial.println (δεδομένα [22]); Serial.print ("Έκδοση υλικολογισμικού"); Serial.println (δεδομένα [17]); Serial.print ("Θερμοκρασία σε Κελσίου:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("δόνηση RMS στον άξονα Χ:"); Serial.print (rms_x); Serial.println ("mg"); Serial.print ("δόνηση RMS στον άξονα Υ:"); Serial.print (rms_y); Serial.println ("mg"); Serial.print ("δόνηση RMS στον άξονα Ζ:"); Serial.print (rms_z); Serial.println ("mg");
Serial.print ("Ελάχιστη δόνηση στον άξονα Χ:");
Serial.print (min_x); Serial.println ("mg"); Serial.print ("Ελάχιστη δόνηση στον άξονα Υ:"); Serial.print (min_y); Serial.println ("mg"); Serial.print ("Ελάχιστη δόνηση στον άξονα Ζ:"); Serial.print (min_z); Serial.println ("mg");
Serial.print ("ADC value:");
Serial.println (μπαταρία); Serial.print ("Τάση μπαταρίας:"); Serial.print (τάση); Serial.println ("\ n"); if (τάση <1) {Serial.println ("Timeρα για αντικατάσταση της μπαταρίας"); }}} else {for (i = 0; i <54; i ++) {Serial.print (data ); Serial.print (","); καθυστέρηση (1)? }}}}
Βήμα 6: Σύνδεση στο AWS
- Συμπεριλάβετε αρχεία κεφαλίδας AWS_IOT.h, WiFi.h για να δημιουργήσετε μια σύνδεση με το διανομέα AWSIoT
- Εισαγάγετε τη διεύθυνση κεντρικού υπολογιστή σας, το αναγνωριστικό πελάτη που θα είναι το όνομα πολιτικής και το όνομα θέματος που θα είναι το όνομα του αντικειμένου
// ********* AWS Credentials ************ // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com" ? char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";
Δημιουργήστε μια μεταβλητή char για να αποθηκεύσετε το JSON σας, σε αυτήν την περίπτωση, έχουμε δημιουργήσει μια μορφή αποθήκευσης του JSON
const char *format = "{" SensorId / ": \"%d / ", \" messageId / ":%d, \" rmsX / ":%d, \" rmsY / ":%d, \" rmsZ / ":%d, \" cTemp / ":%d, \" τάση / ":%. 2f}";
Δημιουργήστε ένα παράδειγμα της κλάσης AWS_IOT
AWS_IOT esp; // Παρουσίαση κλάσης AWS_IOT
Τώρα συνδεθείτε στο διανομέα AWSIoT χρησιμοποιώντας την ακόλουθη μέθοδο
void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("Σύνδεση με AWS"); καθυστέρηση (1000)?
εάν (0 == hornbill.subscribe (TOPIC_NAME, mySubCallBackHandler))
{Serial.println ("Εγγραφή με επιτυχία"); } else {Serial.println ("Η εγγραφή απέτυχε, ελέγξτε το όνομα του πράγματος και τα πιστοποιητικά"); ενώ (1)? }} else {Serial.println ("Η σύνδεση AWS απέτυχε, Ελέγξτε τη διεύθυνση HOST"); ενώ (1)? }
καθυστέρηση (2000).
}
δημοσιεύστε τα δεδομένα του αισθητήρα μετά από κάθε 1 λεπτό
if (tick> = 60) // δημοσίευση στο θέμα κάθε 5 δευτερόλεπτα {tick = 0? ωφέλιμο φορτίο char [PAYLOAD_MAX_LEN]; snprintf (ωφέλιμο φορτίο, PAYLOAD_MAX_LEN, μορφή, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, τάση); Serial.println (ωφέλιμο φορτίο); if (hornbill.publish (TOPIC_NAME, ωφέλιμο φορτίο) == 0) {Serial.print ("Δημοσίευση μηνύματος:"); Serial.println (ωφέλιμο φορτίο); } else {Serial.println ("Η δημοσίευση απέτυχε"); }} vTaskDelay (1000 / θύραTICK_RATE_MS); τικ ++;
Βήμα 7: Οπτικοποίηση δεδομένων σε AWS
- Συνδεθείτε στον λογαριασμό σας AWS.
- στην αριστερή γωνία της γραμμής εργαλείων, θα βρείτε την καρτέλα Υπηρεσίες
- Κάντε κλικ σε αυτήν την καρτέλα και στην επικεφαλίδα Internet of Things επιλέξτε IoT Core.
- Επιλέξτε το QoS και όχι. μηνυμάτων προς τους συνδρομητές. Εισαγάγετε το όνομα του θέματος.
Βήμα 8: Συνολικός κώδικας
Μπορείτε να βρείτε τον συνολικό κώδικα σε αυτό το αποθετήριο Github.
Μονάδες
- Arduino Json
- Ασύρματοι αισθητήρες θερμοκρασίας και υγρασίας
- ESP32
- PubSubClient
Συνιστάται:
Ξεκινώντας με τη διεπαφή αισθητήρα I2C; - Διασυνδέστε το MMA8451 σας χρησιμοποιώντας ESP32: 8 βήματα
Ξεκινώντας με τη διεπαφή αισθητήρα I2C; - Διασυνδέστε το MMA8451 σας χρησιμοποιώντας ESP32: Σε αυτό το σεμινάριο, θα μάθετε τα πάντα σχετικά με τον τρόπο εκκίνησης, σύνδεσης και απόκτησης συσκευής I2C (Επιταχυνσιόμετρο) που λειτουργεί με χειριστήριο (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Αισθητήρας/μετρητής θερμοκρασίας κινητήρα με ασύρματο αισθητήρα για κλασικά οχήματα: 7 βήματα
Αισθητήρας θερμοκρασίας κινητήρα/μετρητής με ασύρματο αισθητήρα για κλασικά οχήματα: Έφτιαξα αυτόν τον αισθητήρα για το υπέροχο μου Τσιπιτάκ. Ένα αυτοκίνητο fiat 126 με 2 κύλινδρο αερόψυκτο κινητήρα κάτω από το πίσω καπό. Το Chipitak δεν έχει μετρητή θερμοκρασίας που δείχνει πόσο ζεστός είναι ο κινητήρας, έτσι σκέφτηκα ότι ένας αισθητήρας θα ήταν χρήσιμος. Wantedθελε επίσης ο αισθητήρας να είναι καλώδιο
Διασύνδεση Arduino με αισθητήρα υπερήχων και αισθητήρα θερμοκρασίας χωρίς επαφή: 8 βήματα
Διασύνδεση Arduino με αισθητήρα υπερήχων και αισθητήρα θερμοκρασίας χωρίς επαφή: Σήμερα, οι κατασκευαστές, οι προγραμματιστές προτιμούν το Arduino για την ταχεία ανάπτυξη του πρωτοτύπου των έργων. Το Arduino είναι μια ηλεκτρονική πλατφόρμα ανοιχτού κώδικα που βασίζεται σε εύχρηστο υλικό και λογισμικό. Το Arduino έχει πολύ καλή κοινότητα χρηστών. Σε αυτό το έργο
Ανάγνωση θερμοκρασίας με χρήση αισθητήρα θερμοκρασίας LM35 με Arduino Uno: 4 βήματα
Ανάγνωση θερμοκρασίας με χρήση αισθητήρα θερμοκρασίας LM35 με Arduino Uno: Γεια σας παιδιά σε αυτό το εκπαιδευτικό εγχειρίδιο θα μάθουμε πώς να χρησιμοποιούμε το LM35 με το Arduino. Το Lm35 είναι ένας αισθητήρας θερμοκρασίας που μπορεί να διαβάσει τιμές θερμοκρασίας από -55 ° C έως 150 ° C. Είναι μια τερματική συσκευή που παρέχει αναλογική τάση ανάλογη της θερμοκρασίας. Υψηλή
ESP32 NTP Θερμόμετρο μαγειρέματος θερμοκρασίας ανιχνευτή θερμοκρασίας με διόρθωση και συναγερμό θερμοκρασίας Steinhart-Hart .: 7 βήματα (με εικόνες)
ESP32 NTP Θερμόμετρο Θερμόμετρο μαγειρέματος με διόρθωση και συναγερμό θερμοκρασίας Steinhart-Hart .: Ακόμα στο ταξίδι για να ολοκληρώσετε ένα «επερχόμενο έργο», ", ESP32 NTP Temperature Probe Cooking Thermometer With Steinhart-Hart Correction and Temperature Alarm " είναι ένας οδηγός που δείχνει πώς προσθέτω έναν αισθητήρα θερμοκρασίας NTP, piezo b