Taula de continguts:
2025 Autora: John Day | [email protected]. Última modificació: 2025-01-13 06:57
En aquest instructiu, anem a construir un projecte IOT senzill en el qual obtenir les dades meteorològiques de la nostra ciutat des de openweather.com/api i mostrar-les mitjançant el programari de processament.
Subministraments:
- Arduino
- ESP8266 o qualsevol altre mòdul esp
- IDE Arduino
- Programari de processament
- Taula de pa
- Jumperwires masculí a masculí i masculí a femení
Pas 1: obteniu la clau de l'API i l'URL d'Openweather.org
- Crea un compte a https://openweathermap.org (imatge 1)
- Després d'iniciar la sessió, aneu a les claus de l'API i obtindreu la clau de l'API tal com es mostra a la imatge. (Imatge 2)
- Copieu la clau API i deseu-la en un fitxer de bloc de notes. (Imatge 3)
- Aneu a l'opció API (imatge 4)
- Aneu a l'opció de document API tal com es mostra a la imatge (imatge 5)
- Copieu l'URL des de i mostrat i deseu-lo en un fitxer de bloc de notes (imatge 6)
Pas 2: diagrama de connexió
Pas 3: Codi Arduino
Abans de copiar aquest codi a Arduino, assegureu-vos que heu descarregat la placa ESP8266 a arduino ide mitjançant el gestor de plaques.
#incloure
#include #include #include const char * ssid = "El vostre SSID"; const char * password = "Contrasenya SSID"; // El vostre nom de domini amb ruta URL o adreça IP amb ruta String openWeatherMapApiKey = "Enganxeu aquí la vostra clau API"; // Substitueix pel codi de país i la ciutat String city = "Mumbai"; Cadena countryCode = "IN"; Dades de cadenes [16]; // EL TEMPORITZADOR DEFAULT ESTÀ FIXAT A 10 SEGONS PER PROBAR ELS PROPESSITS // Per a una aplicació final, comproveu els límits de trucades de l'API per hora / minut per evitar el bloqueig / prohibició sense signar long last Time = 0; // Temporitzador definit a 10 minuts (600000) // Temporitzador llarg sense signar Retard = 600000; // Estableix el temporitzador a 10 segons (10000) temporitzador llarg sense signar Retard = 10000; String jsonBuffer; configuració nul·la () {Serial.begin (115200); WiFi.begin (ssid, contrasenya); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {demora (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Connectat a una xarxa WiFi amb adreça IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("El temporitzador s'ha definit a 10 segons (variable timerDelay), trigarà 10 segons a publicar la primera lectura."); } void loop () {// Envieu una sol·licitud GET HTTP si ((millis () - lastTime)> timerDelay) {// Comproveu l'estat de la connexió WiFi si (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) es pot utilitzar per obtenir el tipus de var si (JSON.typeof (myObject) == "undefined") {//Serial.println("Entrada paral·lela fallida! "); tornar; } // Serial.print ("objecte JSON ="); // Serial.println (myObject); // Serial.print ("Temperatura:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Pressió:"); // Serial.println (myObject ["principal"] ["pressió"]); // Serial.print ("Humitat:"); // Serial.println (myObject ["principal"] ["humitat"]); // Serial.print ("Velocitat del vent:"); // Serial.println (myObject ["vent"] ["velocitat"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["pressure"]; int humid = myObject ["main"] ["humity"]; int wind = myObject ["vent"] ["velocitat"]; String country = JSON.stringify (myObject ["sys"] ["country"]); String city1 = JSON.stringify (myObject ["name"]); String weather = JSON.stringify (myObject ["weather"] [0] ["description"]); Icona de cadena = JSON.stringify (myObject ["weather"] [0] ["icon"]); dades [0] = Cadena (temp); dades [1] = "/"; dades [2] = Cadena (pres); dades [3] = "/"; dades [4] = Cadena (humida); dades [5] = "/"; dades [6] = Corda (vent); dades [7] = "/"; dades [8] = país; dades [9] = "/"; dades [10] = ciutat1; dades [11] = "/"; dades [12] = temps; dades [13] = "/"; dades [14] = icona; dades [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Codi de resposta HTTP:"); // Serial.println (httpResponseCode); càrrega útil = http.getString (); } else {Serial.print ("Codi d'error:"); Serial.println (httpResponseCode); } // Recursos gratuïts http.end (); retorn de la càrrega útil; }
Pas 4: processament del codi
Abans d'executar aquest codi, descarregueu les imatges de la icona que s'utilitzaran per mostrar el temps. I guardeu les imatges i el codi a la mateixa carpeta.
processament de la importació. sèrie. *;
MyPort en sèrie; PImage img; PImatge img2; PImatge img3; PImatge img4; PImatge img5; PImatge img6; PImatge img7; PImatge img8; PImatge img9; PImatge img10; PImatge img11; PImatge img12; PImatge img13; PImatge img14; PImatge img15; PImatge img16; PImatge img17; PImatge img18; int temp; int pres; int humit; vent int; String city = ""; String country = ""; String weather = ""; Icona de cadena = ""; void setup () {mida (500, 500); myPort = new Serial (this, "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 () {fons (72, 209, 204); textSize (22); farcit (54, 69, 79); text ("Temperatura:", 25, 100); text (temperatura + "° C", 200, 100); text ("Pressió", 25, 150); text (pres + "hpa", 200, 150); text ("Humitat:", 25, 200); text (humit + "%", 200, 200); text ("Vent:", 25, 250); text (vent + "m / s", 200, 250); text ("País / Ciutat:", 25, 300); text (país + "-" + ciutat, 200, 300); text ("Temps:", 25, 350); text (temps, 200, 350); if (icon.contains ("01d")) {imatge (img, 380, 15); } else if (icon.contains ("01n")) {imatge (img2, 380, 15); } else if (icon.contains ("02d")) {imatge (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")) {imatge (img9, 380, 15); } else if (icon.contains ("09n")) {imatge (img10, 380, 15); } else if (icon.contains ("10d")) {imatge (img11, 380, 15); } else if (icon.contains ("10n")) {imatge (img12, 380, 15); } else if (icon.contains ("11d")) {imatge (img13, 380, 15); } else if (icon.contains ("11n")) {imatge (img14, 380, 15); } else if (icona == "13d") {imatge (img15, 380, 15); } else if (icon.contains ("13n")) {imatge (img16, 380, 15); } else if (icon.contains ("50d")) {imatge (img17, 380, 15); } else if (icon.contains ("50n")) {imatge (img18, 380, 15); }} void serialEvent (Serial myPort) {if (myPort.available ()> 0) {Cadena de dades = myPort.readStringUntil ('\ n'); if (dades! = nul) {dades = retallar (dades); Elements de cadena = divisió (dades, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (elements [1]); humid = int (ítems [2]); wind = int (ítems [3]); ciutat = elements [4].replace ("\" "," "); país = elements [5].replace (" / "", ""); weather = items [6].replace ("\" "," "); icon = items [7].replace (" / "", ""); }}}}