Taula de continguts:

(Projecte IOT) Obteniu dades meteorològiques mitjançant ESP8266 i Openweather API: 5 passos
(Projecte IOT) Obteniu dades meteorològiques mitjançant ESP8266 i Openweather API: 5 passos

Vídeo: (Projecte IOT) Obteniu dades meteorològiques mitjançant ESP8266 i Openweather API: 5 passos

Vídeo: (Projecte IOT) Obteniu dades meteorològiques mitjançant ESP8266 i Openweather API: 5 passos
Vídeo: learn c# - Insert, Update, Delete and search(CRUD) in SQL Server Database & Print with code 2024, Desembre
Anonim
(Projecte IOT) Obteniu dades meteorològiques mitjançant ESP8266 i Openweather API
(Projecte IOT) Obteniu dades meteorològiques mitjançant ESP8266 i Openweather API

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:

  1. Arduino
  2. ESP8266 o qualsevol altre mòdul esp
  3. IDE Arduino
  4. Programari de processament
  5. Taula de pa
  6. Jumperwires masculí a masculí i masculí a femení

Pas 1: obteniu la clau de l'API i l'URL d'Openweather.org

Obteniu la clau de l'API i l'URL d'Openweather.org
Obteniu la clau de l'API i l'URL d'Openweather.org
Obteniu la clau de l'API i l'URL d'Openweather.org
Obteniu la clau de l'API i l'URL d'Openweather.org
Obteniu la clau de l'API i l'URL d'Openweather.org
Obteniu la clau de l'API i l'URL d'Openweather.org
  1. Crea un compte a https://openweathermap.org (imatge 1)
  2. 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)
  3. Copieu la clau API i deseu-la en un fitxer de bloc de notes. (Imatge 3)
  4. Aneu a l'opció API (imatge 4)
  5. Aneu a l'opció de document API tal com es mostra a la imatge (imatge 5)
  6. Copieu l'URL des de i mostrat i deseu-lo en un fitxer de bloc de notes (imatge 6)

Pas 2: diagrama de connexió

Diagrama de connexió
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

Codi de processament
Codi de processament
Codi de processament
Codi de processament
Codi de processament
Codi de processament

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 (" / "", ""); }}}}

Recomanat: