Πίνακας περιεχομένων:
- Βήμα 1: Απαιτείται υλικό
- Βήμα 2: Συνδέσεις υλικού
- Βήμα 3: Κωδικός για τον προγραμματισμό εργασιών
- Βήμα 4: Κωδικός για ανάγνωση τιμών θερμοκρασίας και υγρασίας
- Βήμα 5: Κωδικός για τη φιλοξενία ενός διακομιστή ιστοσελίδων
- Βήμα 6: Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
- Βήμα 7: Συνολικός κώδικας
Βίντεο: Καιρός Web App χρησιμοποιώντας Esp8266: 7 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:34
Το SHT 31 είναι αισθητήρες θερμοκρασίας και υγρασίας που κατασκευάζεται από την Sensirion. Το SHT31 παρέχει υψηλό επίπεδο ακρίβειας περίπου ± 2% RH. Το εύρος υγρασίας του κυμαίνεται από 0 έως 100% και το εύρος θερμοκρασίας μεταξύ -40 και 125 ° C. Είναι πολύ πιο αξιόπιστο και γρήγορο με 8 δευτερόλεπτα χρόνου απόκρισης αισθητήρα. Η λειτουργικότητά του περιλαμβάνει βελτιωμένη επεξεργασία σήματος και συμβατότητα με I2C. Διαθέτει διαφορετικούς τρόπους λειτουργίας που το καθιστούν ενεργειακά αποδοτικό.
Σε αυτό το σεμινάριο, έχουμε διασυνδέσει το SHT 31 με τον πίνακα Adafruit Huzzah. Για την ανάγνωση τιμών θερμοκρασίας και υγρασίας χρησιμοποιήσαμε ασπίδα ESP8266 I2C. Αυτός ο προσαρμογέας καθιστά όλες τις ακίδες προσβάσιμες στον χρήστη και προσφέρει φιλικό προς το χρήστη περιβάλλον I2C.
Βήμα 1: Απαιτείται υλικό
Υλικό που χρησιμοποιήθηκε για την ολοκλήρωση αυτής της εργασίας:
1. SHT31
2. Adafruit Huzzah ESP8266
3. Προσαρμογέας ESP8266 I2C
4. Καλώδιο I2C
Βήμα 2: Συνδέσεις υλικού
Αυτό το βήμα περιλαμβάνει τον οδηγό σύνδεσης υλικού. Αυτή η ενότητα εξηγεί βασικά τις συνδέσεις καλωδίωσης που απαιτούνται μεταξύ του αισθητήρα και του ESP8266. Οι συνδέσεις έχουν ως εξής.
- Το SHT31 λειτουργεί μέσω I2C. Η παραπάνω εικόνα δείχνει τη σύνδεση μεταξύ της μονάδας ESP8266 και της μονάδας SHT31. Χρησιμοποιούμε καλώδιο I2C για αυτό είτε μπορούμε να χρησιμοποιήσουμε καλώδια άλματος 4 F έως F.
- ένα σύρμα χρησιμοποιείται για Vcc, το δεύτερο σύρμα για GND και άλλα δύο για SDA και SCL αντίστοιχα.
- Σύμφωνα με τον προσαρμογέα I2C, τα pin2 και pin 14 μιας πλακέτας ESP8266 χρησιμοποιούνται ως SDA και SCL αντίστοιχα
Βήμα 3: Κωδικός για τον προγραμματισμό εργασιών
Σε αυτό το σεμινάριο, εκτελούμε τρεις λειτουργίες
- Διαβάστε τα δεδομένα από το SHT11 χρησιμοποιώντας το πρωτόκολλο I2C
- φιλοξενεί τον διακομιστή ιστού και δημοσιεύει την ανάγνωση του αισθητήρα στην ιστοσελίδα
- δημοσιεύστε τις ενδείξεις αισθητήρα στο ThingSpeak API
Για να το πετύχουμε αυτό χρησιμοποιούμε τη βιβλιοθήκη TaskScheduler. Έχουμε προγραμματίσει τρεις διαφορετικές εργασίες που αναφέρονται σε τρεις διαφορετικές λειτουργίες ελέγχου. αυτό γίνεται ως εξής
- Η εργασία 1 είναι για την ανάγνωση της τιμής του αισθητήρα, η οποία εκτελείται για 1 δευτερόλεπτο έως ότου φτάσει το χρονικό όριο των 10 δευτερολέπτων.
- Όταν το Task1 φτάσει στο χρονικό όριο λήξης, η Εργασία 2 είναι ενεργοποιημένη και η Εργασία 1 είναι απενεργοποιημένη.
- Συνδεόμαστε στο AP σε αυτήν την επανάκληση, Δύο boolean μεταβλητές λαμβάνονται για να φροντίσουν για την εναλλαγή μεταξύ STA και AP
- Στην Εργασία 2 φιλοξενούμε έναν διακομιστή ιστού στη διεύθυνση 192.168.1.4. Αυτή η εργασία εκτελείται κάθε 5 δευτερόλεπτα έως ότου φτάσει το χρονικό όριο λήξης της, το οποίο είναι 50 δευτερόλεπτα
- Όταν η εργασία 2 φτάσει στο χρονικό όριο, η εργασία 3 είναι ενεργοποιημένη και η εργασία 2 είναι απενεργοποιημένη.
- Συνδεόμαστε με το STA (τοπική IP) σε αυτήν την επανάκληση
- Στην Εργασία 3 δημοσιεύουμε την ανάγνωση του αισθητήρα στο cloud ThingSpeak API
- Η εργασία 3 εκτελείται κάθε πέντε δευτερόλεπτα έως ότου φτάσει το χρονικό όριο λήξης της, δηλαδή 50 δευτερόλεπτα
- Όταν το Task3 φτάσει στο χρονικό όριο λήξης, η Εργασία 1 ενεργοποιείται ξανά και η Task3 απενεργοποιείται.
- Όταν δεν καλείται καμία επανάκληση ή η συσκευή είναι αδρανής, πηγαίνει στο Light Sleep εξοικονομώντας ενέργεια.
Scheduler ts;
// Εργασίες για i2c, φιλοξενία διακομιστή ιστού και ανάρτηση στο thingspeak
Εργασία tI2C (1 * TASK_SECOND, TASK_FOREVER, & taskI2CCallback, & ts, false, NULL, & taskI2CDsable); Εργασία tAP (5*TASK_SECOND, TASK_FOREVER, & taskAPCallback, & ts, false, NULL, & taskAPDisable); Εργασία tWiFi (5* TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable); // χρονικό όριο για εργασίες tI2C.setTimeout (10 * TASK_SECOND); tAP.setTimeout (50 * TASK_SECOND); tWiFi.setTimeout (50 * TASK_SECOND); // ενεργοποίηση I2C task tI2C.enable ();
Βήμα 4: Κωδικός για ανάγνωση τιμών θερμοκρασίας και υγρασίας
Χρησιμοποιούμε τη βιβλιοθήκη Wire.h για να διαβάσουμε τις τιμές θερμοκρασίας και υγρασίας. Αυτή η βιβλιοθήκη διευκολύνει την επικοινωνία i2c μεταξύ του αισθητήρα και της κύριας συσκευής. 0x44 είναι η διεύθυνση I2C για SHT31.
Το SHT31 λειτουργεί με διαφορετικό τρόπο λειτουργίας. Μπορείτε να ανατρέξετε στο φύλλο δεδομένων για αυτό.
Χρησιμοποιούμε 0x2C και 0x06 ως MSB και LSB αντίστοιχα για λειτουργία με μία λήψη.
// I2C task callback void taskI2CCallback ()
{Serial.println ("taskI2CStarted"); χωρίς υπογραφή int root [6]; // έναρξη μετάδοσης από 0x44. Wire.beginTransmission (Addr); // για μετάδοση ενός πυροβολισμού με υψηλή επαναληψιμότητα χρησιμοποιούμε 0x2C (MSB) και 0x06 (LSB) Wire.write (0x2C). Wire.write (0x06); // τερματισμός μετάδοσης Wire.endTransmission (); // ζητήστε byte από 0x44 Wire.beginTransmission (Addr); Wire.endTransmission (); Wire.requestFrom (Addr, 6)? εάν (Wire.available () == 6) {// δεδομένα [0] και δεδομένα [1] περιέχουν 16 bit θερμοκρασίας. root [0] = Wire.read (); root [1] = Wire.read (); // τα δεδομένα [2] περιέχουν 8 bit ρίζας CRC [2] = Wire.read (); // δεδομένα [3] και δεδομένα [4] περιέχουν 16 bit ρίζας υγρασίας [3] = Wire.read (); root [4] = Wire.read (); // δεδομένα [5] αποτελούνται από ρίζα CRC 8 bit [5] = Wire.read (); } int temp = (ρίζα [0] * 256) + ρίζα [1]; // μετατόπιση MSB κατά 8 bit προσθήκη LSB float cTemp = -45.0 + (175.0 * temp /65535.0); float fTemp = (cTemp * 1.8) + 32.0; // μετατοπίστε το MSB κατά 8 bits προσθέστε LSB σε αυτό διαχωρίστε με πλήρη ανάλυση και * 100 για ποσοστό υγρασίας επίπλευσης = (100.0 * ((ρίζα [3] * 256.0) + ρίζα [4])) /65535.0;
tempC = cTemp;
tempF = fTemp; υγρασία = υγρασία? Serial.print ("Θερμοκρασία σε C: / t"); Serial.println (String (cTemp, 1)); Serial.print ("Θερμοκρασία σε F: / t"); Serial.println (String (fTemp, 1)); Serial.print ("Υγρασία: / t"); Serial.println (String (υγρασία, 1)); }
Βήμα 5: Κωδικός για τη φιλοξενία ενός διακομιστή ιστοσελίδων
Έχουμε φιλοξενήσει έναν διακομιστή ιστού από τη συσκευή μας σε στατική IP.
- Η βιβλιοθήκη ESP8266WebServer χρησιμοποιείται για τη φιλοξενία του διακομιστή ιστού
- Πρώτα πρέπει να δηλώσουμε διεύθυνση IP, Gateway και μάσκα υποδικτύου για να δημιουργήσουμε τη στατική μας IP
- Τώρα δηλώστε ssid και κωδικό πρόσβασης για το σημείο πρόσβασής σας.
- συνδεθείτε στο σημείο πρόσβασης από οποιαδήποτε συσκευή STA
- φιλοξενεί τον διακομιστή στη θύρα 80, η οποία είναι μια προεπιλεγμένη θύρα για πρωτόκολλο επικοινωνίας Διαδικτύου, πρωτόκολλο μεταφοράς υπερκειμένου (HTTP)
- εισαγάγετε 192.168.1.4 στο πρόγραμμα περιήγησής σας για εισαγωγή ιστοσελίδας και 192.168.1.4/Value για αισθητήρα ανάγνωση ιστοσελίδας
// στατική Ip για AP
IPAddress ap_local_IP (192, 168, 1, 4);
IPAddress ap_gateway (192, 168, 1, 254);
IPAddress ap_subnet (255, 255, 255, 0); // ssid και AP για τοπικό WiFi σε λειτουργία STA
const char WiFissid = "*********";
const char WiFipass = "*********";
// ssid και pass για AP
const char APssid = "********";
const char APpass = "********";
Διακομιστής ESP8266WebServer (80);
άκυρη ρύθμιση {
server.on ("/", onHandleDataRoot);
server.on ("/Value", onHandleDataFeed);
server.onNotFound (onHandleNotFound);
}
void taskAPCallback () {
Serial.println ("ξεκίνησε το taskAP");
server.handleClient ();
}
void onHandleDataRoot () {server.send (200, "text/html", PAGE1); }
void onHandleDataFeed () {
server.send (200, "text/html", PAGE2); }
void onHandleNotFound () {
String message = "Το αρχείο δεν βρέθηκε / n / n";
μήνυμα += "URI:";
μήνυμα += server.uri ();
μήνυμα += "\ nΜέθοδος:";
μήνυμα += (server.method () == HTTP_GET)? "GET": "POST";
μήνυμα += "\ nΕπιχειρήματα:";
μήνυμα += server.args ();
μήνυμα += "\ n";
server.send (404, "text/plain", message);}
άκυρη επανασύνδεσηAPWiFi () {
WiFi.mode (WIFI_AP_STA);
καθυστέρηση (100)?
WiFi.disconnect ();
boolean status = WiFi.softAPConfig (ap_local_IP, ap_gateway, ap_subnet);
εάν (κατάσταση == αληθινό) {
Serial.print ("Ρύθμιση soft-AP …");
boolean ap = WiFi.softAP (APssid, APpass);
αν (ap == true) {
Serial.print ("συνδεδεμένο με: / t");
// IPAddress myIP = WiFi.softAPIP ();
Serial.println (WiFi.softAPIP ());
}
server.begin ();
}
}
Βήμα 6: Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Εδώ δημοσιεύουμε τις ενδείξεις των αισθητήρων στο Thing Speak. τα ακόλουθα βήματα είναι απαραίτητα για την ολοκλήρωση αυτής της εργασίας-
- Δημιουργήστε τον λογαριασμό σας στο πράγμα μιλήστε
- Δημιουργήστε κανάλια και πεδία για να αποθηκεύσετε τα δεδομένα του αισθητήρα σας
- μπορούμε να πάρουμε και να δημοσιεύσουμε τα δεδομένα από το ESP στο thingSpeak και αντίστροφα χρησιμοποιώντας αιτήματα GET και POST στο api.
- μπορούμε να δημοσιεύσουμε τα δεδομένα μας στο ThingSpeak ως εξής
void taskWiFiCallback () {
WiFiClient wifiClient; if (wifiClient.connect (hostId, 80)) {String postStr = apiKey; postStr += "& field1 ="; postStr += Χορδή (υγρό); postStr += "& field2 ="; postStr += String (tempC); postStr += "& field3 ="; postStr += String (tempF); postStr += "\ r / n / r / n"; wifiClient.print ("POST /ενημέρωση HTTP /1.1 / n"); wifiClient.print ("Host: api.thingspeak.com / n"); wifiClient.print ("Σύνδεση: κλείσιμο / n"); wifiClient.print ("X-THINGSPEAKAPIKEY:"+apiKey+"\ n"); wifiClient.print ("Τύπος περιεχομένου: application/x-www-form-urlencoded / n"); wifiClient.print ("Περιεχόμενο-Μήκος:"); wifiClient.print (postStr.length ()); wifiClient.print ("\ n / n"); wifiClient.print (postStr); } wifiClient.stop (); }
Βήμα 7: Συνολικός κώδικας
Ο συνολικός κώδικας είναι διαθέσιμος στο αποθετήριο github μου
Συντελεστές:
- Arduino JSON: ArduinoJson
- ESP826WebServer
- Χρονοδιάγραμμα εργασιών
- SHT 31
- Σάρωση I2C
- Εκπαιδευτικό σεμινάριο HIH6130
- Wire Arduino
- NCD.io
Συνιστάται:
Καιρός Σημείωση: 7 βήματα (με εικόνες)
Καιρός Σημείωση: Αυτός είναι ένας συνδυασμός μετεωρολογικού σταθμού και υπενθύμισης. Όλοι μπορούμε να ελέγξουμε τον καιρό στα τηλέφωνά μας, αλλά μερικές φορές και ειδικά όταν κάποιος προσπαθεί να βγει από την πόρτα το μόνο που χρειάζεται είναι ένας γρήγορος τρόπος για τις καιρικές συνθήκες. Αυτός ο μετεωρολογικός σταθμός τροφοδοτεί
ΚΑΙΡΟΣ SHAZAM: 3 Βήματα
WEATHER SHAZAM: Γεια σας, με λένε Sushant Joshi και καλώς ήλθατε στο Instructable / FINAL PROJECT μου. Αυτό το έργο παρουσιάζει το Τελικό μου έργο για το μάθημα Μηχανικής 11ης τάξης. Θα περάσει από όλα τα υλικά που απαιτούνται για την κατασκευή, όλα τα εξαρτήματα, τον τρόπο κατασκευής του (Circuit
Καιρός κερί - Καιρός και θερμοκρασία με μια ματιά: 8 βήματα
Καιρός Κερί - Καιρός και θερμοκρασία με μια ματιά: Χρησιμοποιώντας αυτό το μαγικό κερί, μπορείτε να πείτε αμέσως την τρέχουσα θερμοκρασία και τις συνθήκες έξω
ESP8266 Καιρός Widget: 9 βήματα (με εικόνες)
ESP8266 Καιρός Widget: [Αναπαραγωγή βίντεο] Καλώς ορίσατε στο νέο μου Πρόγραμμα Weather Widget. Μπορείτε να βρείτε όλα τα έργα μου στη διεύθυνση: https://www.opengreenenergy.com/ Ένα widget καιρού είναι μια εφαρμογή που μπορείτε να κατεβάσετε στον υπολογιστή σας, φορητό υπολογιστή ή μια κινητή συσκευή και εκτελέστε τη δουλειά της παροχής
ESP8266 Καιρός & KVG Infoscreen: 5 Βήματα
ESP8266 Καιρός & KVG Infoscreen: Αυτή είναι μια απλή Infoscreen για Weatherforecast μέσω darksky.net και ζωντανών οθονών στάσης λεωφορείου για λεωφορεία στο Κίελο μέσω " KVG Echtzeitabfahrten ". Η infoscreen βασίζεται σε μια οθόνη NodeMCU (ESP8266) και μια ILI9341 LCD οθόνη