Isi kandungan:

(Projek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API: 5 Langkah
(Projek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API: 5 Langkah

Video: (Projek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API: 5 Langkah

Video: (Projek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API: 5 Langkah
Video: Monitor Cuaca di NodeMCU ESP8266 dengan JSON API | Tutorial Pemrograman Arduino dan IoT 2024, November
Anonim
(Projek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API
(Projek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API

Dalam instruksional ini, kami akan membina sebuah projek IOT sederhana di mana mengambil data cuaca bandar kami dari openweather.com/api dan memaparkannya menggunakan perisian Pemprosesan.

Bekalan:

  1. Arduino
  2. ESP8266 atau modul esp lain
  3. Arduino IDE
  4. Memproses perisian
  5. Papan roti
  6. Jumperwires Lelaki hingga Lelaki dan Lelaki hingga Perempuan

Langkah 1: Dapatkan Kunci API dan URL Dari Openweather.org

Dapatkan Kunci API dan URL Dari Openweather.org
Dapatkan Kunci API dan URL Dari Openweather.org
Dapatkan Kunci API dan URL Dari Openweather.org
Dapatkan Kunci API dan URL Dari Openweather.org
Dapatkan Kunci API dan URL Dari Openweather.org
Dapatkan Kunci API dan URL Dari Openweather.org
  1. Buat akaun di https://openweathermap.org (Gambar 1)
  2. Selepas anda masuk, pergi ke kunci API dan anda akan mendapat kunci API seperti yang ditunjukkan dalam gambar. (Gambar 2)
  3. Salin kunci API dan simpan dalam fail notepad. (Gambar 3)
  4. Pergi ke pilihan API (Gambar 4)
  5. Pergi ke pilihan dokumen API seperti yang ditunjukkan dalam gambar (Gambar 5)
  6. Salin url dari dan ditunjukkan dan simpan dalam fail notepad (Gambar 6)

Langkah 2: Diagram Sambungan

Rajah Sambungan
Rajah Sambungan

Langkah 3: Kod Arduino

Sebelum menyalin kod ini ke Arduino, pastikan anda telah memuat turun papan ESP8266 ke arduino ide menggunakan pengurus Papan.

#sertakan

#include #include #include const char * ssid = "SSID Anda"; const char * password = "KATA LALUAN SSID Anda"; // Nama Domain anda dengan laluan URL atau alamat IP dengan jalur String openWeatherMapApiKey = "Tampal kunci API anda di sini"; // Ganti dengan kod negara anda dan bandar String city = "Mumbai"; String countryCode = "IN"; Data rentetan [16]; // TIMER DEFAULT DITETAPKAN SEHINGGA 10 SECONDS UNTUK MENGUJI TUJUAN // Untuk aplikasi terakhir, periksa had panggilan API setiap jam / minit untuk mengelakkan dari disekat / dilarang lama terakhir yang tidak ditandatangani = 0; // Pemasa ditetapkan ke 10 minit (600000) // pemasa panjang yang tidak ditandatanganiDelay = 600000; // Tetapkan pemasa hingga 10 saat (10000) pemasa panjang yang tidak ditandatanganiDelay = 10000; Rentetan jsonBuffer; persediaan tidak sah () {Serial.begin (115200); WiFi.begin (ssid, kata laluan); //Serial.println("Connecting "); sementara (WiFi.status ()! = WL_CONNECTED) {kelewatan (500); // Serial.print ("."); } // Serial.println (""); // Serial.print ("Disambungkan ke rangkaian WiFi dengan Alamat IP:"); // Serial.println (WiFi.localIP ()); // // Serial.println ("Pemasa ditetapkan hingga 10 saat (pemboleh ubah timerDelay), ia akan mengambil masa 10 saat sebelum menerbitkan bacaan pertama."); } gelung void () {// Kirim permintaan HTTP GET jika ((milis () - lastTime)> timerDelay) {// Periksa status sambungan WiFi jika (WiFi.status () == WL_CONNECTED) {String serverPath = "https://api.openweathermap.org/data/2.5/weather?q= "+ city +", "+ countryCode +" & APPID = "+" d5b56fd07988143ae141503ed9d81742 "+" & unit = metrik "; jsonBuffer = httpGETRequest (serverPath.c_str ()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse (jsonBuffer); // JSON.typeof (jsonVar) boleh digunakan untuk mendapatkan jenis var jika (JSON.typeof (myObject) == "undefined") {//Serial.println("Parsing input gagal! "); kembali; } // Serial.print ("objek JSON ="); // Serial.println (myObject); // Serial.print ("Suhu:"); // Serial.println (myObject ["main"] ["temp"]); // Serial.print ("Tekanan:"); // Serial.println (myObject ["main"] ["tekanan"]); // Serial.print ("Kelembapan:"); // Serial.println (myObject ["main"] ["kelembapan"]); // Serial.print ("Kelajuan Angin:"); // Serial.println (myObject ["angin"] ["kelajuan"]); int temp = myObject ["main"] ["temp"]; long pres = myObject ["main"] ["tekanan"]; int humid = myObject ["main"] ["kelembapan"]; int wind = myObject ["angin"] ["kelajuan"]; String country = JSON.stringify (myObject ["sys"] ["negara"]); String city1 = JSON.stringify (myObject ["nama"]); Cuaca rentetan = JSON.stringify (myObject ["cuaca"] [0] ["keterangan"]); Ikon rentetan = JSON.stringify (myObject ["cuaca"] [0] ["ikon"]); data [0] = Rentetan (temp); data [1] = "/"; data [2] = Rentetan (pres); data [3] = "/"; data [4] = Rentetan (lembab); data [5] = "/"; data [6] = Rentetan (angin); data [7] = "/"; data [8] = negara; data [9] = "/"; data [10] = bandar1; data [11] = "/"; data [12] = cuaca; data [13] = "/"; data [14] = ikon; data [15] = "\ n"; untuk (int i = 0; i0) {// Serial.print ("Kod respons HTTP:"); // Serial.println (httpResponseCode); muatan = http.getString (); } lain {Serial.print ("Kod ralat:"); Serial.println (httpResponseCode); } // Sumber percuma http.end (); muatan pulangan; }

Langkah 4: Memproses Kod

Kod Pemprosesan
Kod Pemprosesan
Kod Pemprosesan
Kod Pemprosesan
Kod Pemprosesan
Kod Pemprosesan

Sebelum menjalankan kod ini, muat turun gambar ikon yang akan digunakan untuk menunjukkan cuaca. Dan simpan gambar dan kod dalam folder yang sama.

pemprosesan import.serial. *;

MyPort bersiri; Imej PImage; 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 suhu; int pres; int lembap; angin int; String city = ""; Negara tali = ""; Cuaca rentetan = ""; Ikon rentetan = ""; batal persediaan () {size (500, 500); myPort = Serial baru (ini, "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"); } undian tidak sah () {latar belakang (72, 209, 204); saiz teks (22); isi (54, 69, 79); teks ("Suhu:", 25, 100); teks (temp + "° C", 200, 100); teks ("Tekanan:", 25, 150); teks (pres + "hpa", 200, 150); teks ("Kelembapan:", 25, 200); teks (lembab + "%", 200, 200); teks ("Angin:", 25, 250); teks (angin + "m / s", 200, 250); teks ("Negara / Bandar:", 25, 300); teks (negara + "-" + bandar, 200, 300); teks ("Cuaca:", 25, 350); teks (cuaca, 200, 350); if (icon.contains ("01d")) {gambar (img, 380, 15); } lain jika (icon.contains ("01n")) {image (img2, 380, 15); } lain jika (icon.contains ("02d")) {image (img3, 380, 15); } lain jika (icon.contains ("02n")) {image (img4, 380, 15); } lain jika (icon.contains ("03d")) {image (img5, 380, 15); } lain jika (icon.contains ("03n")) {image (img6, 380, 15); } lain jika (icon.contains ("04d")) {gambar (img7, 380, 15); } lain jika (icon.contains ("04n")) {image (img8, 380, 15); } lain jika (icon.contains ("09d")) {image (img9, 380, 15); } lain jika (icon.contains ("09n")) {image (img10, 380, 15); } lain jika (icon.contains ("10d")) {image (img11, 380, 15); } lain jika (icon.contains ("10n")) {image (img12, 380, 15); } lain jika (icon.contains ("11d")) {image (img13, 380, 15); } lain jika (icon.contains ("11n")) {image (img14, 380, 15); } lain jika (ikon == "13d") {gambar (img15, 380, 15); } lain jika (icon.contains ("13n")) {image (img16, 380, 15); } lain jika (icon.contains ("50d")) {image (img17, 380, 15); } lain jika (icon.contains ("50n")) {image (img18, 380, 15); }} batal serialEvent (Serial myPort) {if (myPort.available ()> 0) {String data = myPort.readStringUntil ('\ n'); jika (data! = null) {data = trim (data); Item rentetan = split (data, '/'); jika (item.length> 1) {temp = int (item [0]); pres = int (item [1]); lembap = int (item [2]); angin = int (item [3]); city = item [4].replace ("\" "," "); country = item [5].replace (" / "", ""); cuaca = item [6].replace ("\" "," "); icon = item [7].replace (" / "", ""); }}}}

Disyorkan: