Съдържание:

(Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather: 5 стъпки
(Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather: 5 стъпки

Видео: (Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather: 5 стъпки

Видео: (Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather: 5 стъпки
Видео: Как работает Spring Boot и что такое auto-configuration. Магия? 2024, Юли
Anonim
(Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather
(Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather

В тази инструкция ще изградим прост 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. Отидете на опцията за doc API, както е показано на изображението (Изображение 5)
  6. Копирайте URL адреса от и показания и го запазете във файл с бележник (Изображение 6)

Стъпка 2: Схема на свързване

Схема на свързване
Схема на свързване

Стъпка 3: Arduino код

Преди да копирате този код в Arduino, уверете се, че сте изтеглили платката ESP8266 в arduino ide с помощта на Boards manager.

#включва

#include #include #include const char* ssid = "Вашият SSID"; const char* password = "Your SSID PASSWORD"; // Името на вашия домейн с URL пътека или IP адрес с път String openWeatherMapApiKey = "Поставете своя API ключ тук"; // Заменете с кода на вашата държава и града String city = "Мумбай"; Низ countryCode = "IN"; Низови данни [16]; // ТАЙМЕРЪТ ПО УМОЛЧАНЕ Е НАСТРОЕН НА 10 СЕКУНДИ ЗА ТЕСТИРАНЕ НА ЦЕЛИТЕ // За окончателно приложение проверете ограниченията за извикване на API за час/минута, за да избегнете блокиране/забрана без подпис long lastTime = 0; // Таймер, зададен на 10 минути (600000) // без подпис дълъг таймерDelay = 600000; // Задайте таймера на 10 секунди (10000) без подпис дълъг таймерDelay = 10000; Низ jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, парола); //Serial.println("Свързване "); while (WiFi.status ()! = WL_CONNECTED) {забавяне (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Свързан към WiFi мрежа с IP адрес:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Таймерът е зададен на 10 секунди (променлива timerDelay), ще отнеме 10 секунди преди публикуването на първото четене."); } void loop () {// Изпратете HTTP GET заявка if ((millis () - lastTime)> timerDelay) {// Проверете състоянието на WiFi връзката if (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(" Разбирането на вход не е успешно! "); връщане; } // Serial.print ("JSON обект ="); // 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 ["wind"] ["speed"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["pressure"]; int humid = myObject ["main"] ["влажност"]; int wind = myObject ["wind"] ["speed"]; Низово държава = JSON.stringify (myObject ["sys"] ["държава"]); String city1 = JSON.stringify (myObject ["име"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); Икона на низ = JSON.stringify (myObject ["weather"] [0] ["icon"]); данни [0] = Низ (temp); данни [1] = "/"; данни [2] = Низ (прес); данни [3] = "/"; данни [4] = Низ (влажен); данни [5] = "/"; данни [6] = низ (вятър); данни [7] = "/"; данни [8] = държава; данни [9] = "/"; данни [10] = град1; данни [11] = "/"; данни [12] = времето; данни [13] = "/"; данни [14] = икона; данни [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Код на HTTP отговор:"); // Serial.println (httpResponseCode); полезен товар = http.getString (); } else {Serial.print ("Код на грешка:"); Serial.println (httpResponseCode); } // Безплатни ресурси http.end (); връщане на полезен товар; }

Стъпка 4: Обработка на код

Код за обработка
Код за обработка
Код за обработка
Код за обработка
Код за обработка
Код за обработка

Преди да стартирате този код, изтеглете дадените изображения на икони, които ще бъдат използвани за показване на времето. И дръжте изображенията и кода в същата папка.

обработка на внос.serial.*;

Сериен 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 влажен; вътрешен вятър; Низови град = ""; Страна на низ = ""; Низово време = ""; Икона на низ = ""; void setup () {размер (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); текст ("Вятър:", 25, 250); текст (вятър+"m/s", 200, 250); текст ("Държава/Град:", 25, 300); текст (държава + "-" + град, 200, 300); text ("Време:", 25, 350); текст (времето, 200, 350); if (icon.contains ("01d")) {изображение (img, 380, 15); } иначе ако (icon.contains ("01n")) {изображение (img2, 380, 15); } иначе ако (icon.contains ("02d")) {изображение (img3, 380, 15); } else if (icon.contains ("02n")) {image (img4, 380, 15); } иначе ако (icon.contains ("03d")) {изображение (img5, 380, 15); } иначе ако (icon.contains ("03n")) {изображение (img6, 380, 15); } иначе ако (icon.contains ("04d")) {изображение (img7, 380, 15); } else if (icon.contains ("04n")) {image (img8, 380, 15); } иначе ако (icon.contains ("09d")) {изображение (img9, 380, 15); } else if (icon.contains ("09n")) {изображение (img10, 380, 15); } иначе ако (icon.contains ("10d")) {изображение (img11, 380, 15); } иначе ако (icon.contains ("10n")) {изображение (img12, 380, 15); } иначе ако (icon.contains ("11d")) {изображение (img13, 380, 15); } иначе ако (icon.contains ("11n")) {изображение (img14, 380, 15); } else if (icon == "13d") {image (img15, 380, 15); } иначе ако (icon.contains ("13n")) {изображение (img16, 380, 15); } иначе ако (icon.contains ("50d")) {изображение (img17, 380, 15); } иначе ако (icon.contains ("50n")) {изображение (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); if (данни! = нула) {данни = подрязване (данни); Низови елементи = разделяне (данни, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (позиции [1]); влажен = int (елементи [2]); wind = int (позиции [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}

Препоръчано: