Kazalo:
- 1. korak: Pridobite ključ in URL API s spletnega mesta Openweather.org
- 2. korak: diagram povezave
- 3. korak: Arduino koda
- 4. korak: Obdelava kode
Video: (Projekt IOT) Pridobite vremenske podatke z uporabo ESP8266 in API -ja Openweather: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
V tem navodilu bomo zgradili preprost projekt IOT, v katerem bomo z openweather.com/api pridobili vremenske podatke našega mesta in jih prikazali s programsko opremo Processing.
Zaloge:
- Arduino
- ESP8266 ali kateri koli drug esp modul
- Arduino IDE
- Programska oprema za obdelavo
- Ogledna plošča
- Jumperwires moški na moški in moški na ženski
1. korak: Pridobite ključ in URL API s spletnega mesta Openweather.org
- Ustvarite račun na https://openweathermap.org (slika 1)
- Ko se prijavite, pojdite na ključe API in dobili boste ključ API, kot je prikazano na sliki. (Slika 2)
- Kopirajte ključ API in ga shranite v datoteko beležnice. (Slika 3)
- Pojdite na možnost API (slika 4)
- Pojdite na možnost doc API, kot je prikazano na sliki (slika 5)
- Kopirajte URL iz prikazanega in in ga shranite v datoteko beležnice (slika 6)
2. korak: diagram povezave
3. korak: Arduino koda
Pred kopiranjem te kode v Arduino se prepričajte, da ste z upraviteljem plošč prenesli ploščo ESP8266 v arduino ide.
#vključi
#include #include #include const char* ssid = "Vaš SSID"; const char* password = "Vaša geslo SSID"; // Ime vaše domene s potjo URL ali naslovom IP s potjo String openWeatherMapApiKey = "Tu prilepite ključ API"; // Zamenjajte s kodo države in mestom String city = "Mumbai"; Niz countryCode = "IN"; Podatki o nizih [16]; // ČASOVNIČNI TIMER JE NASTAVLJEN NA 10 SEKUND ZA TESTIRANJE NAMENOV // Za končno aplikacijo preverite omejitve klicev API -ja na uro/minuto, da se izognete blokiranju/prepovedi unsigned long lastTime = 0; // Časovnik nastavljen na 10 minut (600000) // dolg časovnik brez podpisaDelay = 600000; // Časovnik nastavite na 10 sekund (10000) brez podpisa dolgi timerDelay = 10000; Niz jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, geslo); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {zamuda (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Povezano z omrežjem WiFi z naslovom IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Časovnik nastavljen na 10 sekund (spremenljivka timerDelay), pred objavo prve obravnave bo trajalo 10 sekund."); } void loop () {// Pošlji zahtevo GET HTTP if ((millis () - lastTime)> timerDelay) {// Preveri stanje povezave WiFi, če (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) se lahko uporabi za pridobitev vrste var if (JSON.typeof (myObject) == "undefined") {//Serial.println(" Razčlenjevanje vnosa ni uspelo! "); vrnitev; } // Serial.print ("objekt JSON ="); // Serial.println (mojObjekt); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Tlak:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Vlažnost:"); // Serial.println (myObject ["main"] ["vlažnost"]); // Serial.print ("Hitrost vetra:"); // Serial.println (myObject ["veter"] ["hitrost"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["pressure"]; int humid = myObject ["glavni"] ["vlažnost"]; int wind = myObject ["veter"] ["hitrost"]; Niz država = JSON.stringify (myObject ["sys"] ["država"]); String city1 = JSON.stringify (myObject ["ime"]); Niz vreme = JSON.stringify (myObject ["vreme"] [0] ["opis"]); Ikona niza = JSON.stringify (myObject ["vreme"] [0] ["ikona"]); podatki [0] = niz (temp); podatki [1] = "/"; podatki [2] = niz (pres); podatki [3] = "/"; podatki [4] = niz (vlažno); podatki [5] = "/"; podatki [6] = niz (veter); podatki [7] = "/"; podatki [8] = država; podatki [9] = "/"; podatki [10] = mesto1; podatki [11] = "/"; podatki [12] = vreme; podatki [13] = "/"; podatki [14] = ikona; podatki [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Odzivna koda HTTP:"); // Serial.println (httpResponseCode); payload = http.getString (); } else {Serial.print ("Koda napake:"); Serial.println (httpResponseCode); } // Brezplačni viri http.end (); povratni tovor; }
4. korak: Obdelava kode
Preden zaženete to kodo, prenesite dane slike ikon, ki bodo uporabljene za prikaz vremena. Slike in kodo hranite v isti mapi.
uvozna obdelava.serial.*;
Serijski 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 vlažno; int veter; String city = ""; Država niza = ""; Niz vreme = ""; Ikona niza = ""; void setup () {velikost (500, 500); myPort = nov serijski (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 () {ozadje (72, 209, 204); textSize (22); napolni (54, 69, 79); besedilo ("Temperatura:", 25, 100); besedilo (temp +"° C", 200, 100); besedilo ("Tlak:", 25, 150); besedilo (pres + "hpa", 200, 150); besedilo ("Vlažnost:", 25, 200); besedilo (vlažno+" %", 200, 200); besedilo ("Veter:", 25, 250); besedilo (veter+"m/s", 200, 250); text ("Država/mesto:", 25, 300); besedilo (država + "-" + mesto, 200, 300); text ("Vreme:", 25, 350); besedilo (vreme, 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) {Podatkovni niz = myPort.readStringUntil ('\ n'); if (podatki! = ničelno) {podatki = trim (podatki); Elementi niza = deljeno (podatki, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (postavke [1]); vlažno = int (postavke [2]); veter = int (postavke [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}
Priporočena:
Pridobite HDMI izhod iz vašega Rock64 z uporabo Armbian: 15 korakov
Pridobite HDMI izhod iz svojega Rock64 z uporabo Armbian -a: Verjetno ste tu, potem ko Google išče "" Rock64 brez hdmi izhoda " ali pa se sprašujete, kako uporabiti zaslon velikosti 16 x 2, ki je bil priložen nakupu, za katerega se je zdelo, da je res: " Za 10 do 20 dolarjev, Sing
Kako zapisati podatke vremenske postaje - Liono Maker: 5 korakov
Kako zapisati podatke vremenske postaje | Liono Maker: Uvod: Pozdravljeni, to je #LionoMaker. To je moj odprtokodni in uradni YouTube kanal. Tukaj je povezava: Liono Maker / YOUTUBE CHANNELV tem projektu se bomo naučili, kako ustvariti " beleženje podatkov vremenskih postaj ". tole je zelo zanimivo
Ura vremenske napovedi z uporabo starega alarma in Arduina: 13 korakov (s slikami)
Ura vremenske napovedi z uporabo starega alarma in Arduina: Imel sem pokvarjeno budilko in prišel sem na idejo, da bi jo spremenil v uro in postajo za napovedovanje vremena. Za ta projekt boste potrebovali: stara krožna budilka Arduino Nano BME280 senzorski modul ( temperatura, vlaga, tlak) LCD zaslon
Pridobite zaslon za svoj Google Home z uporabo Raspberry Pi in Dialogflow (možnost Chromecast): 13 korakov
Pridobite zaslon za svoj Googlov dom z uporabo Raspberry Pi in Dialogflow (možnost Chromecast): Odkar sem kupil svoj Google dom, sem želel doma upravljati svoje naprave z glasovnimi ukazi. Deluje odlično v vseh pogledih, vendar mi je bilo slabo zaradi njegove video funkcije. Youtube in Netflix si lahko ogledamo le, če imamo napravo Chromecast ali T
Pridobite podatke iz mrtvega računalnika: 4 koraki
Pridobite podatke iz mrtvega računalnika: To vključuje odstranitev trdega diska iz mrtvega računalnika in prikaz zunanjega trdega diska v drugem računalniku. Potrebovali boste: Drugi računalnik Zunanji trdi disk Opomba: Zunanji trdi disk mora biti iste vrste kot ciljni trdi disk