Inhaltsverzeichnis:

(IOT-Projekt) Wetterdaten mit ESP8266 und Openweather API abrufen - Gunook
(IOT-Projekt) Wetterdaten mit ESP8266 und Openweather API abrufen - Gunook

Video: (IOT-Projekt) Wetterdaten mit ESP8266 und Openweather API abrufen - Gunook

Video: (IOT-Projekt) Wetterdaten mit ESP8266 und Openweather API abrufen - Gunook
Video: TUTORIAL: Shelly und Tasmota mit MQTT, Node-Red, InfluxDB ins Grafana Dashboard - Balkonkraftwerk 2024, November
Anonim
(IOT-Projekt) Wetterdaten mit ESP8266 und Openweather API abrufen
(IOT-Projekt) Wetterdaten mit ESP8266 und Openweather API abrufen

In diesem anweisbaren werden wir ein einfaches IOT-Projekt aufbauen, in dem die Wetterdaten unserer Stadt von openweather.com/api abgerufen und mit Verarbeitungssoftware angezeigt werden.

Lieferungen:

  1. Arduino
  2. ESP8266 oder ein anderes ESP-Modul
  3. Arduino-IDE
  4. Verarbeitungssoftware
  5. Steckbrett
  6. Überbrückungsdrähte männlich zu männlich und männlich zu weiblich

Schritt 1: API-Schlüssel und URL von Openweather.org beziehen

Erhalten Sie API-Schlüssel und URL von Openweather.org
Erhalten Sie API-Schlüssel und URL von Openweather.org
Erhalten Sie API-Schlüssel und URL von Openweather.org
Erhalten Sie API-Schlüssel und URL von Openweather.org
Erhalten Sie API-Schlüssel und URL von Openweather.org
Erhalten Sie API-Schlüssel und URL von Openweather.org
  1. Konto erstellen in https://openweathermap.org (Bild 1)
  2. Nachdem Sie sich angemeldet haben, gehen Sie zu API-Schlüsseln und Sie erhalten den API-Schlüssel wie im Bild gezeigt. (Bild 2)
  3. Kopieren Sie den API-Schlüssel und speichern Sie ihn in einer Notepad-Datei. (Bild 3)
  4. Gehen Sie zur API-Option (Bild 4)
  5. Gehen Sie zur API-Dokumentoption, wie in Bild gezeigt (Bild 5)
  6. Kopieren Sie die URL aus dem und angezeigten und speichern Sie sie in einer Notepad-Datei (Bild 6)

Schritt 2: Anschlussdiagramm

Schaltplan
Schaltplan

Schritt 3: Arduino-Code

Bevor Sie diesen Code in Arduino kopieren, stellen Sie sicher, dass Sie das ESP8266-Board mit dem Boards-Manager in Arduino ide heruntergeladen haben.

#enthalten

#include #include #include const char* ssid = "Ihre SSID"; const char* password = "Ihr SSID PASSWORD";// Ihr Domainname mit URL-Pfad oder IP-Adresse mit Pfad String openWeatherMapApiKey = "Fügen Sie Ihren API-Schlüssel hier ein"; // Ersetzen Sie durch Ihren Ländercode und Ihre Stadt String city = "Mumbai"; String countryCode = "IN"; Zeichenfolgendaten[16]; // DER STANDARDTIMER IST ZU TESTZWECKEN AUF 10 SEKUNDEN GESETZT // Überprüfen Sie für eine endgültige Anwendung die API-Aufruflimits pro Stunde/Minute, um zu vermeiden, dass Sie gesperrt/gesperrt werden unsigned long lastTime = 0; // Timer auf 10 Minuten eingestellt (600000) // unsigned long timerDelay = 600000; // Timer auf 10 Sekunden setzen (10000) unsigned long timerDelay = 10000; String jsonBuffer; Void setup () { Serial.begin (115200); WiFi.begin(ssid, Passwort); //Seriell.println("Verbinden"); Während (WiFi.status () != WL_CONNECTED) { Verzögerung (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Mit dem WiFi-Netzwerk mit IP-Adresse verbunden: "); // Serial.println (WiFi.localIP ()); // // Serial.println ("Timer auf 10 Sekunden eingestellt (timerDelay-Variable), es dauert 10 Sekunden, bis der erste Messwert veröffentlicht wird."); } void loop() { // Senden Sie eine HTTP GET-Anfrage if ((millis() - lastTime) > timerDelay) { // Überprüfen Sie den WLAN-Verbindungsstatus if(WiFi.status()== WL_CONNECTED){ String serverPath = "https://api.openweathermap.org/data/2.5/weather?q=" + Stadt + ", " + countryCode + "&APPID=" + "d5b56fd07988143ae141503ed9d81742" + "&units=metric"; jsonBuffer = httpGETRequest(serverPath.c_str()); //Seriell.println(jsonBuffer); JSONVar myObject = JSON.parse(jsonBuffer); // JSON.typeof(jsonVar) kann verwendet werden, um den Typ der Variablen zu ermitteln if (JSON.typeof(myObject) == "undefined") { //Serial.println("Parsing input failed!"); Rückkehr; } // Serial.print ("JSON-Objekt = "); // Serial.println (myObject); // Serial.print ("Temperatur: "); // Serial.println (myObject["main"]["temp"]); // Serial.print ("Druck: "); // Serial.println (myObject["main"]["pressure"]); // Serial.print ("Feuchtigkeit: "); // Serial.println (myObject["main"]["humidity"]); // Serial.print ("Windgeschwindigkeit: "); // Serial.println (myObject["wind"]["speed"]); int temp = myObject["main"]["temp"]; long pres = myObject["main"]["pressure"]; int feucht = myObject["main"]["humidity"]; int wind = myObject["wind"]["speed"]; String country = JSON.stringify(myObject["sys"]["country"]); String city1 = JSON.stringify(myObject["name"]); String Wetter = JSON.stringify(myObject["Wetter"][0]["Beschreibung"]); Zeichenfolgensymbol = JSON.stringify(myObject["Wetter"][0]["Symbol"]); data[0]= String(temp); Daten[1]= "/"; data[2]= String(pres); Daten[3]= "/"; data[4]= String(feucht); Daten[5]= "/"; Daten[6]= String(Wind); Daten[7]= "/"; Daten[8]= Land; Daten[9]= "/"; Daten[10]= Stadt1; Daten[11]= "/"; Daten[12]= Wetter; Daten[13]= "/"; Daten[14]= Symbol; Daten[15]= "\n"; for (int i = 0; i0) {// Serial.print ("HTTP-Antwortcode: "); // Serial.println (httpResponseCode); Nutzlast = http.getString(); } Else {Serial.print ("Fehlercode: "); Serial.println (httpResponseCode); } // Freie Ressourcen http.end(); Nutzlast zurückgeben; }

Schritt 4: Verarbeitungscode

Verarbeitungscode
Verarbeitungscode
Verarbeitungscode
Verarbeitungscode
Verarbeitungscode
Verarbeitungscode

Bevor Sie diesen Code ausführen, laden Sie die angegebenen Symbolbilder herunter, die verwendet werden, um das Wetter anzuzeigen. Und behalten Sie die Bilder und den Code im selben Ordner.

Importabwicklung.seriell.*;

Serieller 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 feucht; int Wind; Zeichenfolge Stadt = " "; String Land = " "; Zeichenfolge Wetter =" "; Zeichenfolgensymbol = " "; Void setup () { Größe (500, 500); myPort = new Serial (dies, "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"); aufrechtzuerhalten. Void Draw () { Hintergrund (72, 209, 204); Textgröße(22); füllen (54, 69, 79); text("Temperatur:", 25, 100); text(temp +"°C", 200, 100); text("Druck:", 25, 150); text(pres + "hpa", 200, 150); text("Luftfeuchtigkeit: ", 25, 200); text(feucht+" %", 200, 200); text("Wind:", 25, 250); Text(Wind+" m/s", 200, 250); text("Land/Stadt: ", 25, 300); Text(Land +"-"+ Stadt, 200, 300); text("Wetter: ", 25, 350); Text(Wetter, 200, 350); if(icon.contains("01d")){image(img, 380, 15); aufrechtzuerhalten. Sonst if (icon.contains ("01n")) { image (img2, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("02d")){image(img3, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("02n")){image(img4, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("03d")){image(img5, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("03n")){image(img6, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("04d")){image(img7, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("04n")){image(img8, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("09d")){image(img9, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("09n")){image(img10, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("10d")){image(img11, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("10n")){image(img12, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("11d")){image(img13, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("11n")){image(img14, 380, 15); aufrechtzuerhalten. Sonst if (icon == "13d") { image (img15, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("13n")){image(img16, 380, 15); aufrechtzuerhalten. Sonst if(icon.contains("50d")){image(img17, 380, 15); aufrechtzuerhalten. Sonst 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); String items = split(data, '/'); if (items.length > 1) {temp = int(items[0]); pres = int (Elemente[1]); feucht = int(items[2]); wind = int(items[3]); city = items[4].replace("\"", ""); country = items[5].replace("\"", ""); Wetter = items[6].replace("\"", ""); icon = items[7].replace("\"", ""); } } } }

Empfohlen: