Spisu treści:
- Krok 1: Uzyskaj klucz API i adres URL z Openweather.org
- Krok 2: Schemat połączeń
- Krok 3: Kod Arduino
- Krok 4: Kod przetwarzania
Wideo: (Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i Openweather API: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:26
W tej instrukcji zbudujemy prosty projekt IOT, w którym pobierzemy dane pogodowe naszego miasta z openweather.com/api i wyświetlimy je za pomocą oprogramowania przetwarzającego.
Kieszonkowe dzieci:
- Arduino
- ESP8266 lub dowolny inny moduł esp
- IDE Arduino
- Oprogramowanie do przetwarzania
- Deska do krojenia chleba
- Mostki z męskiego na męskie i męskie na żeńskie
Krok 1: Uzyskaj klucz API i adres URL z Openweather.org
- Utwórz konto w https://openweathermap.org (zdjęcie 1)
- Po zalogowaniu przejdź do kluczy API, a otrzymasz klucz API, jak pokazano na obrazku. (Zdjęcie 2)
- Skopiuj klucz API i zapisz go w pliku notatnika. (Zdjęcie 3)
- Przejdź do opcji API (zdjęcie 4)
- Przejdź do opcji API doc, jak pokazano na obrazku (zdjęcie 5)
- Skopiuj adres URL z pokazanego i zapisz go w pliku notatnika (zdjęcie 6)
Krok 2: Schemat połączeń
Krok 3: Kod Arduino
Przed skopiowaniem tego kodu do Arduino upewnij się, że pobrałeś płytkę ESP8266 do arduino ide za pomocą menedżera płytek.
#włączać
#include #include #include const char* ssid = "Twój identyfikator SSID"; const char* password = "Twoje SSID HASŁO";// Twoja nazwa domeny ze ścieżką URL lub adres IP ze ścieżką String openWeatherMapApiKey = "Wklej tutaj swój klucz API"; // Zastąp kodem kraju i miastem String city = "Mumbai"; Ciąg countryCode = "IN"; Dane ciągów[16]; // DOMYŚLNY TIMER USTAWIONY JEST NA 10 SEKUND W CELU TESTOWANIA // W przypadku ostatecznej aplikacji sprawdź limity wywołań interfejsu API na godzinę/minutę, aby uniknąć zablokowania/zbanowania unsigned long lastTime = 0; // Timer ustawiony na 10 minut (600000) //unsigned long timerDelay = 600000; // Ustaw timer na 10 sekund (10000) unsigned long timerDelay = 10000; Ciąg jsonBuffer; void setup() { Serial.begin(115200); WiFi.begin(SSid, hasło); //Serial.println("Łączenie"); while(WiFi.status() != WL_CONNECTED) { delay(500); // Serial.print("."); } // Serial.println(""); // Serial.print("Połączono z siecią Wi-Fi z adresem IP: "); // Serial.println(WiFi.localIP()); // // Serial.println("Zegar ustawiony na 10 sekund (zmienna timerDelay), opublikowanie pierwszego odczytu zajmie 10 sekund."); } void loop() { // Wyślij żądanie HTTP GET if ((millis() - lastTime) > timerDelay) { // Sprawdź stan połączenia WiFi if(WiFi.status()== WL_CONNECTED){ String serverPath = "https://api.openweathermap.org/data/2.5/weather?q=" + miasto + ", " + kod kraju + "&APPID=" + "d5b56fd07988143ae141503ed9d81742" + "&units=metric"; jsonBuffer = httpGETRequest(serverPath.c_str()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse(jsonBuffer); // JSON.typeof(jsonVar) można użyć do pobrania typu var if (JSON.typeof(myObject) == "undefined") { //Serial.println("Przetwarzanie danych wejściowych nie powiodło się!"); powrót; } // Serial.print("obiekt JSON = "); // Serial.println(myObject); // Serial.print("Temperatura: "); // Serial.println(myObject["main"]["temp"]); // Serial.print("Ciśnienie: "); // Serial.println(myObject["główny"]["ciśnienie"]); // Serial.print("Wilgotność: "); // Serial.println(myObject["główny"]["wilgotność"]); // Serial.print("Prędkość wiatru: "); // Serial.println(myObject["wiatr"]["prędkość"]); int temp = mójObiekt["główny"]["temp"]; długie naciśnięcie = mójObiekt["główny"]["nacisk"]; int wilgotność = mójObiekt["główny"]["wilgotność"]; int wiatr = mójObiekt["wiatr"]["prędkość"]; Ciąg kraj = JSON.stringify(myObject["sys"]["kraj"]); Ciąg miasto1 = JSON.stringify(myObject["nazwa"]); String weather = JSON.stringify(myObject["pogoda"][0]["opis"]); Ikona ciągu = JSON.stringify(myObject["pogoda"][0]["ikona"]); dane[0]= Ciąg(temp); dane[1]= "/"; dane[2]= Ciąg(pres); dane[3]= "/"; dane[4]= Ciąg(wilgotność); dane[5]= "/"; dane[6]= Ciąg(wiatr); dane[7]= "/"; dane[8]= kraj; dane[9]= "/"; dane[10]= miasto1; dane[11]= "/"; dane[12]= pogoda; dane[13]= "/"; dane[14]= ikona; dane[15]= "\n"; for(int i=0;i0) { // Serial.print("Kod odpowiedzi HTTP: "); // Serial.println(httpKodOdpowiedzi); ładunek = http.getString(); } else { Serial.print("Kod błędu: "); Serial.println(httpKodOdpowiedzi); } // Darmowe zasoby http.end(); ładunek zwrotny; }
Krok 4: Kod przetwarzania
Przed uruchomieniem tego kodu pobierz podane obrazy ikon, które będą używane do pokazywania pogody. I trzymaj obrazy i kod w tym samym folderze.
importowanie przetwarzania.serial.*;
port szeregowy myPort; Obraz Pobrazu; PObraz img2; PObraz img3; PObraz img4; PObraz img5; PObraz img6; PObraz img7; PObraz img8; PObraz img9; PObraz img10; PObraz img11; PObraz img12; PObraz img13; PObraz img14; PObraz img15; PObraz img16; PObraz img17; PObraz img18; temp. wewn; int pres; wew wilgotne; wiatr; Miasto napisów = " "; Ciąg kraj = " "; Ciąg znaków pogody =" "; Ikona ciągu = " "; void setup(){ size(500, 500); myPort = new Serial(to, "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); Rozmiar tekstu(22); wypełnienie (54, 69, 79); text("Temperatura: ", 25, 100); tekst(temp +"°C", 200, 100); text("Ciśnienie:", 25, 150); tekst(naciśnij + " hpa", 200, 150); text("Wilgotność: ", 25, 200); tekst(wilgotny+"%", 200, 200); text("Wiatr: ", 25, 250); tekst(wiatr+"m/s", 200, 250); text("Kraj/Miasto: ", 25, 300); tekst(kraj +"-"+ miasto, 200, 300); text("Pogoda: ", 25, 350); tekst(pogoda, 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(dane != null){ dane = przycinanie(dane); Elementy ciągu = split(dane, '/'); if (items.length > 1) { temp = int(items[0]); pres = int(elementy[1]); wilgotny = int(elementy[2]); wiatr = int(elementy[3]); miasto = przedmioty[4].replace("\"", ""); kraj = przedmioty[5].replace("\"", ""); pogoda = items[6].replace("\"", ""); icon = items[7].replace("\"", ""); } } } }
Zalecana:
Uzyskaj wyjście HDMI ze swojego Rock64 za pomocą Armbian: 15 kroków
Uzyskaj wyjście HDMI ze swojego Rock64 za pomocą Armbian: Prawdopodobnie jesteś tutaj po wyszukaniu w Google hasła „Rock64 bez wyjścia hdmi” skierował cię w tym kierunku.Możesz też zastanawiać się, jak korzystać z ekranu 16 x 2, który był dostarczany z zakupem, który wydawał się być prawdziwy: „Za 10-20 USD, Śpiewaj
ESP32 Xiaomi Hack - Uzyskaj dane bezprzewodowo: 6 kroków (ze zdjęciami)
ESP32 Xiaomi Hack - Uzyskaj dane bezprzewodowo: Drodzy przyjaciele, witamy w innym Instruktażowym! Dzisiaj dowiemy się, jak uzyskać dane przesyłane przez ten monitor temperatury i wilgotności Xiaomi za pomocą funkcji Bluetooth na płycie ESP32. Jak widać używam płytki ESP32
Dane pogodowe za pomocą Arkuszy Google i skryptu Google: 7 kroków
Dane pogodowe za pomocą Google Sheets i Google Script: W tym Blogtut będziemy wysyłać odczyty czujnika SHT25 do arkuszy Google za pomocą Adafruit huzzah ESP8266, który pomaga przesyłać dane do Internetu. Wysyłanie danych do komórki arkusza Google jest bardzo przydatne i podstawowy sposób, który zapisuje dane w
Visuino - Uzyskaj dokładny czas z internetowego serwera NIST za pomocą NodeMCU: 8 kroków
Visuino - Uzyskaj dokładny czas z internetowego serwera NIST przy użyciu NodeMCU: W tym samouczku użyjemy NodeMCU Mini, OLED Lcd i Visuino do wyświetlania czasu internetowego na żywo z serwera NIST na Lcd. Obejrzyj film demonstracyjny. To zasługa inspiracji użytkownika youtube "Ciprian Balalau"
Produkcja PCB DIY za pomocą drukarki UV (i uzyskaj pomoc od lokalnego centrum handlowego): 5 kroków
Produkcja PCB DIY za pomocą drukarki UV (i uzyskaj pomoc od lokalnego centrum handlowego): Chcesz zrobić PCB, ale nie chcesz czekać na to tygodniami z Chin. Zrób to sam wydaje się jedyną opcją, ale z doświadczenia wiesz, że większość opcji jest do bani. Transfer tonera nigdy nie wychodzi, prawda? Wykonywanie fotolitografii w domu jest tak skomplikowane… w