Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
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:
- Arduino
- ESP8266 atau modul esp lainnya
- Arduino IDE
- Perangkat lunak pemrosesan
- Papan tempat memotong roti
- Jumperwires Pria ke Pria dan Pria ke Wanita
Langkah 1: Dapatkan Kunci API dan URL Dari Openweather.org
- Buat akun di https://openweathermap.org (Gambar 1)
- Setelah Anda masuk, buka kunci API dan Anda akan mendapatkan kunci API seperti yang ditunjukkan pada gambar. (Gambar 2)
- Salin kunci API dan simpan dalam file notepad. (Gambar 3)
- Buka opsi API (Gambar 4)
- Buka opsi dokumen API seperti yang ditunjukkan pada gambar (Gambar 5)
- Salin url dari dan ditampilkan dan simpan dalam file notepad (Gambar 6)
Langkah 2: 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
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("\"", ""); } } } }