Мазмуну:

(IOT долбоору) ESP8266 жана Openweather API аркылуу аба ырайы маалыматын алыңыз: 5 кадам
(IOT долбоору) ESP8266 жана Openweather API аркылуу аба ырайы маалыматын алыңыз: 5 кадам

Video: (IOT долбоору) ESP8266 жана Openweather API аркылуу аба ырайы маалыматын алыңыз: 5 кадам

Video: (IOT долбоору) ESP8266 жана Openweather API аркылуу аба ырайы маалыматын алыңыз: 5 кадам
Video: Shelly 1 - WiFi-реле на базе ESP8266 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 -кадам: 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дон API ачкычын жана URLин алыңыз
  1. Https://openweathermap.org эсебин түзүңүз (Сүрөт 1)
  2. Сиз киргенден кийин API ачкычтарына өтүңүз жана сүрөттө көрсөтүлгөндөй API ачкычын аласыз. (Сүрөт 2)
  3. API ачкычын көчүрүп, блокнот файлына сактаңыз. (Сүрөт 3)
  4. API опциясына өтүңүз (Image 4)
  5. Сүрөттө көрсөтүлгөндөй API doc опциясына өтүңүз (5 -сүрөт)
  6. Url'ди көрсөтүлгөн жана көрсөтүлгөндөн көчүрүп, блокнот файлына сактаңыз (6 -сүрөт)

2 -кадам: Туташуу диаграммасы

Байланыш диаграммасы
Байланыш диаграммасы

3 -кадам: Arduino коду

Бул кодду Arduinoго көчүрүүдөн мурун, ESP8266 тактасын Boards менеджери аркылуу arduino ideге жүктөгөнүңүздү текшериңиз.

#кошуу

#include #include #include const char* ssid = "Сиздин SSID"; const char* password = "Сиздин SSID ПАРОЛУҢУЗ"; // URL жолу бар сиздин домен атыңыз же String openWeatherMapApiKey = "API ачкычыңызды бул жерге чаптаңыз"; // Өлкө кодуңуз менен алмаштырыңыз String city = "Мумбай"; String countryCode = "IN"; String маалыматтар [16]; // АРТЫК ТАЙМЕР 10 СЕКУНДГА МАКСАТТАРЫН ТЕКШЕРҮҮ ҮЧҮН КӨРСӨТҮЛДҮ // Акыркы колдонмо үчүн, API/чалуу чектөөлөрүн саатына/мүнөтүнө текшерип, бөгөттөлүп калбаш үчүн/тыюу салынбаган узакка созулган lastTime = 0; // Таймер 10 мүнөткө коюлган (600000) // unsigned long timerDelay = 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 ("IP дареги менен WiFi тармагына туташты:"); // 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 " +" & бирдиктер = метрикалык "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) var түрүн алуу үчүн колдонулушу мүмкүн, эгерде (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input fail! "); кайтуу; } // Serial.print ("JSON object ="); // Serial.println (myObject); // Serial.print ("Температура:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Басым:"); // Serial.println (myObject ["негизги"] ["басым"]); // Serial.print ("Нымдуулук:"); // Serial.println (myObject ["негизги"] ["нымдуулук"]); // Serial.print ("Шамалдын ылдамдыгы:"); // Serial.println (myObject ["wind"] ["speed"]); int temp = myObject ["main"] ["temp"]; узак pres = myObject ["негизги"] ["басым"]; int humid = myObject ["негизги"] ["нымдуулук"]; int wind = myObject ["wind"] ["speed"]; String өлкө = JSON.stringify (myObject ["sys"] ["өлкө"]); String city1 = JSON.stringify (myObject ["name"]); Стринг аба ырайы = JSON.stringify (myObject ["аба ырайы"] [0] ["сүрөттөмө"]); String icon = JSON.stringify (myObject ["аба ырайы"] [0] ["сөлөкөтү]); маалымат [0] = Сап (темп); маалыматтар [1] = "/"; маалыматтар [2] = Сап (прес); маалыматтар [3] = "/"; маалыматтар [4] = Стринг (нымдуу); маалыматтар [5] = "/"; маалымат [6] = Сап (шамал); маалыматтар [7] = "/"; маалыматтар [8] = өлкө; маалыматтар [9] = "/"; маалыматтар [10] = city1; маалыматтар [11] = "/"; маалыматтар [12] = аба ырайы; маалыматтар [13] = "/"; маалымат [14] = сөлөкөт; маалыматтар [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("HTTP жооп коду:"); // Serial.println (httpResponseCode); пайдалуу жүк = http.getString (); } else {Serial.print ("Error code:"); 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 humid; катуу шамал; String city = ""; String country = ""; Аба ырайы = ""; String icon = ""; void setup () {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"); } 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); текст (шамал+"м/с", 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); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); if (data! = null) {data = trim (data); Сап элементтери = бөлүнүү (маалыматтар, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (пункттар [1]); humid = int (пункттар [2]); шамал = int (пункттар [3]); шаар = пункттар [4].ренет ("\" "," "); өлкө = пункттар [5].ренеш (" / "", ""); аба ырайы = нерселер [6].ренет ("\" "," "); сөлөкөтү = пункттар [7].жайылтуу (" / "", ""); }}}}

Сунушталууда: