Cuprins:
- Pasul 1: Obțineți cheia API și adresa URL de la Openweather.org
- Pasul 2: Diagrama conexiunii
- Pasul 3: Cod Arduino
- Pasul 4: Procesarea codului
Video: (Proiect IOT) Obțineți date despre vreme utilizând ESP8266 și Openweather API: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
În acest instructable vom construi un proiect IOT simplu în care să preluăm datele meteo din orașul nostru de pe openweather.com/api și să le afișăm folosind software-ul de procesare.
Provizii:
- Arduino
- ESP8266 sau orice alt modul esp
- IDE Arduino
- Software de procesare
- Pană de pâine
- Jumperwires de la bărbat la bărbat și de la bărbat la femeie
Pasul 1: Obțineți cheia API și adresa URL de la Openweather.org
- Creați un cont în https://openweathermap.org (Imaginea 1)
- După ce vă autentificați, accesați cheile API și veți obține cheia API așa cum se arată în imagine. (Imaginea 2)
- Copiați cheia API și salvați-o într-un fișier de notepad. (Imaginea 3)
- Accesați opțiunea API (Imaginea 4)
- Accesați opțiunea API doc așa cum se arată în imagine (Imaginea 5)
- Copiați adresa URL din și afișată și salvați-o într-un fișier de notepad (Imaginea 6)
Pasul 2: Diagrama conexiunii
Pasul 3: Cod Arduino
Înainte de a copia acest cod în Arduino, asigurați-vă că ați descărcat placa ESP8266 în arduino ide folosind Boards manager.
#include
#include #include #include const char * ssid = "SSID-ul tău"; const char * password = "parola dvs. SSID"; // numele dvs. de domeniu cu calea URL sau adresa IP cu calea String openWeatherMapApiKey = "Inserați cheia API aici"; // Înlocuiți cu codul de țară și orașul String city = "Mumbai"; String countryCode = "IN"; Date șir [16]; // TIMERUL DEFAULT ESTE SETAT LA 10 SECUNDE PENTRU TESTARE SCOPURI // Pentru o aplicație finală, verificați limitele de apel API pe oră / minut pentru a evita blocarea / interzicerea nesemnată lungă LastTime = 0; // Temporizator setat la 10 minute (600000) // timer lung nesemnat Întârziere = 600000; // Setați cronometrul la 10 secunde (10000) cronometru lung nesemnat Întârziere = 10000; String jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, parolă); //Serial.println("Conectarea "); while (WiFi.status ()! = WL_CONNECTED) {întârziere (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Conectat la rețeaua WiFi cu adresă IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Timer setat la 10 secunde (variabilă timerDelay), va dura 10 secunde înainte de publicarea primei lecturi."); } void loop () {// Trimiteți o cerere HTTP GET dacă ((millis () - lastTime)> timerDelay) {// Verificați starea conexiunii WiFi dacă (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) poate fi folosit pentru a obține tipul de var dacă (JSON.typeof (myObject) == "undefined") {//Serial.println("Intrarea la parare a eșuat! "); întoarcere; } // Serial.print ("obiect JSON ="); // Serial.println (myObject); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Presiune:"); // Serial.println (myObject ["main"] ["pressure"]); // Serial.print ("Umiditate:"); // Serial.println (myObject ["main"] ["umiditate"]); // Serial.print ("Viteza vântului"); // Serial.println (myObject ["vânt"] ["viteză"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["pressure"]; int umid = myObject ["main"] ["umiditate"]; int wind = myObject ["wind"] ["speed"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["nume"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); String icon = JSON.stringify (myObject ["weather"] [0] ["icon"]); date [0] = String (temp); date [1] = "/"; date [2] = String (pres); date [3] = "/"; date [4] = Șir (umed); date [5] = "/"; date [6] = String (vânt); date [7] = "/"; date [8] = țară; date [9] = "/"; date [10] = oraș1; date [11] = "/"; date [12] = vreme; date [13] = "/"; date [14] = pictogramă; date [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Cod de răspuns HTTP:"); // Serial.println (httpResponseCode); sarcină utilă = http.getString (); } else {Serial.print ("Cod de eroare:"); Serial.println (httpResponseCode); } // Resurse gratuite http.end (); returnează sarcina utilă; }
Pasul 4: Procesarea codului
Înainte de a rula acest cod, descărcați pictogramele date care vor fi folosite pentru a arăta vremea. Și păstrați imaginile și codul în același folder.
procesare import.serial. *;
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 umed; vânt int; String city = ""; String country = ""; String weather = ""; Pictogramă șir = ""; void setup () {dimensiune (500, 500); myPort = serial nou (acesta, "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 () {fundal (72, 209, 204); textSize (22); umplutură (54, 69, 79); text ("Temperatura:", 25, 100); text (temp + "° C", 200, 100); text ("Presiune:", 25, 150); text (pres + "hpa", 200, 150); text ("Umiditate:", 25, 200); text (umed + "%", 200, 200); text ("Vânt:", 25, 250); text (vânt + "m / s", 200, 250); text („Țară / Oraș:”, 25, 300); text (țară + "-" + oraș, 200, 300); text („Vremea:”, 25, 350); text (vreme, 200, 350); if (icon.contains ("01d")) {imagine (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 (pictograma == "13d") {imagine (img15, 380, 15); } else if (icon.contains ("13n")) {image (img16, 380, 15); } else if (icon.contains ("50d")) {imagine (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 (date! = nul) {data = trim (data); Elemente șir = împărțit (date, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (itemi [1]); umed = int (itemii [2]); wind = int (itemii [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}
Recomandat:
Senzor de vreme compact cu legătură de date GPRS (cartela SIM): 4 pași
Senzor de vreme compact cu legătură de date GPRS (cartela SIM): Rezumatul proiectului Acesta este un senzor de vreme alimentat de la baterie bazat pe un senzor de temperatură / presiune / umiditate BME280 și un MCU ATMega328P. Funcționează cu două baterii litiu tionil AA de 3,6 V. Are un consum de somn ultra-mic de 6 µA. Trimite date
ESP32 Xiaomi Hack - Obțineți date fără fir: 6 pași (cu imagini)
ESP32 Xiaomi Hack - Obțineți date fără fir: Dragi prieteni, bineveniți la un alt instructabil! Astăzi vom învăța cum să obținem datele pe care le transmite acest monitor Xiaomi de temperatură și umiditate utilizând funcționalitatea Bluetooth a plăcii ESP32. După cum puteți vedea, folosesc o placă ESP32
Date despre senzori de vibrații și temperatură fără fir către MySQL folosind Node-RED: 40 de pași
Date despre senzori de vibrație și temperatură fără fir către MySQL folosind Node-RED: Prezentarea senzorului de temperatură și vibrații wireless IoT Industrial Long Range IoT de la NCD, oferind până la o rază de 2 mile utilizarea unei structuri de rețea fără fir mesh. Incorporând un senzor de precizie de vibrație și temperatură pe 16 biți, acest dispozitiv
Noțiuni de bază despre IoT: conectarea IoT-ului dvs. la cloud utilizând sistemul de operare Mongoose: 5 pași
Noțiuni de bază despre IoT: conectarea IoT-ului dvs. la cloud folosind sistemul de operare Mongoose: dacă sunteți o persoană care se ocupă de bricolaj și electronică, cel mai adesea, veți întâlni termenul de Internet al obiectelor, de obicei abreviat ca IoT, și că se referă la un set de dispozitive care se pot conecta la internet! A fi o astfel de persoană
Convertiți (doar despre) orice fișier media în (doar despre) orice alt fișier media gratuit !: 4 pași
Convertiți (doar despre) orice fișier media în (doar despre) orice alt fișier media gratuit! este mai universal, ca.wmv sau.mov. Am căutat nenumărate forumuri și site-uri web și apoi am găsit un program numit