Obsah:

(Projekt IOT) Získajte údaje o počasí pomocou ESP8266 a Openweather API: 5 krokov
(Projekt IOT) Získajte údaje o počasí pomocou ESP8266 a Openweather API: 5 krokov

Video: (Projekt IOT) Získajte údaje o počasí pomocou ESP8266 a Openweather API: 5 krokov

Video: (Projekt IOT) Získajte údaje o počasí pomocou ESP8266 a Openweather API: 5 krokov
Video: ESP32 Tutorial 6 - Using RGB LED Project 2.3 -SunFounder's ESP32 IoT Learnig kit 2024, November
Anonim
(Projekt IOT) Získajte údaje o počasí pomocou ESP8266 a Openweather API
(Projekt IOT) Získajte údaje o počasí pomocou ESP8266 a Openweather API

V tomto návode postavíme jednoduchý projekt IOT, v ktorom načítame údaje o počasí nášho mesta z openweather.com/api a zobrazíme ich pomocou softvéru na spracovanie.

Zásoby:

  1. Arduino
  2. ESP8266 alebo akýkoľvek iný modul esp
  3. Arduino IDE
  4. Softvér na spracovanie
  5. Breadboard
  6. Prepojovacie vodiče medzi mužmi a ženami a medzi mužmi a ženami

Krok 1: Získajte kľúč a adresu URL API z Openweather.org

Kľúč a adresu URL API získate z Openweather.org
Kľúč a adresu URL API získate z Openweather.org
Kľúč a adresu URL API získate z Openweather.org
Kľúč a adresu URL API získate z Openweather.org
Kľúč a adresu URL API získate z Openweather.org
Kľúč a adresu URL API získate z Openweather.org
  1. Vytvorte si účet na https://openweathermap.org (obrázok 1)
  2. Po prihlásení prejdite na kľúče API a získate kľúč API, ako je znázornené na obrázku. (Obrázok 2)
  3. Skopírujte kľúč API a uložte ho do súboru poznámkového bloku. (Obrázok 3)
  4. Prejdite na možnosť API (obrázok 4)
  5. Prejdite na možnosť Dokument doc API, ako je znázornené na obrázku (obrázok 5)
  6. Skopírujte adresu URL zo zobrazeného obrázku a uložte ju do súboru poznámkového bloku (Obrázok 6)

Krok 2: Schéma pripojenia

Schéma zapojenia
Schéma zapojenia

Krok 3: Arduino kód

Pred skopírovaním tohto kódu do Arduina sa uistite, že ste pomocou správcu dosiek stiahli dosku ESP8266 do arduino ide.

#zahrnúť

