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

(Έργο IOT) Λάβετε δεδομένα καιρού χρησιμοποιώντας το ESP8266 και το Openweather API: 5 βήματα
(Έργο IOT) Λάβετε δεδομένα καιρού χρησιμοποιώντας το ESP8266 και το Openweather API: 5 βήματα

Βίντεο: (Έργο IOT) Λάβετε δεδομένα καιρού χρησιμοποιώντας το ESP8266 και το Openweather API: 5 βήματα

Βίντεο: (Έργο IOT) Λάβετε δεδομένα καιρού χρησιμοποιώντας το ESP8266 και το Openweather API: 5 βήματα
Βίντεο: Προγραμματισμός της μονάδας αισθητήρα υγρασίας θερμοκρασίας ESP8266 ESP01 DHT11 | RemoteXY | FLProg 2024, Ιούλιος
Anonim
(Έργο IOT) Λάβετε δεδομένα καιρού χρησιμοποιώντας το ESP8266 και το Openweather API
(Έργο IOT) Λάβετε δεδομένα καιρού χρησιμοποιώντας το ESP8266 και το Openweather API

Σε αυτό το διδακτικό θα δημιουργήσουμε ένα απλό έργο IOT στο οποίο θα λαμβάνουμε τα δεδομένα καιρού της πόλης μας από το openweather.com/api και θα τα εμφανίζουμε χρησιμοποιώντας το λογισμικό επεξεργασίας.

Προμήθειες:

  1. Arduino
  2. ESP8266 ή οποιαδήποτε άλλη μονάδα esp
  3. Arduino IDE
  4. Λογισμικό επεξεργασίας
  5. Breadboard
  6. Jumperwires Άνδρας σε άντρας και άνδρας σε γυναίκα

Βήμα 1: Λάβετε κλειδί API και διεύθυνση URL από το Openweather.org

Αποκτήστε κλειδί API και διεύθυνση URL από το Openweather.org
Αποκτήστε κλειδί API και διεύθυνση URL από το Openweather.org
Αποκτήστε κλειδί API και διεύθυνση URL από το Openweather.org
Αποκτήστε κλειδί API και διεύθυνση URL από το Openweather.org
Αποκτήστε κλειδί και διεύθυνση API από το Openweather.org
Αποκτήστε κλειδί και διεύθυνση API από το Openweather.org
  1. Δημιουργία λογαριασμού στο https://openweathermap.org (Εικόνα 1)
  2. Αφού συνδεθείτε, μεταβείτε στα κλειδιά API και θα λάβετε το κλειδί API όπως φαίνεται στην εικόνα. (Εικόνα 2)
  3. Αντιγράψτε το κλειδί API και αποθηκεύστε το σε ένα σημειωματάριο. (Εικόνα 3)
  4. Μετάβαση στην επιλογή API (Εικόνα 4)
  5. Μετάβαση στην επιλογή εγγράφου API όπως φαίνεται στην εικόνα (Εικόνα 5)
  6. Αντιγράψτε το url από το εμφανιζόμενο και αποθηκεύστε το σε ένα σημειωματάριο (Εικόνα 6)

Βήμα 2: Διάγραμμα σύνδεσης

Διάγραμμα σύνδεσης
Διάγραμμα σύνδεσης

Βήμα 3: Κωδικός Arduino

Πριν αντιγράψετε αυτόν τον κώδικα στο Arduino, βεβαιωθείτε ότι έχετε κατεβάσει τον πίνακα ESP8266 στο arduino ide χρησιμοποιώντας τον πίνακα διαχείρισης.

#περιλαμβάνω

#include #include #include const char* ssid = "Το SSID σας"; const char* password = "Your SSID PASSWORD"; // Το όνομα τομέα σας με διαδρομή URL ή διεύθυνση IP με διαδρομή String openWeatherMapApiKey = "Επικολλήστε το κλειδί API σας εδώ"; // Αντικαταστήστε με τον κωδικό χώρας και την πόλη σας String city = "Mumbai"; String countryCode = "IN"; Στοιχεία συμβολοσειράς [16]; // Ο ΧΡΟΝΟΔΙΑΓΡΑΦΟΣ ΠΡΟΦΥΛΑΞΗΣ ΡΥΘΜΙΖΕΤΑΙ ΣΕ 10 ΔΕΥΤΕΡΟΠΕΔΑ ΓΙΑ ΣΚΟΠΟΥ ΔΟΚΙΜΗΣ // Για μια τελική εφαρμογή, ελέγξτε τα όρια κλήσεων API ανά ώρα/λεπτό για να αποφύγετε τον αποκλεισμό/την απαγόρευση ανυπόγραφης πολύ lastTime = 0. // Χρονόμετρο ρυθμισμένο σε 10 λεπτά (600000) // ανυπόγραφο χρονοδιακόπτηDelay = 600000; // Ρυθμίστε το χρονόμετρο στα 10 δευτερόλεπτα (10000) ανυπόγραφο χρονοδιακόπτηDelay = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, κωδικός πρόσβασης); //Serial.println("Σύνδεση "); while (WiFi.status ()! = WL_CONNECTED) {καθυστέρηση (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Σύνδεση σε δίκτυο WiFi με διεύθυνση IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Ο χρονοδιακόπτης έχει οριστεί σε 10 δευτερόλεπτα (μεταβλητή timerDelay), θα χρειαστούν 10 δευτερόλεπτα πριν από τη δημοσίευση της πρώτης ανάγνωσης."); } void loop () {// Αποστολή αιτήματος HTTP GET εάν ((millis () - lastTime)> timerDelay) {// Ελέγξτε την κατάσταση σύνδεσης WiFi εάν (WiFi.status () == WL_CONNECTED) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= " + πόλη +", " + countryCode +" & APPID = " +" d5b56fd07988143ae141503ed9d81742 " +" & units = metric "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) μπορεί να χρησιμοποιηθεί για να λάβετε τον τύπο του var εάν (JSON.typeof (myObject) == "undefined") {//Serial.println("Αποτυχία εισαγωγής εισόδου! "); ΕΠΙΣΤΡΟΦΗ; } // Serial.print ("αντικείμενο JSON ="); // Serial.println (myObject); // Serial.print ("Θερμοκρασία:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Πίεση:"); // Serial.println (myObject ["main"] ["πίεση"]); // Serial.print ("Υγρασία:"); // Serial.println (myObject ["κύρια"] ["υγρασία"]); // Serial.print ("Ταχύτητα ανέμου:"); // Serial.println (myObject ["άνεμος"] ["ταχύτητα"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["πίεση"]; int υγρός = myObject ["κύρια"] ["υγρασία"]; int wind = myObject ["άνεμος"] ["ταχύτητα"]; Χώρα συμβολοσειράς = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["name"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); Εικονίδιο συμβολοσειράς = JSON.stringify (myObject ["weather"] [0] ["icon"]); δεδομένα [0] = String (temp); δεδομένα [1] = "/"; δεδομένα [2] = String (pres); δεδομένα [3] = "/"; δεδομένα [4] = Χορδή (υγρό). δεδομένα [5] = "/"; δεδομένα [6] = Χορδή (άνεμος). δεδομένα [7] = "/"; δεδομένα [8] = χώρα. δεδομένα [9] = "/"; δεδομένα [10] = city1; δεδομένα [11] = "/"; δεδομένα [12] = καιρός. δεδομένα [13] = "/"; δεδομένα [14] = εικονίδιο. δεδομένα [15] = "\ n"; για (int i = 0; i0) {// Serial.print ("Κωδικός απόκρισης HTTP:"); // Serial.println (httpResponseCode); ωφέλιμο φορτίο = http.getString (); } else {Serial.print ("Κωδικός σφάλματος:"); Serial.println (httpResponseCode); } // Δωρεάν πόροι http.end (); ωφέλιμο φορτίο επιστροφής · }

Βήμα 4: Κώδικας επεξεργασίας

Κώδικας επεξεργασίας
Κώδικας επεξεργασίας
Κώδικας επεξεργασίας
Κώδικας επεξεργασίας
Κώδικας επεξεργασίας
Κώδικας επεξεργασίας

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

επεξεργασία εισαγωγής.σειρά.*;

Σειριακό myPort; PImage img; PImage img2; PImage img3; PImage img4; PImage img5; PImage img6; PImage img7; PImage img8; PImage img9; PImage img10; PImage img11; PImage img12; PImage img13; PImage img14; PImage img15; PImage img16; PImage img17; PImage img18; int temp? int pres? int υγρό? int άνεμος? String city = ""; Χώρα συμβολοσειράς = ""; String weather = ""; Εικονίδιο συμβολοσειράς = ""; void setup () {μέγεθος (500, 500); myPort = νέο Σειριακό (αυτό, "COM3", 115200); img = loadImage ("01d.png"); img2 = loadImage ("01n.png"); img3 = loadImage ("02d.png"); img4 = loadImage ("02n.png"); img5 = loadImage ("03d.png"); img6 = loadImage ("03n.png"); img7 = loadImage ("04d.png"); img8 = loadImage ("04n.png"); img9 = loadImage ("09d.png"); img10 = loadImage ("09n.png"); img11 = loadImage ("10d.png"); img12 = loadImage ("10n.png"); img13 = loadImage ("11d.png"); img14 = loadImage ("11n.png"); img15 = loadImage ("13d.png"); img16 = loadImage ("13n.png"); img17 = loadImage ("50d.png"); img18 = loadImage ("50n.png"); } void draw () {background (72, 209, 204); textSize (22); γέμισμα (54, 69, 79). κείμενο ("Θερμοκρασία:", 25, 100); κείμενο (θερμοκρασία +"° C", 200, 100); κείμενο ("Πίεση:", 25, 150); κείμενο (pres + "hpa", 200, 150); κείμενο ("Υγρασία:", 25, 200); κείμενο (υγρό+" %", 200, 200); κείμενο ("Wind:", 25, 250); κείμενο (άνεμος+"m/s", 200, 250); κείμενο ("Χώρα/Πόλη:", 25, 300); κείμενο (χώρα + "-" + πόλη, 200, 300); κείμενο ("Καιρός:", 25, 350); κείμενο (καιρός, 200, 350). if (icon.contain ("01d")) {image (img, 380, 15); } else if (icon.contain ("01n")) {image (img2, 380, 15); } else if (icon.contain ("02d")) {image (img3, 380, 15); } else if (icon.contain ("02n")) {image (img4, 380, 15); } else if (icon.contain ("03d")) {image (img5, 380, 15); } else if (icon.contain ("03n")) {image (img6, 380, 15); } else if (icon.contain ("04d")) {image (img7, 380, 15); } else if (icon.contain ("04n")) {image (img8, 380, 15); } else if (icon.contain ("09d")) {image (img9, 380, 15); } else if (icon.contain ("09n")) {image (img10, 380, 15); } else if (icon.contain ("10d")) {image (img11, 380, 15); } else if (icon.contain ("10n")) {image (img12, 380, 15); } else if (icon.contain ("11d")) {image (img13, 380, 15); } else if (icon.contain ("11n")) {image (img14, 380, 15); } else if (icon == "13d") {image (img15, 380, 15); } else if (icon.contain ("13n")) {image (img16, 380, 15); } else if (icon.contain ("50d")) {image (img17, 380, 15); } else if (icon.contain ("50n")) {image (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); if (data! = null) {data = trim (data); Στοιχεία συμβολοσειράς = split (δεδομένα, '/'); if (items.length> 1) {temp = int (στοιχεία [0]); pres = int (στοιχεία [1]); υγρό = int (στοιχεία [2]); wind = int (στοιχεία [3]); πόλη = στοιχεία [4].αντικατάσταση ("\" "," "); χώρα = στοιχεία [5]. αντικατάσταση (" / "", ""); καιρός = στοιχεία [6]. αντικατάσταση ("\" "," "); εικονίδιο = στοιχεία [7]. αντικατάσταση (" / "", ""); }}}}

Συνιστάται: