جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
في هذا الدليل ، سنقوم ببناء مشروع IOT بسيط يتم فيه جلب بيانات الطقس لمدينتنا من openweather.com/api وعرضها باستخدام برنامج المعالجة.
اللوازم:
- اردوينو
- ESP8266 أو أي وحدة esp أخرى
- اردوينو IDE
- برامج المعالجة
- اللوح
- Jumperwires ذكر إلى ذكر ومن ذكر إلى أنثى
الخطوة 1: احصل على مفتاح API وعنوان URL من Openweather.org
- أنشئ حسابًا في https://openweathermap.org (الصورة 1)
- بعد تسجيل الدخول ، انتقل إلى مفاتيح API وستحصل على مفتاح API كما هو موضح في الصورة (الصورة 2)
- انسخ مفتاح API واحفظه في ملف المفكرة (الصورة 3)
- انتقل إلى خيار API (الصورة 4)
- انتقل إلى خيار مستند API كما هو موضح في الصورة (الصورة 5)
- انسخ عنوان url من والموضح واحفظه في ملف المفكرة (الصورة 6)
الخطوة 2: مخطط الاتصال
الخطوة 3: كود اردوينو
قبل نسخ هذا الكود إلى Arduino ، تأكد من تنزيل لوحة ESP8266 إلى arduino ID باستخدام Boards manager.
#يشمل
#include #include #include const char * ssid = "SSID الخاص بك" ؛ const char * password = "SSID PASSWORD الخاص بك" ؛ // اسم المجال الخاص بك مع مسار URL أو عنوان IP مع المسار String openWeatherMapApiKey = "الصق مفتاح API الخاص بك هنا" ؛ // استبدل برمز الدولة والمدينة String city = "Mumbai" ؛ سلسلة countryCode = "IN" ؛ بيانات السلسلة [16] ؛ // تم ضبط المؤقت الافتراضي على 10 ثوانٍ لاختبار الأغراض // بالنسبة للتطبيق النهائي ، تحقق من حدود استدعاء واجهة برمجة التطبيقات لكل ساعة / دقيقة لتجنب الحصول على حظر / محظور بدون توقيع طويل lastTime = 0 ؛ // Timer set to 10 minutes (600000) // timerDelay غير موقعة = 600000 ؛ // ضبط المؤقت على 10 ثوانٍ (10000) timerDelay طويل بدون توقيع = 10000 ؛ سلسلة jsonBuffer ؛ إعداد باطل () {Serial.begin (115200) ؛ WiFi.begin (SSID ، كلمة المرور) ؛ //Serial.println("Connecting ") ؛ while (WiFi.status ()! = WL_CONNECTED) {delay (500) ؛ // Serial.print (".") ؛ } // Serial.println ("") ؛ // Serial.print ("متصل بشبكة WiFi بعنوان IP:") ؛ // Serial.println (WiFi.localIP ()) ؛ // // Serial.println ("Timer set to 10 seconds (timerDelay variable) ، سيستغرق 10 ثوانٍ قبل نشر القراءة الأولى.") ؛ } حلقة فارغة () {// أرسل طلب HTTP GET إذا ((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 if (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input فشل! ") ؛ إرجاع؛ } // Serial.print ("JSON object =") ؛ // Serial.println (myObject) ؛ // Serial.print ("درجة الحرارة:") ؛ // Serial.println (myObject ["main"] ["temp"]) ؛ // Serial.print ("الضغط:") ؛ // Serial.println (myObject ["main"] ["pressure"]) ؛ // Serial.print ("الرطوبة:") ؛ // Serial.println (myObject ["main"] ["humidity"]) ؛ // Serial.print ("سرعة الرياح:") ؛ // Serial.println (myObject ["wind"] ["speed"]) ؛ int temp = myObject ["main"] ["temp"] ؛ long pres = myObject ["main"] ["pressure"] ؛ int humid = myObject ["main"] ["الرطوبة"] ؛ int wind = myObject ["wind"] ["speed"] ؛ String country = JSON.stringify (myObject ["sys"] ["country"]) ؛ String city1 = JSON.stringify (myObject ["name"]) ؛ String weather = JSON.stringify (myObject ["weather"] [0] ["description"]) ؛ رمز السلسلة = JSON.stringify (myObject ["الطقس"] [0] ["icon"]) ؛ البيانات [0] = سلسلة (درجة الحرارة) ؛ البيانات [1] = "/" ؛ البيانات [2] = سلسلة (عرض) ؛ البيانات [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 عرض int رطوبة ريح int مدينة السلسلة = "" ؛ بلد السلسلة = "" ؛ سلسلة الطقس = "" ؛ رمز السلسلة = "" ؛ إعداد باطل () {size (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) ؛ نص (temp + "° C" ، 200 ، 100) ؛ نص ("الضغط:" ، 25 ، 150) ؛ نص (pres + "hpa"، 200، 150) ؛ نص ("الرطوبة:" ، 25 ، 200) ؛ نص (رطب + "٪" ، 200 ، 200) ؛ نص ("Wind:"، 25، 250) ؛ نص (رياح + "م / ث" ، 200 ، 250) ؛ نص ("البلد / المدينة:"، 25، 300) ؛ نص (بلد + "-" + مدينة ، 200 ، 300) ؛ نص ("الطقس:" ، 25 ، 350) ؛ نص (الطقس ، 200 ، 350) ؛ if (icon.contains ("01d")) {image (img، 380، 15)؛ } else if (icon.contains ("01n")) {image (img2، 380، 15)؛ } else if (icon.contains ("02d")) {image (img3، 380، 15)؛ } else if (icon.contains ("02n")) {image (img4، 380، 15)؛ } else if (icon.contains ("03d")) {image (img5، 380، 15)؛ } else if (icon.contains ("03n")) {image (img6، 380، 15)؛ } else if (icon.contains ("04d")) {image (img7، 380، 15)؛ } else if (icon.contains ("04n")) {image (img8، 380، 15)؛ } else if (icon.contains ("09d")) {image (img9، 380، 15)؛ } else if (icon.contains ("09n")) {image (img10، 380، 15)؛ } else if (icon.contains ("10d")) {image (img11، 380، 15)؛ } else if (icon.contains ("10n")) {image (img12، 380، 15)؛ } else if (icon.contains ("11d")) {image (img13، 380، 15)؛ } else if (icon.contains ("11n")) {image (img14، 380، 15)؛ } else if (icon == "13d") {image (img15، 380، 15)؛ } else if (icon.contains ("13n")) {image (img16، 380، 15)؛ } else if (icon.contains ("50d")) {image (img17، 380، 15)؛ } else if (icon.contains ("50n")) {image (img18، 380، 15)؛ }} serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n')؛ إذا كانت (data! = null) {data = trim (data) ؛ عناصر السلسلة = انقسام (البيانات ، '/') ؛ if (items.length> 1) {temp = int (items [0]) ؛ pres = int (items [1]) ؛ رطب = int (العناصر [2]) ؛ wind = int (items [3]) ؛ city = عناصر [4].replace ("\" "،" ") ؛ البلد = عناصر [5].replace (" / ""، "") ؛ الطقس = العناصر [6].replace ("\" "،" ")؛ icon = العناصر [7].replace (" / ""، "")؛ }}}}