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

Καιρός Web App χρησιμοποιώντας Esp8266: 7 βήματα
Καιρός Web App χρησιμοποιώντας Esp8266: 7 βήματα

Βίντεο: Καιρός Web App χρησιμοποιώντας Esp8266: 7 βήματα

Βίντεο: Καιρός Web App χρησιμοποιώντας Esp8266: 7 βήματα
Βίντεο: ESP8266 ESP01 WIFI-UART | Προγραμματισμός LDmicro-Roboremo 2024, Νοέμβριος
Anonim
Καιρός Web App χρησιμοποιώντας Esp8266
Καιρός Web App χρησιμοποιώντας Esp8266

Το 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. Οι συνδέσεις έχουν ως εξής.

  1. Το SHT31 λειτουργεί μέσω I2C. Η παραπάνω εικόνα δείχνει τη σύνδεση μεταξύ της μονάδας ESP8266 και της μονάδας SHT31. Χρησιμοποιούμε καλώδιο I2C για αυτό είτε μπορούμε να χρησιμοποιήσουμε καλώδια άλματος 4 F έως F.
  2. ένα σύρμα χρησιμοποιείται για Vcc, το δεύτερο σύρμα για GND και άλλα δύο για SDA και SCL αντίστοιχα.
  3. Σύμφωνα με τον προσαρμογέα 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
Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Κωδικός για τη δημοσίευση δεδομένων στο Thing Speak
Κωδικός για τη δημοσίευση δεδομένων στο 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

Συνιστάται: