תוכן עניינים:

(פרויקט IOT) קבל נתוני מזג אוויר באמצעות ESP8266 ו- Openweather API: 5 שלבים
(פרויקט IOT) קבל נתוני מזג אוויר באמצעות ESP8266 ו- Openweather API: 5 שלבים

וִידֵאוֹ: (פרויקט IOT) קבל נתוני מזג אוויר באמצעות ESP8266 ו- Openweather API: 5 שלבים

וִידֵאוֹ: (פרויקט IOT) קבל נתוני מזג אוויר באמצעות ESP8266 ו- Openweather API: 5 שלבים
וִידֵאוֹ: עשר הנשים הכי גבוהות בעולם┃טופטן 2024, נוֹבֶמבֶּר
Anonim
(IOT Project) קבל נתוני מזג אוויר באמצעות ESP8266 ו- Openweather API
(IOT Project) קבל נתוני מזג אוויר באמצעות ESP8266 ו- Openweather API

במדריך זה אנו הולכים לבנות פרויקט IOT פשוט בו ניתן להביא את נתוני מזג האוויר של העיר שלנו מ- openweather.com/api ולהציג אותם באמצעות תוכנת עיבוד.

אספקה:

  1. ארדואינו
  2. ESP8266 או כל מודול esp אחר
  3. Arduino IDE
  4. תוכנת עיבוד
  5. לוח לחם
  6. Jumperwires זכר לזכר וזכר לנקבה

שלב 1: השגת מפתח API וכתובת אתר מאת Openweather.org

השגת מפתח API וכתובת אתר מאת Openweather.org
השגת מפתח API וכתובת אתר מאת Openweather.org
השגת מפתח API וכתובת אתר מאת Openweather.org
השגת מפתח API וכתובת אתר מאת 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 doc כפי שמוצג בתמונה (תמונה 5)
  6. העתק את כתובת האתר מהמוצג ושמור אותו בקובץ פנקס רשימות (תמונה 6)

שלב 2: תרשים חיבור

תרשים חיבור
תרשים חיבור

שלב 3: קוד ארדואינו

לפני העתקת קוד זה ל- Arduino וודא שהורדת לוח ESP8266 לתוך arduino ide באמצעות מנהל Boards.

#לִכלוֹל

#include #include #include const char* ssid = "ה- SSID שלך"; const char* password = "סיסמת ה- SSID שלך"; // שם הדומיין שלך עם נתיב URL או כתובת IP עם נתיב String openWeatherMapApiKey = "הדבק את מפתח ה- API שלך כאן"; // החלף בקוד המדינה והעיר שלך מחרוזת עיר = "מומבאי"; String countryCode = "IN"; נתוני מחרוזת [16]; // טיימר ברירת המחדל מוגדר ל -10 שניות למטרות בדיקה // ליישום סופי, בדוק את מגבלות קריאת ה- API לשעה/דקה כדי להימנע מחסימה/החסימה של LongTime = 0; // טיימר מוגדר ל 10 דקות (600000) // טיימר ארוך לא חתום = 600000; // הגדר טיימר ל -10 שניות (10000) טיימר ארוך ללא חתום = 10000; מחרוזת jsonBuffer; הגדרת חלל () {Serial.begin (115200); WiFi.begin (ssid, סיסמא); //Serial.println("חיבור "); בעוד (WiFi.status ()! = WL_CONNECTED) {עיכוב (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("מחובר לרשת WiFi עם כתובת IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("טיימר מוגדר ל -10 שניות (משתנה timerDelay), ייקח 10 שניות לפני פרסום הקריאה הראשונה."); } לולאת void () {// שלח בקשת GET GTP אם ((millis () - lastTime)> timerDelay) {// בדוק את מצב חיבור ה- WiFi אם (WiFi.status () == WL_CONNECTED) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= " + city +", " + 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 object ="); // Serial.println (myObject); // Serial.print ("טמפרטורה:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("לחץ:"); // Serial.println (myObject ["main"] ["לחץ"]); // Serial.print ("לחות:"); // Serial.println (myObject ["main"] ["לחות"]); // Serial.print ("מהירות הרוח:"); // Serial.println (myObject ["רוח"] ["מהירות"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["לחץ"]; int humid = myObject ["main"] ["לחות"]; int wind = myObject ["wind"] ["speed"]; מדינה מחרוזת = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["שם"]); מזג אוויר מחרוזת = JSON.stringify (myObject ["מזג אוויר"] [0] ["תיאור"]); סמל מחרוזת = JSON.stringify (myObject ["weather"] [0] ["icon"]); data [0] = מחרוזת (טמפ '); data [1] = "/"; data [2] = מחרוזת (pres); data [3] = "/"; data [4] = מחרוזת (לחה); data [5] = "/"; data [6] = מחרוזת (רוח); data [7] = "/"; נתונים [8] = מדינה; data [9] = "/"; נתונים [10] = city1; data [11] = "/"; נתונים [12] = מזג אוויר; data [13] = "/"; data [14] = אייקון; data [15] = "\ n"; for (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 wind; עיר מחרוזת = ""; מדינה מחרוזת = ""; מזג אוויר מחרוזת = ""; סמל מחרוזת = ""; הגדרת חלל () {גודל (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"); } צייר חלל () {רקע (72, 209, 204); textSize (22); מילוי (54, 69, 79); טקסט ("טמפרטורה:", 25, 100); טקסט (טמפ ' +"° C", 200, 100); טקסט ("לחץ:", 25, 150); טקסט (pres + "hpa", 200, 150); טקסט ("לחות:", 25, 200); טקסט (לח+" %", 200, 200); טקסט ("רוח:", 25, 250); טקסט (רוח+"מ/ש", 200, 250); טקסט ("מדינה/עיר:", 25, 300); טקסט (מדינה + "-" + עיר, 200, 300); טקסט ("מזג אוויר:", 25, 350); טקסט (מזג אוויר, 200, 350); if (icon.contains ("01d")) {image (img, 380, 15); } אחר אם (icon.contains ("01n")) {image (img2, 380, 15); } אחר אם (icon.contains ("02d")) {image (img3, 380, 15); } אחר אם (icon.contains ("02n")) {image (img4, 380, 15); } אחר אם (icon.contains ("03d")) {image (img5, 380, 15); } אחר אם (icon.contains ("03n")) {image (img6, 380, 15); } אחר אם (icon.contains ("04d")) {image (img7, 380, 15); } אחר אם (icon.contains ("04n")) {image (img8, 380, 15); } אחר אם (icon.contains ("09d")) {image (img9, 380, 15); } אחר אם (icon.contains ("09n")) {image (img10, 380, 15); } אחר אם (icon.contains ("10d")) {image (img11, 380, 15); } אחר אם (icon.contains ("10n")) {image (img12, 380, 15); } אחר אם (icon.contains ("11d")) {image (img13, 380, 15); } אחר אם (icon.contains ("11n")) {image (img14, 380, 15); } אחרת if (icon == "13d") {image (img15, 380, 15); } אחר אם (icon.contains ("13n")) {image (img16, 380, 15); } אחר אם (icon.contains ("50d")) {image (img17, 380, 15); } אחר אם (icon.contains ("50n")) {image (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); if (data! = null) {data = trim (data); פריטי מחרוזת = פיצול (נתונים, '/'); אם (items.length> 1) {temp = int (פריטים [0]); pres = int (פריטים [1]); humid = int (פריטים [2]); wind = int (פריטים [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); מזג אוויר = פריטים [6].replace ("\" "," "); סמל = פריטים [7].replace (" / "", ""); }}}}

מוּמלָץ: