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

IoT Made Easy: Λήψη απομακρυσμένων δεδομένων καιρού: UV και θερμοκρασία Θερμοκρασία & υγρασία: 7 βήματα
IoT Made Easy: Λήψη απομακρυσμένων δεδομένων καιρού: UV και θερμοκρασία Θερμοκρασία & υγρασία: 7 βήματα

Βίντεο: IoT Made Easy: Λήψη απομακρυσμένων δεδομένων καιρού: UV και θερμοκρασία Θερμοκρασία & υγρασία: 7 βήματα

Βίντεο: IoT Made Easy: Λήψη απομακρυσμένων δεδομένων καιρού: UV και θερμοκρασία Θερμοκρασία & υγρασία: 7 βήματα
Βίντεο: AI & Cybersecurity: Πλεονεκτήματα, προκλήσεις και προβλέψεις 2024, Ιούλιος
Anonim
IoT Made Easy: Λήψη απομακρυσμένων δεδομένων καιρού: UV και θερμοκρασία και υγρασία αέρα
IoT Made Easy: Λήψη απομακρυσμένων δεδομένων καιρού: UV και θερμοκρασία και υγρασία αέρα

Σε αυτό το σεμινάριο, θα καταγράψουμε απομακρυσμένα δεδομένα ως UV (υπεριώδη ακτινοβολία), θερμοκρασία αέρα και υγρασία. Αυτά τα δεδομένα θα είναι πολύ σημαντικά και θα χρησιμοποιηθούν σε έναν μελλοντικό πλήρη Μετεωρολογικό Σταθμό.

Το μπλοκ διάγραμμα δείχνει τι θα πάρουμε στο τέλος.

Εικόνα
Εικόνα

Βήμα 1: BoM - Bill of Material

NodeMCU (ESP8266-12E) - 9,00 USD

Αισθητήρας υγρασίας και θερμοκρασίας (DHT22) - 10,00 USD

Αισθητήρας UV - 4,00 USD

OLED USD 12,00

Breadboard - 1,00 USD

Βήμα 2: Ο αναλογικός αισθητήρας UV

Ο αναλογικός αισθητήρας UV
Ο αναλογικός αισθητήρας UV
Ο αναλογικός αισθητήρας UV
Ο αναλογικός αισθητήρας UV
Ο αναλογικός αισθητήρας UV
Ο αναλογικός αισθητήρας UV

Αυτός ο αισθητήρας UV παράγει μια αναλογική έξοδο ανάλογη της υπεριώδους ακτινοβολίας που βρίσκεται στο φάσμα ανίχνευσης φωτός. Χρησιμοποιεί μια υπεριώδη φωτοδίοδο (βασισμένη στο νιτρίδιο του γαλλίου), η οποία μπορεί να ανιχνεύσει το φάσμα του φωτός 240-370nm (που καλύπτει το UVB και το μεγαλύτερο μέρος του φάσματος UVA). Το επίπεδο σήματος από τη φωτοδίοδο είναι πολύ μικρό, στο επίπεδο νανο-αμπέρ, οπότε η μονάδα έχει ενσωματώσει έναν λειτουργικό ενισχυτή για να ενισχύσει το σήμα σε ένα πιο ευανάγνωστο επίπεδο τάσης (0 έως 1V).

Ο αισθητήρας και ο ενισχυτής μπορούν να τροφοδοτηθούν, συνδέοντας το VCC σε 3,3VDC (ή 5VDC) και το GND στη γείωση τροφοδοσίας. Το αναλογικό σήμα μπορεί να ληφθεί από τον ακροδέκτη OUT.

Η έξοδός του θα είναι σε χιλιοστά βολτ και θα διαβαστεί από την Αναλογική Είσοδο του NodeMCU. Μόλις διαβαστεί, θα πρέπει να το "μετατρέψουμε" (ή να "αντιστοιχίσουμε") για να χειριστεί καλύτερα τις τιμές ο κώδικας. Μπορούμε να το κάνουμε με τη συνάρτηση readSensorUV ():

/ * Διαβάστε τον αισθητήρα UV σε mV και υπολογίστε τον δείκτη UV * *

void readSensorUV () {byte numOfReadings = 5; dataSensorUV = 0; για (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); καθυστέρηση (200)? } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); }

Μόλις έχουμε τα δεδομένα υπεριώδους ακτινοβολίας, μπορούμε εύκολα να υπολογίσουμε τον δείκτη UV, όπως ορίζεται στον παραπάνω πίνακα. Η συνάρτηση indexCalculate () θα το κάνει για εμάς:

/ * Υπολογισμός δείκτη UV */

void indexCalculate () {if (dataSensorUV <227) indexUV = 0; αλλιώς αν (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; αλλιώς εάν (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; αλλιώς αν (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; αλλιώς αν (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; αλλιώς αν (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; αλλιώς αν (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; αλλιώς εάν (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; αλλιώς εάν (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; αλλιώς αν (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; αλλιώς αν (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; else indexUV = 11; }

Βήμα 3: Εγκατάσταση οθόνης: OLED

Εγκατάσταση οθόνης: OLED
Εγκατάσταση οθόνης: OLED
Εγκατάσταση οθόνης: OLED
Εγκατάσταση οθόνης: OLED

Για σκοπούς δοκιμής, θα συμπεριλάβουμε ένα OLED στον μετρητή UV (αυτό το βήμα είναι εντελώς προαιρετικό).

Είναι εντάξει κατά τη διάρκεια των δοκιμών, η χρήση της Serial Monitor, αλλά τι συμβαίνει όταν χρησιμοποιείτε τα πρωτότυπα σας μακριά από τον υπολογιστή σας σε αυτόνομη λειτουργία; Για αυτό, ας εγκαταστήσουμε μια οθόνη OLED, την SSD1306, με τα κύρια χαρακτηριστικά της:

  • Μέγεθος οθόνης: 0,96"
  • Σειριακό I2C IIC SPI
  • 128X64
  • Λευκό LED OLED LCD

Ακολουθήστε το ηλεκτρικό διάγραμμα και συνδέστε τις 4 ακίδες του OLED μας:

  • Το VCC πηγαίνει στα 3.3V
  • Το GND πηγαίνει στο έδαφος
  • Το SCL πηγαίνει στο NodeMCU (GPIO 2) ==> D4
  • Το SDA πηγαίνει στο NodeMCU (GPIO 0) ==> D3

Αφού συνδέσουμε την οθόνη, ας κατεβάσουμε και εγκαταστήσουμε τη βιβλιοθήκη της στο Arduino IDE: το "ESP8266 OLED Driver for SSD1306 display" που αναπτύχθηκε από τον Daniel Eichhorn (Βεβαιωθείτε ότι χρησιμοποιείτε την έκδοση 3.0.0 ή μεγαλύτερη!).

Εγκαταστήστε τη βιβλιοθήκη στο Arduino IDE που μπορείτε να βρείτε στο SSD1306Wire.h

Μόλις επανεκκινήσετε το IDE, η βιβλιοθήκη θα πρέπει να είναι ήδη εγκατεστημένη.

Η βιβλιοθήκη υποστηρίζει πρωτόκολλο I2C για πρόσβαση στην οθόνη OLED χρησιμοποιώντας την ενσωματωμένη βιβλιοθήκη Wire.h:

/ * OLED */

#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Εμφάνιση καλωδίων (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN).

Ας απαριθμήσουμε μερικά σημαντικά API που θα χρησιμοποιηθούν με την οθόνη OLED. Ο πλήρης κατάλογος μπορεί να βρεθεί στο GITHub που παρέχεται παραπάνω.

A. Έλεγχος οθόνης:

void init (); // Αρχικοποιήστε την οθόνη

void displayOn (void)? // Ενεργοποιήστε την οθόνη σε κενό displayOff (άκυρο). // Απενεργοποιήστε την οθόνη void clear (void). // Εκκαθάριση τοπικού pixel buffer void flipScreenVertically (); // Αναποδογυρίστε την οθόνη

Β. Λειτουργίες κειμένου:

void drawString (int16_t x, int16_t y, String text); // (xpos, ypos, "Text")

void setFont (const char* fontData); // Ορίζει την τρέχουσα γραμματοσειρά.

Διαθέσιμες προεπιλεγμένες γραμματοσειρές:

  • ArialMT_Plain_10,
  • ArialMT_Plain_16,

  • ArialMT_Plain_24

Μόλις εγκατασταθεί τόσο το ίδιο το OLED όσο και η Βιβλιοθήκη του, ας γράψουμε ένα απλό πρόγραμμα για να το δοκιμάσουμε. Εισαγάγετε με τον παρακάτω κωδικό στο IDE σας, το αποτέλεσμα θα πρέπει να είναι μια οθόνη όπως φαίνεται στην παραπάνω φωτογραφία:

* OLED */

#include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Εμφάνιση καλωδίων (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN). void setup () {Serial.begin (115200); displaySetup (); } void loop () {} / * Εκκίνηση και εμφάνιση δεδομένων εγκατάστασης σε OLED * / void displaySetup () {display.init (); // αρχικοποίηση οθόνης. Clear (); // Διαγραφή οθόνης.flipScreenVertically (); // Γυρίστε την οθόνη ανάποδα display.display (); // Βάλτε δεδομένα στην οθόνη Serial.println ("Έναρξη δοκιμής εμφάνισης"); display.setFont (ArialMT_Plain_24); display.drawString (30, 0, "OLED"); // (xpos, ypos, "Text") display.setFont (ArialMT_Plain_16); display.drawString (18, 29, "Δοκιμή ξεκίνησε"); display.setFont (ArialMT_Plain_10); display.drawString (10, 52, "Serial BaudRate:"); display.drawString (90, 52, String (11500)); display.display (); // Θέστε δεδομένα στην καθυστέρηση εμφάνισης (3000). }

Μπορείτε να κατεβάσετε το παραπάνω πρόγραμμα από το GitHub μου:

NodeMCU_OLED_Test

Βήμα 4: Τοπικός μετρητής UV

Τοπικός μετρητής UV
Τοπικός μετρητής UV
Τοπικός μετρητής UV
Τοπικός μετρητής UV

Τώρα, με εγκατεστημένη την οθόνη OLED, μπορούμε να συνδέσουμε μια μπαταρία και να κάνουμε μερικές απομακρυσμένες δοκιμές χρησιμοποιώντας το "UV Meter"

#define SW_VERSION "UV_Sensor_V.1"

/ * Αισθητήρας UV */ #ορίστε αισθητήραUVPin A0 int dataSensorUV = 0; int indexUV = 0; / * OLED */ #include "SSD1306Wire.h" #include "Wire.h" const int I2C_DISPLAY_ADDRESS = 0x3c; const int SDA_PIN = 0; const int SCL_PIN = 2; SSD1306Εμφάνιση καλωδίων (I2C_DISPLAY_ADDRESS, SDA_PIN, SCL_PIN). void setup () {Serial.begin (115200); displaySetup (); } void loop () {readSensorUV (); displayUV (); καθυστέρηση (1000)? } / * Εκκίνηση και εμφάνιση δεδομένων εγκατάστασης σε OLED * / void displaySetup () {display.init (); // αρχικοποίηση οθόνης. Clear (); // Διαγραφή οθόνης.flipScreenVertically (); // Γυρίστε την οθόνη ανάποδα display.display (); // Εμφάνιση δεδομένων Serial.println ("Έναρξη δοκιμής αισθητήρα UV"). display.setFont (ArialMT_Plain_24); display.drawString (10, 0, "MJRoBot"); display.setFont (ArialMT_Plain_16); display.drawString (0, 29, "Δοκιμή αισθητήρα UV"); display.setFont (ArialMT_Plain_10); display.drawString (0, 52, "ΝΔ Ver.:"); display.drawString (45, 52, SW_VERSION); display.display (); καθυστέρηση (3000)? } / * Διαβάστε τον αισθητήρα UV σε mV και υπολογίστε τον δείκτη UV * / void readSensorUV () {byte numOfReadings = 5; dataSensorUV = 0; για (int i = 0; i <numOfReadings; i ++) {dataSensorUV+= analogRead (sensorUVPin); καθυστέρηση (200)? } dataSensorUV /= numOfReadings; dataSensorUV = (dataSensorUV * (3.3 / 1023.0)) * 1000; Serial.println (dataSensorUV); indexCalculate (); } / * Υπολογισμός δείκτη UV * / void indexCalculate () {if (dataSensorUV <227) indexUV = 0; αλλιώς αν (227 <= dataSensorUV && dataSensorUV <318) indexUV = 1; αλλιώς εάν (318 <= dataSensorUV && dataSensorUV <408) indexUV = 2; αλλιώς αν (408 <= dataSensorUV && dataSensorUV <503) indexUV = 3; αλλιώς αν (503 <= dataSensorUV && dataSensorUV <606) indexUV = 4; αλλιώς αν (606 <= dataSensorUV && dataSensorUV <696) indexUV = 5; αλλιώς αν (696 <= dataSensorUV && dataSensorUV <795) indexUV = 6; αλλιώς αν (795 <= dataSensorUV && dataSensorUV <881) indexUV = 7; αλλιώς εάν (881 <= dataSensorUV && dataSensorUV <976) indexUV = 8; αλλιώς αν (976 <= dataSensorUV && dataSensorUV <1079) indexUV = 9; αλλιώς αν (1079 <= dataSensorUV && dataSensorUV <1170) indexUV = 10; else indexUV = 11; } /* Εμφάνιση τιμών UV σε τοπικό OLED* / void displayUV () {display.clear (); display.setFont (ArialMT_Plain_16); display.drawString (20, 0, "UV Sensor"); display.drawString (0, 23, "UV (mV):"); display.drawString (80, 23, String (dataSensorUV)); display.drawString (0, 48, "Δείκτης UV:"); display.setFont (ArialMT_Plain_24); display.drawString (82, 42, String (indexUV)); display.display (); }

Μπορείτε να κατεβάσετε τον παραπάνω κώδικα από το GitHun μου: NodeMCU_UV_Sensor_OLED.ino

Βήμα 5: Εγκατάσταση DHT22 για μετρήσεις θερμοκρασίας αέρα και υγρασίας

Εγκατάσταση DHT22 για μετρήσεις θερμοκρασίας και υγρασίας αέρα
Εγκατάσταση DHT22 για μετρήσεις θερμοκρασίας και υγρασίας αέρα
Εγκατάσταση DHT22 για μετρήσεις θερμοκρασίας και υγρασίας αέρα
Εγκατάσταση DHT22 για μετρήσεις θερμοκρασίας και υγρασίας αέρα

Ένας από τους πιο χρησιμοποιούμενους αισθητήρες για τη λήψη δεδομένων καιρού είναι ο DHT22 (ή ο αδελφός DHT11), ένας ψηφιακός αισθητήρας σχετικής υγρασίας και θερμοκρασίας. Χρησιμοποιεί έναν χωρητικό αισθητήρα υγρασίας και ένα θερμίστορ για τη μέτρηση του περιβάλλοντος αέρα και εκπέμπει ένα ψηφιακό σήμα στην ακίδα δεδομένων (δεν απαιτούνται αναλογικές ακίδες εισόδου).

Ο αισθητήρας πρέπει να τροφοδοτείται μεταξύ 3,3V και 5V και θα λειτουργεί από -40oC έως +80oC με ακρίβεια +/- 0,5oC για θερμοκρασία και +/- 2% για σχετική υγρασία. Είναι επίσης σημαντικό να έχετε κατά νου ότι η περίοδος ανίχνευσής του είναι κατά μέσο όρο 2 δευτερόλεπτα (ελάχιστος χρόνος μεταξύ των μετρήσεων). Ο ιστότοπος του Adafruit παρέχει πολλές πληροφορίες και για τα δύο, DHT22 και τον αδελφό του DHT11. Για περισσότερες λεπτομέρειες, επισκεφθείτε τη σελίδα φροντιστηρίου DHT22/11.

Το DHT22 έχει 4 ακίδες (βλέποντας τον αισθητήρα, ο πείρος 1 είναι ο πιο αριστερός):

  1. VCC (θα συνδεθούμε σε 3.3V από το NodeMCU).
  2. Έκδοση δεδομένων
  3. Δεν συνδέεται και
  4. Εδαφος.

Μόλις συνήθως χρησιμοποιείτε τον αισθητήρα σε αποστάσεις μικρότερες από 20m, θα πρέπει να συνδεθεί μια αντίσταση 10K μεταξύ των ακίδων δεδομένων και VCC. Ο ακροδέκτης εξόδου θα συνδεθεί με τον πείρο NodeMCU D3 (δείτε το παραπάνω διάγραμμα). Μόλις εγκατασταθεί ο αισθητήρας στη μονάδα μας, κατεβάστε τη βιβλιοθήκη DHT από το αποθετήριο Adafruit GitHub και εγκαταστήστε το στο αρχείο της βιβλιοθήκης του Arduino. Μόλις φορτώσετε ξανά το Arduino IDE, θα πρέπει να εγκατασταθεί η "βιβλιοθήκη αισθητήρων DHT".

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

/* DHT22*/

#include "DHT.h" #define DHTPIN D2 #define DHTTYPE DHT22 DHT dht (DHTPIN, DHTTYPE); φουσκωτό βουητό = 0; float temp = 0;

Θα δημιουργηθεί μια νέα λειτουργία για την ανάγνωση του αισθητήρα:

/ * Λήψη δεδομένων DHT */

void getDhtData (void) {float tempIni = temp; float humIni = βουητό; temp = dht.readTemperature (); hum = dht.readHumidity (); if (isnan (hum) || isnan (temp)) // Ελέγξτε αν απέτυχε οποιαδήποτε ανάγνωση και βγείτε νωρίς (για να προσπαθήσετε ξανά). {Serial.println ("Η ανάγνωση απέτυχε από τον αισθητήρα DHT!"); temp = tempIni; βουητό = humIni; ΕΠΙΣΤΡΟΦΗ; }}

Ο πλήρης κωδικός που περιλαμβάνει τους αισθητήρες UV και DHT μπορεί να μεταφορτωθεί από το GitHub μου: NodeMCU_UV_DHT_Sensor_OLED

Βήμα 6: Αποστολή δεδομένων στο ThingSpeak.com

Αποστολή δεδομένων στο ThingSpeak.com
Αποστολή δεδομένων στο ThingSpeak.com
Αποστολή δεδομένων στο ThingSpeak.com
Αποστολή δεδομένων στο ThingSpeak.com
Αποστολή δεδομένων στο ThingSpeak.com
Αποστολή δεδομένων στο ThingSpeak.com

Μέχρι στιγμής, χρησιμοποιήσαμε μόνο το NodeMCU ESP12-E ως κανονικό και συνηθισμένο πίνακα Arduino. Φυσικά, έχουμε «ξύνει» μόνο τις πραγματικές δυνατότητες αυτού του εντυπωσιακού μικρού τσιπ και τώρα είναι η ώρα της απογείωσης στον ουρανό! Better καλύτερα στα αστέρια! Ερ… στο σύννεφο!;-)

Ας ξεκινήσουμε!

  1. Πρώτον, πρέπει να έχετε λογαριασμό στο ThinkSpeak.com
  2. Ακολουθήστε τις οδηγίες για να δημιουργήσετε ένα κανάλι και λάβετε υπόψη το αναγνωριστικό καναλιού και το κλειδί API εγγραφής
  3. Ενημερώστε τον παρακάτω κώδικα με το δίκτυο WiFi και τα διαπιστευτήριά σας Thinkspeak
  4. Εκτελέστε το πρόγραμμα στο IDE

Ας σχολιάσουμε τα πιο σημαντικά μέρη του κώδικα:

Αρχικά, ας καλέσουμε τη βιβλιοθήκη ESP8266, να ορίσουμε το πρόγραμμα -πελάτη WiFi και να ορίσουμε τα διαπιστευτήρια τοπικού δρομολογητή και Thinkspeak:

/* ESP12-E & Thinkspeak*/

#include WiFiClient client. const char* MY_SSID = "Το δικό σας SSD ID ΕΔΩ"; const char* MY_PWD = "Ο ΚΩΔΙΚΟΣ ΠΡΟΣΒΑΣΗΣ ΣΑΣ ΕΔΩ"; const char* TS_SERVER = "api.thingspeak.com"; Συμβολοσειρά TS_API_KEY = "ΤΟ ΚΑΝΑΛΙ ΣΑΣ ΓΡΑΦΤΕ ΤΟ Κλειδί API";

Δεύτερον, ας συμπεριλάβουμε μια πολύ σημαντική βιβλιοθήκη για έργα IoT: SimpleTimer.h:

/ * ΧΡΟΝΟΔΙΑΚΟΠΤΗΣ */

#include SimpleTimer timer;

Τρίτον, κατά τη ρύθμιση (), θα ξεκινήσουμε σειριακή επικοινωνία, θα καλέσουμε τη λειτουργία connectWiFi () και θα ορίσουμε τα χρονόμετρα. Σημειώστε ότι η γραμμή κώδικα: timer.setInterval (60000L, sendDataTS). θα καλεί τη συνάρτηση sendDataTS () κάθε 60 δευτερόλεπτα, προκειμένου να ανεβάσει δεδομένα στο κανάλι ThinkSpeak.

void setup ()

{… Serial.begin (115200); καθυστέρηση (10)? … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Τέλος, αλλά όχι λιγότερο σημαντικό, κατά τη διάρκεια του βρόχου (), η μόνη εντολή που χρειάζεται είναι η εκκίνηση του χρονοδιακόπτη και αυτό είναι όλο!

κενός βρόχος ()

{… Timer.run (); // Ξεκινά το SimpleTimer}

Παρακάτω, μπορείτε να δείτε τις δύο σημαντικές λειτουργίες που χρησιμοποιούνται για τον χειρισμό της επικοινωνίας Thinkspeak:

Σύνδεση ESP12-E με το δίκτυό σας WiFi:

/***************************************************

*Σύνδεση WiFi ******************************************* ***/ void connectWifi () {Serial.print ("Connecting to"+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {καθυστέρηση (1000); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi Connected"); Serial.println (""); }

Το ESP12-E στέλνει δεδομένα στο ThinkSpeak:

/***************************************************

*Αποστολή δεδομένων στο Thinkspeak Channel **************************************** ******/ void sendDataTS (άκυρο) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field1 ="; postStr += String (dataSensorUV); postStr += "& field2 ="; postStr += String (indexUV); postStr += "& field3 ="; postStr += String (temp); postStr += "& field4 ="; postStr += String (βουητό); postStr += "\ r / n / r / n"; client.print ("POST /ενημέρωση HTTP /1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Σύνδεση: κλείσιμο / n"); client.print ("X-THINGSPEAKAPIKEY:" + TS_API_KEY + "\ n"); client.print ("Content-Type: application/x-www-form-urlencoded / n"); client.print ("Περιεχόμενο-Μήκος:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); καθυστέρηση (1000)? } εστάλη ++; client.stop (); }

Ο πλήρης κωδικός μπορεί να βρεθεί στο GitHub μου: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Μόλις ανεβάσετε τον κωδικό στο NodeMCU. Ας συνδέσουμε μια εξωτερική μπαταρία και κάνουμε κάποια μέτρηση κάτω από τον ήλιο. Βάζω τον Απομακρυσμένο Σταθμό στην οροφή και αρχίζω να καταγράφω δεδομένα στο ThingSpeak.com όπως φαίνεται στις παραπάνω φωτογραφίες.

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

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

Όπως πάντα, ελπίζω ότι αυτό το έργο μπορεί να βοηθήσει άλλους να βρουν τον δρόμο τους στον συναρπαστικό κόσμο των ηλεκτρονικών!

Για λεπτομέρειες και τελικό κωδικό, επισκεφθείτε το αποθετήριο GitHub: RPi-NodeMCU-Weather-Station

Για περισσότερα έργα, επισκεφθείτε το ιστολόγιό μου: MJRoBot.org

Μείνετε συντονισμένοι! Επόμενο σεμινάριο θα στείλουμε δεδομένα από έναν απομακρυσμένο μετεωρολογικό σταθμό σε έναν κεντρικό, με βάση έναν διακομιστή Ιστού Raspberry Pi:

Εικόνα
Εικόνα

Saludos από τον νότο του κόσμου!

Τα λέμε στο επόμενο διδακτικό μου!

Σας ευχαριστώ, Μαρσέλο

Συνιστάται: