สารบัญ:

(โครงการ IOT) รับข้อมูลสภาพอากาศโดยใช้ ESP8266 และ Openweather API: 5 ขั้นตอน
(โครงการ IOT) รับข้อมูลสภาพอากาศโดยใช้ ESP8266 และ Openweather API: 5 ขั้นตอน

วีดีโอ: (โครงการ IOT) รับข้อมูลสภาพอากาศโดยใช้ ESP8266 และ Openweather API: 5 ขั้นตอน

วีดีโอ: (โครงการ IOT) รับข้อมูลสภาพอากาศโดยใช้ ESP8266 และ Openweather API: 5 ขั้นตอน
วีดีโอ: Nodemcu ​+ Openweathermap + LCD | ใช้ nodemcu รับค่าจาก Openweathermap มาแสดงผลด้วย LCD #shorts 2024, ธันวาคม
Anonim
(โครงการ IOT) รับข้อมูลสภาพอากาศโดยใช้ ESP8266 และ Openweather API
(โครงการ IOT) รับข้อมูลสภาพอากาศโดยใช้ ESP8266 และ Openweather API

ในคำแนะนำนี้ เราจะสร้างโครงการ IOT อย่างง่าย ซึ่งดึงข้อมูลสภาพอากาศของเมืองของเราจาก openweather.com/api และแสดงโดยใช้ซอฟต์แวร์การประมวลผล

เสบียง:

  1. Arduino
  2. ESP8266 หรือโมดูล esp อื่นๆ
  3. Arduino IDE
  4. ซอฟต์แวร์ประมวลผล
  5. เขียงหั่นขนม
  6. Jumperwires ชายกับชายและชายกับหญิง

ขั้นตอนที่ 1: รับคีย์ API และ URL จาก Openweather.org

รับคีย์ API และ URL จาก Openweather.org
รับคีย์ API และ URL จาก Openweather.org
รับคีย์ API และ URL จาก Openweather.org
รับคีย์ API และ URL จาก Openweather.org
รับคีย์ API และ URL จาก Openweather.org
รับคีย์ API และ URL จาก 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"; สตริง countryCode = "IN"; ข้อมูลสตริง[16]; // ตัวตั้งเวลาเริ่มต้นถูกตั้งค่าเป็น 10 วินาทีสำหรับวัตถุประสงค์ในการทดสอบ // สำหรับแอปพลิเคชันสุดท้าย ให้ตรวจสอบขีดจำกัดการเรียก API ต่อชั่วโมง/นาทีเพื่อหลีกเลี่ยงการถูกบล็อก/แบนที่ไม่ได้ลงชื่อ long lastTime = 0; // ตั้งเวลาเป็น 10 นาที (6000000) // ตัวจับเวลานานที่ไม่ได้ลงนาม = 6000000; // ตั้งค่าตัวจับเวลาเป็น 10 วินาที (10,000) ตัวจับเวลานานที่ไม่ได้ลงนาม Delay = 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("Timer set to 10 seconds (ตัวแปร timerDelay) จะใช้เวลา 10 วินาทีก่อนที่จะเผยแพร่การอ่านครั้งแรก"); } void loop () { // ส่งคำขอ HTTP GET ถ้า ((มิลลิวินาที () - เวลาสุดท้าย) > timerDelay) { // ตรวจสอบสถานะการเชื่อมต่อ WiFi ถ้า (WiFi.status ()== WL_CONNECTED) { String serverPath = "https://api.openweathermap.org/data/2.5/weather?q=" + เมือง + ", " + รหัสประเทศ + "&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 ("การแยกวิเคราะห์อินพุตล้มเหลว!"); กลับ; } // Serial.print ("วัตถุ JSON = "); // 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"]; กดยาว = myObject["main"]["pressure"]; int humid = myObject["main"]["humidity"]; int ลม = myObject["wind"]["speed"]; ประเทศสตริง = JSON.stringify(myObject["sys"]["country"]); สตริง city1 = JSON.stringify(myObject["name"]); สตริงสภาพอากาศ = JSON.stringify(myObject["weather"][0]["description"]); ไอคอนสตริง = JSON.stringify(myObject["weather"][0]["icon"]); data[0]= สตริง (ชั่วคราว); ข้อมูล[1]= "/"; data [2] = สตริง (pres); ข้อมูล[3]= "/"; data[4]= สตริง (ชื้น); ข้อมูล[5]= "/"; data[6]= สตริง (ลม); ข้อมูล[7]= "/"; ข้อมูล[8]= ประเทศ; ข้อมูล[9]= "/"; ข้อมูล[10]= city1; ข้อมูล[11]= "/"; ข้อมูล[12]= สภาพอากาศ; ข้อมูล[13]= "/"; ข้อมูล[14]= ไอคอน; ข้อมูล[15]= "\n"; สำหรับ (int i = 0; i0) { // Serial.print ("รหัสตอบกลับ HTTP:"); // Serial.println (httpResponseCode); เพย์โหลด = http.getString(); } อื่น ๆ { Serial.print ("รหัสข้อผิดพลาด: "); Serial.println (httpResponseCode); } // ทรัพยากรฟรี http.end(); ส่งคืนน้ำหนักบรรทุก; }

ขั้นตอนที่ 4: กำลังประมวลผลรหัส

รหัสประมวลผล
รหัสประมวลผล
รหัสประมวลผล
รหัสประมวลผล
รหัสประมวลผล
รหัสประมวลผล

ก่อนเรียกใช้รหัสนี้ให้ดาวน์โหลดภาพไอคอนที่กำหนดซึ่งจะใช้เพื่อแสดงสภาพอากาศ และเก็บรูปภาพและรหัสไว้ในโฟลเดอร์เดียวกัน

นำเข้าการประมวลผล.ซีเรียล.*;

อนุกรม myPort; รูปภาพ img; รูปภาพ img2; รูปภาพ img3; รูปภาพ img4; รูปภาพ img5; รูปภาพ img6; รูปภาพ img7; รูปภาพ img8; รูปภาพ img9; รูปภาพ img10; รูปภาพ img11; รูปภาพ img12; รูปภาพ img13; รูปภาพ img14; รูปภาพ img15; รูปภาพ img16; รูปภาพ img17; รูปภาพ img18; อุณหภูมิภายใน; พรีเซ็นเตอร์ int; ชื้น; ลมภายใน; เมืองสตริง = " "; ประเทศสตริง = " "; สตริงสภาพอากาศ =" "; ไอคอนสตริง = " "; การตั้งค่าเป็นโมฆะ () { ขนาด (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); ขนาดข้อความ(22); กรอก (54, 69, 79); text("อุณหภูมิ: ", 25, 100); ข้อความ (อุณหภูมิ +"°C", 200, 100); text("ความดัน:", 25, 150); ข้อความ(pres + " hpa", 200, 150); text("ความชื้น: ", 25, 200); ข้อความ(ชื้น+" %", 200, 200); text("ลม: ", 25, 250); ข้อความ(ลม+" m/s", 200, 250); text("ประเทศ/เมือง: ", 25, 300); ข้อความ(ประเทศ +"-"+ เมือง 200, 300); text("สภาพอากาศ: ", 25, 350); ข้อความ(สภาพอากาศ 200, 350); if(icon.contains("01d")){ ภาพ (img, 380, 15); } อื่น if(icon.contains("01n")){ image(img2, 380, 15); } อื่น if(icon.contains("02d")){ image(img3, 380, 15); } อื่น if(icon.contains("02n")){ image(img4, 380, 15); } อื่น ๆ if(icon.contains("03d")){ image(img5, 380, 15); } อื่น ๆ if(icon.contains("03n")){ image(img6, 380, 15); } อื่น ๆ if(icon.contains("04d")){ image(img7, 380, 15); } อื่น ๆ if(icon.contains("04n")){ image(img8, 380, 15); } อื่น ๆ if(icon.contains("09d")){ image(img9, 380, 15); } อื่น if(icon.contains("09n")){ image(img10, 380, 15); } อื่น ๆ if(icon.contains("10d")){ image(img11, 380, 15); } อื่น ๆ if(icon.contains("10n")){ image(img12, 380, 15); } อื่น ๆ if(icon.contains("11d")){ image(img13, 380, 15); } อื่น if(icon.contains("11n")){ image(img14, 380, 15); } อื่น ๆ if(icon == "13d"){ image(img15, 380, 15); } อื่น if(icon.contains("13n")){ image(img16, 380, 15); } อื่น ๆ if(icon.contains("50d")){ image(img17, 380, 15); } อื่น ๆ 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); รายการสตริง = แยก (ข้อมูล, '/'); ถ้า (items.length > 1) { temp = int(items[0]); pres = int(รายการ [1]); ชื้น = int(รายการ [2]); ลม = int(รายการ[3]); เมือง = รายการ[4].replace("\"", ""); ประเทศ = รายการ[5].replace("\"", ""); สภาพอากาศ = รายการ[6].replace("\"", ""); icon = items[7].replace("\"", ""); } } } }

แนะนำ: