Съдържание:
- Стъпка 1: Получете API ключ и URL адрес от Openweather.org
- Стъпка 2: Схема на свързване
- Стъпка 3: Arduino код
- Стъпка 4: Обработка на код
Видео: (Проект IOT) Вземете метеорологични данни с помощта на ESP8266 и API на Openweather: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:49
В тази инструкция ще изградим прост IOT проект, в който да извлечем метеорологичните данни на нашия град от openweather.com/api и да ги покажем с помощта на софтуера за обработка.
Консумативи:
- Arduino
- ESP8266 или друг esp модул
- Arduino IDE
- Софтуер за обработка
- Платка
- Jumperwires мъжки към мъжки и мъжки към женски
Стъпка 1: Получете API ключ и URL адрес от Openweather.org
- Създайте акаунт в https://openweathermap.org (Изображение 1)
- След като влезете, отидете на API ключове и ще получите API ключа, както е показано на изображението. (Изображение 2)
- Копирайте API ключа и го запазете във файл с бележник. (Изображение 3)
- Отидете на опцията за API (Изображение 4)
- Отидете на опцията за doc API, както е показано на изображението (Изображение 5)
- Копирайте 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 (" / "", ""); }}}}
Препоръчано:
Вземете HDMI изход от вашия Rock64 с помощта на Armbian: 15 стъпки
Вземете HDMI изход от вашия Rock64 с помощта на Armbian: Вероятно сте тук, след като Google потърси " Rock64 без hdmi изход " или ви насочи в тази посока. Или може би се чудите как да използвате екрана с размери 16 x 2, който идва с покупка, която изглеждаше като добра истина: " За $ 10-$ 20, Sing
ESP8266 Nodemcu Мониторинг на температурата с помощта на DHT11 на локален уеб сървър - Вземете стайна температура и влажност на вашия браузър: 6 стъпки
ESP8266 Nodemcu Температурен мониторинг с помощта на DHT11 на локален уеб сървър | Вземете стайна температура и влажност на вашия браузър: Здравейте момчета, днес ще направим влажност & система за мониторинг на температурата, използваща ESP 8266 NODEMCU & DHT11 температурен сензор. Температурата и влажността ще бъдат получени от DHT11 Sensor & в браузър може да се види коя уеб страница ще се управлява
IoT стана лесно: Заснемане на отдалечени метеорологични данни: UV и въздушна температура и влажност: 7 стъпки
IoT стана лесно: Улавяне на отдалечени метеорологични данни: UV и въздушна температура и влажност: В този урок ще заснемем отдалечени данни като UV (ултравиолетова радиация), температура на въздуха и влажност. Тези данни ще бъдат много важни и ще бъдат използвани в бъдеща пълна метеорологична станция. Блоковата диаграма показва какво ще получим в края
Вземете висящ сензор за тегло от багажната везна за вашия проект Arduino: 4 стъпки
Вземете висящ сензор за тегло от багажната везна за вашия проект Arduino: В този урок ще ви покажа как да получите сензор за висящо тегло за проект Arduino от евтина, обикновена везна за багаж/риболов и често използвания HX711 ADC модул. Предистория: За проект имах нужда от сензор за измерване на определено тегло, което е
Метеорологична станция Acurite 5 в 1, използваща Raspberry Pi и Weewx (други метеорологични станции са съвместими): 5 стъпки (със снимки)
Метеорологична станция Acurite 5 в 1, използваща Raspberry Pi и Weewx (други метеорологични станции са съвместими): Когато си купих метеорологичната станция Acurite 5 в 1, исках да мога да проверя времето в дома си, докато бях отсъстващ. Когато се прибрах у дома и го настроих, разбрах, че или трябва да свържа дисплея към компютър, или да купя техния интелигентен хъб