#include #include #include const char* ssid = "Vaše SSID"; const char* heslo = "Vaše SSID HESLO"; // Vaše doménové meno s URL adresou alebo IP adresou s cestou String openWeatherMapApiKey = "Sem prilepte svoj kľúč API"; // Nahraďte kódom krajiny a mestom String city = "Mumbai"; Reťazec countryCode = "IN"; Reťazcové údaje [16]; // VÝCHOZÍ ČASOVAČ JE NASTAVENÝ NA 10 SEKÚndD NA TESTOVACIE ÚČELY // Pri konečnej aplikácii skontrolujte limity hovorov API za hodinu/minútu, aby ste sa vyhli blokovaniu/blokovaniu bez znamienka long lastTime = 0; // Časovač nastavený na 10 minút (600000) // nepodpísaný dlhý časovačDelay = 600000; // Nastaviť časovač na 10 sekúnd (10 000) bez znamienka dlhý časovač Oneskorenie = 10 000; Reťazec jsonBuffer; void setup () {Serial.begin (115200); WiFi.begin (ssid, heslo); //Serial.println("Connecting "); while (WiFi.status ()! = WL_CONNECTED) {oneskorenie (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Pripojené k sieti WiFi s IP adresou:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Časovač nastavený na 10 sekúnd (premenná timerDelay), publikovanie prvého čítania bude trvať 10 sekúnd."); } void loop () {// Pošlite požiadavku HTTP GET, ak ((millis () - lastTime)> timerDelay) {// Skontrolujte stav pripojenia WiFi, ak (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) je možné použiť na získanie typu var if (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input failed! "); návrat; } // Serial.print ("objekt JSON ="); // Serial.println (myObject); // Serial.print ("Teplota:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Tlak:"); // Serial.println (myObject ["main"] ["tlak"]); // Serial.print ("Vlhkosť:"); // Serial.println (myObject ["main"] ["vlhkosť"]); // Serial.print ("Rýchlosť vetra:"); // Serial.println (myObject ["vietor"] ["rýchlosť"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["tlak"]; int humid = myObject ["main"] ["vlhkosť"]; int wind = myObject ["vietor"] ["rýchlosť"]; Krajina reťazca = JSON.stringify (myObject ["sys"] ["krajina"]); Reťazec city1 = JSON.stringify (myObject ["name"]); Reťazcové počasie = JSON.stringify (myObject ["počasie"] [0] ["popis"]); Ikona reťazca = JSON.stringify (myObject ["počasie"] [0] ["ikona"]); údaje [0] = Reťazec (teplota); údaje [1] = "/"; data [2] = String (pres); údaje [3] = "/"; údaje [4] = Reťazec (vlhký); údaje [5] = "/"; údaje [6] = Reťazec (vietor); údaje [7] = "/"; údaje [8] = krajina; údaje [9] = "/"; údaje [10] = mesto1; údaje [11] = "/"; údaje [12] = počasie; údaje [13] = "/"; dáta [14] = ikona; údaje [15] = "\ n"; for (int i = 0; i0) {// Serial.print ("Kód odpovede HTTP:"); // Serial.println (httpResponseCode); užitočné zaťaženie = http.getString (); } else {Serial.print ("Kód chyby:"); Serial.println (httpResponseCode); } // Voľné zdroje http.end (); vrátiť užitočné zaťaženie; }

Krok 4: Spracovanie kódu

Spracovateľský kód
Spracovateľský kód
Spracovateľský kód
Spracovateľský kód
Spracovateľský kód
Spracovateľský kód

Pred spustením tohto kódu si stiahnite dané obrázky ikon, ktoré budú použité na zobrazenie počasia. Obrázky a kód uložte do rovnakého priečinka.

spracovanie importu.sériové.*;

Sériový myPort; PImage obr. 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; veľmi vlhký; vnútorný vietor; Reťazcové mesto = ""; Reťazcová krajina = ""; Reťazcové počasie = ""; Ikona reťazca = ""; void setup () {veľkosť (500, 500); myPort = nový sériový port (tento, „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 () {pozadie (72, 209, 204); veľkosť textu (22); výplň (54, 69, 79); text ("Teplota:", 25, 100); text (teplota +"° C", 200, 100); text („Tlak:“, 25, 150); text (pres + "hpa", 200, 150); text ("Vlhkosť:", 25, 200); text (vlhký+" %", 200, 200); text ("Vietor:", 25, 250); text (vietor+"m/s", 200, 250); text („Krajina/mesto:“, 25, 300); text (krajina + "-" + mesto, 200, 300); text („Počasie:“, 25, 350); text (počasie, 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 (ikona == "13d") {obrázok (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) {String data = myPort.readStringUntil ('\ n'); if (data! = null) {data = trim (data); Reťazcové položky = rozdelenie (údaje, '/'); if (items.length> 1) {temp = int (items [0]); pres = int (položky [1]); humid = int (položky [2]); vietor = int (položky [3]); city = items [4].replace ("\" "," "); country = items [5].replace (" / "", ""); Počasie = položky [6].replace ("\" "," "); ikona = položky [7].replace (" / "", ""); }}}}

Odporúča: