Daftar Isi:

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

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

Video: (Proyek 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
(Proyek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API
(Proyek IOT) Dapatkan Data Cuaca Menggunakan ESP8266 dan Openweather API

Dalam instruksi ini kita akan membangun proyek IOT sederhana yang mengambil data cuaca kota kita dari openweather.com/api dan menampilkannya menggunakan perangkat lunak Processing.

Perlengkapan:

  1. Arduino
  2. ESP8266 atau modul esp lainnya
  3. Arduino IDE
  4. Perangkat lunak pemrosesan
  5. Papan tempat memotong roti
  6. Jumperwires Pria ke Pria dan Pria ke Wanita

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 akun di https://openweathermap.org (Gambar 1)
  2. Setelah Anda masuk, buka kunci API dan Anda akan mendapatkan kunci API seperti yang ditunjukkan pada gambar. (Gambar 2)
  3. Salin kunci API dan simpan dalam file notepad. (Gambar 3)
  4. Buka opsi API (Gambar 4)
  5. Buka opsi dokumen API seperti yang ditunjukkan pada gambar (Gambar 5)
  6. Salin url dari dan ditampilkan dan simpan dalam file notepad (Gambar 6)

Langkah 2: Diagram Koneksi

Diagram Koneksi
Diagram Koneksi

Langkah 3: Kode Arduino

Sebelum menyalin kode ini ke Arduino pastikan Anda telah mengunduh board ESP8266 ke arduino ide menggunakan Boards manager.

#termasuk

#include #include #include const char* ssid = "SSID Anda"; const char* password = "PASSWORD SSID Anda";// Nama domain Anda dengan jalur URL atau alamat IP dengan jalur String openWeatherMapApiKey = "Tempelkan kunci API Anda di sini"; // Ganti dengan kode negara dan kota Anda String city = "Mumbai"; String kode negara = "IN"; String data[16]; // TIMER DEFAULT DISET KE 10 DETIK UNTUK TUJUAN PENGUJIAN // Untuk aplikasi akhir, periksa batas panggilan API per jam/menit untuk menghindari pemblokiran/banned unsigned long lastTime = 0; // Timer disetel ke 10 menit (60000) //waktu lama tidak ditandatanganiDelay = 600000; // Atur timer ke 10 detik (10000) unsigned long timerDelay = 10000; String jsonBuffer; void setup() { Serial.begin(115200); WiFi.begin(ssid, kata sandi); //Serial.println("Menghubungkan"); while(WiFi.status() != WL_CONNECTED) { delay(500); // Serial.print("."); } // Serial.println(""); // Serial.print("Terhubung ke jaringan WiFi dengan Alamat IP: "); // Serial.println(WiFi.localIP()); // // Serial.println("Timer disetel ke 10 detik (variabel timerDelay), ini akan memakan waktu 10 detik sebelum memublikasikan pembacaan pertama."); } void loop() { // Kirim permintaan GET HTTP if ((millis() - lastTime) > timerDelay) { // Periksa status koneksi WiFi if(WiFi.status()== WL_CONNECTED){ String serverPath = "https://api.openweathermap.org/data/2.5/weather?q=" + kota + ", " + kode negara + "&APPID=" + "d5b56fd07988143ae141503ed9d81742" + "&units=metric"; jsonBuffer = httpGETRequest(serverPath.c_str()); //Serial.println(jsonBuffer); JSONVar myObject = JSON.parse(jsonBuffer); // JSON.typeof(jsonVar) dapat digunakan untuk mendapatkan tipe var if (JSON.typeof(myObject) == "undefined") { //Serial.println("Input parsing gagal!"); kembali; } // Serial.print("Objek JSON = "); // Serial.println(objek saya); // Serial.print("Suhu: "); // Serial.println(objek saya["utama"]["temp"]); // Serial.print("Tekanan: "); // Serial.println(objek saya["utama"]["tekanan"]); // Serial.print("Kelembaban: "); // Serial.println(objek saya["utama"]["kelembaban"]); // Serial.print("Kecepatan Angin: "); // Serial.println(objek saya["angin"]["kecepatan"]); int suhu = myObject["utama"]["temp"]; lama pres = myObject["utama"]["tekanan"]; int lembab = myObject["utama"]["kelembaban"]; int angin = myObject["angin"]["kecepatan"]; String negara = JSON.stringify(myObject["sys"]["country"]); String city1 = JSON.stringify(myObject["nama"]); String cuaca = JSON.stringify(myObject["cuaca"][0]["deskripsi"]); Ikon string = JSON.stringify(myObject["cuaca"][0]["ikon"]); data[0]= String(temp); data[1]= "/"; data[2]= String(tekan); data[3]= "/"; data[4]= String(lembab); data[5]= "/"; data[6]= String(angin); data[7]= "/"; data[8]= negara; data[9]= "/"; data[10]= kota1; data[11]= "/"; data[12]= cuaca; data[13]= "/"; data[14]= ikon; data[15]= "\n"; for(int i=0;i0) { // Serial.print("Kode Respon HTTP: "); // Serial.println(httpResponseCode); muatan = http.getString(); } else { Serial.print("Kode kesalahan: "); Serial.println(httpResponseCode); } // Sumber daya gratis http.end(); mengembalikan muatan; }

Langkah 4: Memproses Kode

Kode Pemrosesan
Kode Pemrosesan
Kode Pemrosesan
Kode Pemrosesan
Kode Pemrosesan
Kode Pemrosesan

Sebelum menjalankan kode ini, unduh gambar ikon yang diberikan yang akan digunakan untuk menunjukkan cuaca. Dan simpan gambar dan kode di folder yang sama.

import processing.serial.*;

Port saya serial; img gambar; PGambar img2; PGambar img3; PGambar img4; PGambar img5; PGambar img6; PGambar img7; PGambar img8; PGambar img9; PGambar img10; PGambar img11; PGambar img12; PGambar img13; PGambar img14; PGambar img15; PGambar img16; PGambar img17; PGambar img18; int suhu; int pra; int lembab; int angin; String kota = " "; String negara = " "; String cuaca =" "; Ikon string = " "; batalkan pengaturan(){ ukuran(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"); } batal draw(){ latar belakang(72, 209, 204); ukuran teks(22); isi(54, 69, 79); teks("Suhu: ", 25, 100); teks(suhu +"°C", 200, 100); teks("Tekanan:", 25, 150); teks(tekan + " hpa", 200, 150); text("Kelembaban: ",25,200); teks(lembab+" %", 200, 200); text("Angin: ", 25, 250); teks(angin+" m/s", 200, 250); text("Negara/Kota: ", 25, 300); teks(negara +"-"+ kota, 200, 300); teks("Cuaca: ", 25, 350); teks (cuaca, 200, 350); if(icon.contains("01d")){ gambar(img, 380, 15); } else if(icon.contains("01n")){ gambar(img2, 380, 15); } else if(icon.contains("02d")){ gambar(img3, 380, 15); } else if(icon.contains("02n")){ gambar(img4, 380, 15); } else if(icon.contains("03d")){ gambar(img5, 380, 15); } else if(icon.contains("03n")){ gambar(img6, 380, 15); } else if(icon.contains("04d")){ gambar(img7, 380, 15); } else if(icon.contains("04n")){ gambar(img8, 380, 15); } else if(icon.contains("09d")){ gambar(img9, 380, 15); } else if(icon.contains("09n")){ gambar(img10, 380, 15); } else if(icon.contains("10d")){ gambar(img11, 380, 15); } else if(icon.contains("10n")){ gambar(img12, 380, 15); } else if(icon.contains("11d")){ gambar(img13, 380, 15); } else if(icon.contains("11n")){ gambar(img14, 380, 15); } else if(ikon == "13d"){ gambar(img15, 380, 15); } else if(icon.contains("13n")){ gambar(img16, 380, 15); } else if(icon.contains("50d")){ gambar(img17, 380, 15); } else if(icon.contains("50n")){ gambar(img18, 380, 15); } } void serialEvent(Serial myPort){ if (myPort.available() > 0){ String data = myPort.readStringUntil('\n'); if(data != null){ data = trim(data); String item = split(data, '/'); if (items.length > 1) { temp = int(items[0]); pres = int(item[1]); lembab = int(item[2]); angin = int(item[3]); kota = item[4].replace("\"", ""); negara = item[5].replace("\"", ""); cuaca = item[6].replace("\"", ""); icon = item[7].replace("\"", ""); } } } }

Direkomendasikan: