Spisu treści:

(Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i Openweather API: 5 kroków
(Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i Openweather API: 5 kroków

Wideo: (Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i Openweather API: 5 kroków

Wideo: (Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i Openweather API: 5 kroków
Wideo: Odczyt danych z ESP8266 za pomocą aplikacji Blynk 2024, Listopad
Anonim
(Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i API Openweather
(Projekt IOT) Uzyskaj dane pogodowe za pomocą ESP8266 i API Openweather

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:

  1. Arduino
  2. ESP8266 lub dowolny inny moduł esp
  3. IDE Arduino
  4. Oprogramowanie do przetwarzania
  5. Deska do krojenia chleba
  6. Mostki z męskiego na męskie i męskie na żeńskie

Krok 1: Uzyskaj klucz API i adres URL z Openweather.org

Uzyskaj klucz API i adres URL z Openweather.org
Uzyskaj klucz API i adres URL z Openweather.org
Uzyskaj klucz API i adres URL z Openweather.org
Uzyskaj klucz API i adres URL z Openweather.org
Uzyskaj klucz API i adres URL z Openweather.org
Uzyskaj klucz API i adres URL z Openweather.org
  1. Utwórz konto w https://openweathermap.org (zdjęcie 1)
  2. Po zalogowaniu przejdź do kluczy API, a otrzymasz klucz API, jak pokazano na obrazku. (Zdjęcie 2)
  3. Skopiuj klucz API i zapisz go w pliku notatnika. (Zdjęcie 3)
  4. Przejdź do opcji API (zdjęcie 4)
  5. Przejdź do opcji API doc, jak pokazano na obrazku (zdjęcie 5)
  6. Skopiuj adres URL z pokazanego i zapisz go w pliku notatnika (zdjęcie 6)

Krok 2: Schemat połączeń

Diagram połączeń
Diagram 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

Kod przetwarzania
Kod przetwarzania
Kod przetwarzania
Kod przetwarzania
Kod przetwarzania
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: