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

Σύνδεση αισθητήρα DHT11/DHT22 στο σύννεφο με πίνακα που βασίζεται σε ESP8266: 9 βήματα
Σύνδεση αισθητήρα DHT11/DHT22 στο σύννεφο με πίνακα που βασίζεται σε ESP8266: 9 βήματα

Βίντεο: Σύνδεση αισθητήρα DHT11/DHT22 στο σύννεφο με πίνακα που βασίζεται σε ESP8266: 9 βήματα

Βίντεο: Σύνδεση αισθητήρα DHT11/DHT22 στο σύννεφο με πίνακα που βασίζεται σε ESP8266: 9 βήματα
Βίντεο: Was sind Datenlogger? 2024, Ιούνιος
Anonim
Σύνδεση αισθητήρα DHT11/DHT22 στο cloud με πλακέτα που βασίζεται σε ESP8266
Σύνδεση αισθητήρα DHT11/DHT22 στο cloud με πλακέτα που βασίζεται σε ESP8266

Στο προηγούμενο άρθρο, συνέδεσα την πλακέτα NodeMCU που βασίζεται σε ESP8266 σε μια υπηρεσία Cloud4RPi. Τώρα, ήρθε η ώρα για ένα πραγματικό έργο!

Προμήθειες

Απαιτήσεις υλικού:

  • Οποιοσδήποτε πίνακας βασίζεται σε ένα τσιπ ESP8266 (για παράδειγμα, NodeMCU)
  • Αισθητήρας DHT11 ή DHT22

Λογισμικό και υπηρεσίες:

  • Βιβλιοθήκη αισθητήρων DHT από την Adafruit - v1.3.7
  • Adafruit Unified Sensor - v1.0.3
  • cloud4rpi-esp-arduino-v0.1.0
  • Cloud4RPI - Πίνακας ελέγχου cloud για συσκευές IoT
  • PlatformIO IDE για VSCode

Βήμα 1: Μετρήστε τη θερμοκρασία και την υγρασία

Μετρήστε τη θερμοκρασία και την υγρασία
Μετρήστε τη θερμοκρασία και την υγρασία

Είχα ήδη έναν αισθητήρα DHT11, οπότε αποφάσισα να τον χρησιμοποιήσω για μετρήσεις θερμοκρασίας και υγρασίας. Ας επιλέξουμε μια βιβλιοθήκη Arduino για την ανάγνωση δεδομένων αισθητήρα.

Το μητρώο Arduino περιέχει πολλές βιβλιοθήκες, από τις οποίες επέλεξα τη δημοφιλέστερη.

Σύμφωνα με το αποθετήριο GitHub, απαιτείται επίσης να προσθέσουμε ένα πακέτο Adafruit Unified Sensor.

Βήμα 2: Δημιουργία και διαμόρφωση έργου

Δημιουργία και διαμόρφωση έργου
Δημιουργία και διαμόρφωση έργου

Έχω ήδη περιγράψει πώς να δημιουργήσετε ένα έργο PlatformIO και να εγκαταστήσετε βιβλιοθήκες στο πρώτο μέρος. Το έργο μου ονομάζεται "MyNodeMCU". Η δομή φαίνεται παραπάνω.

Αυτό το έργο είναι ένα ελαφρώς τροποποιημένο παράδειγμα Cloud4RPi. Αποφάσισα να αποθηκεύσω το διακριτικό συσκευής και τα διαπιστευτήρια Wi-Fi στο αρχείο ρυθμίσεων αντί του κώδικα.

Το αρχείο platform.io φαίνεται ως εξής:

[platformio] default_envs = nodemcuv2 [env: nodemcuv2] platform = espressif8266 framework = arduino board = nodemcuv2

Βήμα 3: Εγκατάσταση Βιβλιοθηκών

Εγκατάσταση Βιβλιοθηκών
Εγκατάσταση Βιβλιοθηκών

Η εγκατάσταση των βιβλιοθηκών είναι αρκετά απλή. Μπορείτε να το κάνετε από τη γραφική διεπαφή του IDE ή προσθέτοντας τα απαιτούμενα ονόματα βιβλιοθηκών στην ενότητα lib_deps του αρχείου platform.io:

? … Lib_deps = cloud4rpi -esp -arduino Adafruit Unified Sensor DHT sensor_blotage build_flags = -D MQTT_MAX_PACKET_SIZE = 1024 -D MQTT_MAX_TRANSFER_SIZE = 128 -D CLOUD4RPI_DWID_ID_ D CLOUD4RPI_TOKEN = / "_ YOUR_DEVICE_TOKEN _ \"

Οι βιβλιοθήκες που προστέθηκαν θα εγκατασταθούν αυτόματα στον υποφάκελο ενός έργου.

Η κεφαλίδα main.cpp φαίνεται ως εξής:

#include #include #include #include "DHT.h"

Βήμα 4: Συνδέστε έναν αισθητήρα DHT11

Το Adafruit παρέχει ένα παράδειγμα DHTtester.ino σύνδεσης αισθητήρα.

Αυτός ο κώδικας εκκινεί έναν αισθητήρα και ορίζει μια δομή για την αποθήκευση του αποτελέσματος μέτρησης (σε περίπτωση που ήταν επιτυχής):

#define DHTPIN 2 // Digitalηφιακή ακίδα συνδεδεμένη στον αισθητήρα DHT#define DHTTYPE DHT11 // DHT 11 //… DHT dht (DHTPIN, DHTTYPE); dht.begin (); //… struct DHT_Result {float h; επιπλέουν t? }; DHT_Result dhtResult;

Η επόμενη λειτουργία δείχνει πώς να διαβάζετε δεδομένα αισθητήρων και να τα αποθηκεύετε στη δομή δεδομένων που περιγράφεται παραπάνω

void readSensors () {float h = dht.readHumidity (); // Διαβάστε τη θερμοκρασία ως Κελσίου (η προεπιλογή) επιπλέει t = dht.readTemperature ();

// Ελέγξτε αν απέτυχε η ανάγνωση και βγείτε

if (isnan (h) || isnan (t)) {Serial.println (F ("Απέτυχε η ανάγνωση από τον αισθητήρα DHT!")); ΕΠΙΣΤΡΟΦΗ; } dhtResult.h = h; dhtResult.t = t; }

Βήμα 5: Αποστολή δεδομένων στο Cloud

Μόλις έχουμε αυτά τα δεδομένα, το επόμενο βήμα είναι να τα στείλουμε στην υπηρεσία Cloud4RPi.

Η σελίδα Cloud4RPi για Arduino περιγράφει το API βιβλιοθήκης, το οποίο είναι ένα σύνολο μεθόδων που χρησιμοποιούνται για:

  • δημιουργία, ανάγνωση και ενημέρωση μεταβλητών,
  • αποστολή μεταβλητών τιμών στο cloud χρησιμοποιώντας το πρωτόκολλο MQTT.

Η βιβλιοθήκη υποστηρίζει τρεις τύπους μεταβλητών: Bool, Numeric και String.

Η ροή εργασιών της βιβλιοθήκης ξεκινά με τη δημιουργία ενός στιγμιότυπου API χρησιμοποιώντας το Διακριτικό συσκευής από τον ιστότοπο του cloud4rpi.io (ανατρέξτε στο μέρος 1 του άρθρου για λεπτομέρειες).

#if καθορισμένα (CLOUD4RPI_TOKEN) Cloud4RPi c4r (CLOUD4RPI_TOKEN); #else Cloud4RPi c4r ("!!! _ NO_DEVICE_TOKEN _ !!!"); #τέλος εαν

Στη συνέχεια, δηλώστε μεταβλητές για αναγνώσεις DHT11:

c4r.declareNumericVariable ("DHT11_Temp"); c4r.declareNumericVariable ("DHT11_Hum");

Στη συνέχεια, λάβετε δεδομένα από τον αισθητήρα, αποθηκεύστε τα σε μεταβλητές και δημοσιεύστε τα δεδομένα στο Cloud4RPi:

c4r.setVariable ("DHT11_Temp", dhtResult.t); c4r.setVariable ("DHT11_Hum", dhtResult.h); c4r.publishData ();

Η θερμοκρασία και η υγρασία δεν αλλάζουν γρήγορα, επομένως δεν απαιτείται αποστολή περισσότερων από μία τιμές ανά 5 λεπτά.

Βήμα 6: Διαγνωστικά

Το Cloud4RPi υποστηρίζει διαγνωστικά δεδομένα μαζί με μεταβλητές τιμές. Χρησιμοποίησα χρόνο λειτουργίας, ισχύ σήματος Wi-Fi και διεύθυνση IP ως διαγνωστικά δεδομένα:

c4r.declareDiagVariable ("IP_Address"); c4r.declareDiagVariable ("RSSI"); // Ισχύς σήματος WiFi c4r.declareDiagVariable ("Uptime");

Σημείωση: Η συνάρτηση millis που χρησιμοποιώ για να μηδενίζει τις ρυθμίσεις χρόνου λειτουργίας στο μηδέν κάθε ~ 50 ημέρες. Αυτό είναι κάτι παραπάνω από αρκετό για το έργο μου.

Ο ακόλουθος κώδικας ορίζει τιμές διαγνωστικών μεταβλητών:

c4r.setDiagVariable ("RSSI", (String) WiFi. RSSI () + "dBm"); c4r.setDiagVariable ("IP_Address", WiFi.localIP (). toString ()); c4r.setDiagVariable ("Uptime", uptimeHumanReadable (currentMillis)); c4r.publishDiag ();

Η συνάρτηση uptimeHumanReadable μετατρέπει χιλιοστά του δευτερολέπτου σε μια βολική μορφή:

String uptimeHumanReadable (ανυπόγραφο μεγάλο χιλιοστό του δευτερολέπτου) {static char uptimeStr [32]; ανυπόγραφα μεγάλα δευτερόλεπτα = χιλιοστά του δευτερολέπτου / 1000; ανυπόγραφο μεγάλο λεπτό = δευτ. / 60; ανυπόγραφο int ώρες = λεπτά / 60; ανυπόγραφο int ημέρες = ώρες / 24; δευτερόλεπτα -= λεπτά * 60; λεπτά -= ώρες * 60; ώρες -= ημέρες * 24; sprintf (uptimeStr, "%d ημέρες%2.2d:%2.2d:%2.2d", (byte) ημέρες, (byte) ώρες, (byte) λεπτά, (byte) δευτερόλεπτα); επιστροφή συμβολοσειράς (uptimeStr); }

Η συνάρτηση εξάγει μια συμβολοσειρά όπως αυτή 5 ημέρες 10:23:14 αντί για έναν περίεργο μεγάλο αριθμό.

Βήμα 7: Έναρξη και εντοπισμός σφαλμάτων στο έργο

Ξεκινήστε και εντοπίστε σφάλματα στο έργο
Ξεκινήστε και εντοπίστε σφάλματα στο έργο

Αφού καταρτίσετε τον κώδικα που δημιουργήσατε και τον αναβοσβήνετε στο NodeMCU, η συσκευή συνδέεται σε μια υπηρεσία cloud και αρχίζει να στέλνει δεδομένα.

Μπορείτε να αυξήσετε τη βαρύτητα καταγραφής ορίζοντας τη μεταβλητή προεπεξεργαστή CLOUD4RPI_DEBUG σε 1 (προσθέστε -D CLOUD4RPI_DEBUG = 1 στην ενότητα build_flags στο αρχείο platform.io).

Στη συνέχεια, ανοίξτε τον ιστότοπο cloud4rpi.io και παρατηρήστε τη νέα συσκευή στο διαδίκτυο. Ανοίξτε το για να δείτε όλες τις μεταβλητές τιμές που λαμβάνονται από τη συσκευή: αισθητήρας και διαγνωστικά.

Βήμα 8: Διαμόρφωση πίνακα ελέγχου

Διαμόρφωση πίνακα ελέγχου
Διαμόρφωση πίνακα ελέγχου

Σε αυτό το βήμα, η σύνδεση δεδομένων στο cloud είναι σε λειτουργία. Τώρα, ας διαμορφώσουμε την οπτική αναπαράσταση των δεδομένων.

Χρησιμοποίησα τη διεπαφή διαμόρφωσης του Πίνακα ελέγχου για να δημιουργήσω τον ακόλουθο πίνακα ελέγχου.

Το ταμπλό είναι κοινόχρηστο, οπότε το μοιράζομαι αμέσως με τον φίλο μου.

Βήμα 9: Συμπέρασμα

συμπέρασμα
συμπέρασμα

Ο πλήρης κωδικός του έργου είναι διαθέσιμος στην ουσία.

Αυτα για τωρα!

Ερωτήσεις και προτάσεις είναι ευπρόσδεκτα στα σχόλια.

Συνιστάται: