תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
במדריך זה אנו הולכים לבנות פרויקט IOT פשוט בו ניתן להביא את נתוני מזג האוויר של העיר שלנו מ- openweather.com/api ולהציג אותם באמצעות תוכנת עיבוד.
אספקה:
- ארדואינו
- ESP8266 או כל מודול esp אחר
- Arduino IDE
- תוכנת עיבוד
- לוח לחם
- Jumperwires זכר לזכר וזכר לנקבה
שלב 1: השגת מפתח API וכתובת אתר מאת Openweather.org
- צור חשבון ב- https://openweathermap.org (תמונה 1)
- לאחר הכניסה עבור למפתחות API ותקבל את מפתח ה- API כפי שמוצג בתמונה. (תמונה 2)
- העתק את מפתח ה- API ושמור אותו בקובץ פנקס רשימות. (תמונה 3)
- עבור לאפשרות API (תמונה 4)
- עבור לאפשרות API doc כפי שמוצג בתמונה (תמונה 5)
- העתק את כתובת האתר מהמוצג ושמור אותו בקובץ פנקס רשימות (תמונה 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 (" / "", ""); }}}}