Tutorial ini menjelaskan bagaimana cara monitoring Weather Station wilayah Jakarta Online menggunakan modul wifi Wemos D1 mini ESP8266.
Sumber data yang diambil untuk pembaruan data cuaca berasal dari web openweathermap.org
Website tersebut yang merupakan stasiun cuaca yang independent dan informasi data, yang dimana dapat diakses menggunakan ESP8266 yang ditampilkan menggunakan display LCD 16×2.
Berikut langkah – langkah untuk tutorial Weather Station menggunakan Wemos D1 mini
1. Cara mendapatkan API Key
- Buka web http://openweathermap.org/ dan buatlah akun disana jika belum memiliki
- Setelah itu buka gmail untuk verifikasi dan akun siap digunakan
- Login akun yang telah dibuat tersebut dan cari API Key di menu Home > Setup tab
- Copy paste-kan API Key tersebut ke notepad untuk sementara waktu, dan save dengan nama bebas
2. Cara mendapatkan kode City ID dari OpenWeather
-
- Cari kota yang akan diimonitoring di search box openweather.org
- Klik pada kota hasil pencarian dan copy paste pada
- Cari kota yang akan diimonitoring di search box openweather.org
Kode yang didapat untuk area atau wilayah jakarta city ID-nya yaitu 1642911, sedangkan untuk kota lain dapat dilihat pada tabel dibawah ini
City ID | Kode Weather Station |
Jakarta | 1642911 |
Bekasi | 1649378 |
Depok | 1648473 |
Tanggerang | 1625084 |
Karawang | 1629710 |
Bandung | 1650357 |
Malang | 1636722 |
Surabaya | 1625822 |
Yogyakarta | 1621177 |
Semarang | 1627896 |
Klaten | 1639900 |
3. Skema Rangkaian sederhana
Bahan yang diperlukan :
- Wemos D1 mini
- LCD 16×2 dan PCF8574
- Kabel Jumper
- Regulator LM2596
- Catudaya 12 / 5 Vdc minimal 2A
- Koneksi Internet
Alasan menggunakan regulator LM2596 untuk mendapatkan tingkat kestabilan tegangan dan arus untuk catudaya rangkaian.
4. Instalasi libraries Arduino IDE
Hal pertama yang harus dilakukan yaitu instalasi libraries ArduinoJson.h pada Arduino IDE, dikarenakan sebagai include header pengakasesannya.
Berikut langkah – langkah instalasinya :
- Buka software Arduino IDE
- Pastikan komputer atau laptop terhubung dengan internet
- Ketikan “ArduinoJson by Benoit Blachon” pada Manage Libraries dan klik installÂ
- Selain itu dibutuhkan juga driver kedua yaitu driver LCD PCF8574, dengan metode yang sama seperti diatas. Untuk libraries driver LCD PCF8574 yang dipakai yaitu “LiquidCrystal_PCF8574 by Matthias Hertel“.
Setelah itu, hal yang pertama dilakukan yaitu i2c scanner untuk mencari alamat dari driver lcd tersebut.
Program dapat didapatkan dan langsung bisa diupload, jangan lupa setting di board wemos D1 mini. [ddownload id=”3104″]
Hasil dari program i2c scanner
5. Kode program
Setelah semua cara diatas dilakukan, masuk ke langkah pemrograman
[sociallocker id=”1344″]
//www.nyebarilmu.com //program sederhana Weather Station area DKI Jakarta //Wemos D1 mini + LCD 16x2 //2019 #include <ESP8266WiFi.h> //header untuk ESP8266 #include <ArduinoJson.h> //header yang baru saja di instal #include <Wire.h> #include <LiquidCrystal_PCF8574.h> const char* ssid = "Blok21no12"; //nama wifi kalian const char* password = "Komponen08"; //Password wifi String APIKEY = "9e8b102776bad6edd47f804d48121bb8"; //API keys di openweather.org String CityID = "1642911"; //kode weather station berdasarkan kota WiFiClient client; char servername[]="api.openweathermap.org"; String result; LiquidCrystal_PCF8574 lcd(0x27); //dapat dicek menggunakan i2c scanner int counter = 10; String kondisicuaca =""; //cuaca String lokasi = ""; //kota yang akan dimonitoring String negara; //negara float T; //suhu float H; //kelembaban float P; //tekanan udara void setup() { lcd.begin(16, 2); // 16 baris, 2 kolom int titik=00; Serial.begin(9600); lcd.setBacklight(255); //menyalakan lampu latar lcd.setCursor(00,00); lcd.print("nyebarilmu.com"); lcd.setCursor(00,1); lcd.print("Weather Station"); delay(3000); lcd.clear(); Serial.println("Konek Wifi"); lcd.print("Konek Wifi"); //konek ke wifi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { lcd.setCursor(titik,1); lcd.print("*"); titik++; delay(300); } lcd.clear(); lcd.setCursor(00,00); Serial.println("terhubung"); lcd.print("terhubung!"); lcd.setCursor(00, 1); lcd.print("ip:"); lcd.print(WiFi.localIP()); delay(5000); } void loop() { if(WiFi.status() == WL_CONNECTED){ if(counter == 10) //mendapatkan data per 1 menit sekali { counter = 00; lcd.clear(); lcd.print("Dapatkan data"); delay(1000); getWeatherData(); }else { tampilkancuaca(lokasi,kondisicuaca); delay(3000); tampilkankondisi(T,H,P); delay(3000); counter++; } } else if(WiFi.status() != WL_CONNECTED){ lcd.clear(); lcd.setCursor(00, 00); lcd.print("Wifi Not Connected"); lcd.setCursor(00, 1); lcd.print("Try to connect"); lcd.clear(); } } void getWeatherData() //untuk mendapatkan data dari server { if (client.connect(servername, 80)) { //memulai koneksi permintaan data client.println("GET /data/2.5/weather?id="+CityID+"&units=metric&APPID="+APIKEY); client.println("Host: api.openweathermap.org"); client.println("User-Agent: ArduinoWiFi/1.1"); client.println("Connection: close"); client.println(); } else { Serial.println("koneksi gagal"); Serial.println(); } while(client.connected() && !client.available()) delay(1); while (client.connected() || client.available()) { char c = client.read(); result = result+c; } client.stop(); //JSON to arduino converter result.replace('[', ' '); result.replace(']', ' '); Serial.println(result); char jsonArray [result.length()+1]; result.toCharArray(jsonArray,sizeof(jsonArray)); jsonArray[result.length() + 1] = '\0'; StaticJsonBuffer<1024> json_buf; JsonObject &root = json_buf.parseObject(jsonArray); if (!root.success()) { Serial.println("parseObject() failed"); } String location = root["name"]; String country = root["sys"]["country"]; float temperature = root["main"]["temp"]; float humidity = root["main"]["humidity"]; String weather = root["weather"]["main"]; String description = root["weather"]["description"]; float pressure = root["main"]["pressure"]; kondisicuaca = description; lokasi = location; negara = country; T = temperature; H = humidity; P = pressure; } void tampilkancuaca(String lokasi,String kondisicuaca) { lcd.clear(); lcd.setCursor(00,00); lcd.print(lokasi); lcd.print(","); lcd.print(negara); lcd.setCursor(00,1); lcd.print(kondisicuaca); } void tampilkankondisi(float T,float H, float P) { lcd.clear(); //tampilkan suhu lcd.print("T:"); lcd.print(T,1); //karakter derajat lcd.print((char)223); lcd.print("C "); //tampilkan kelembaban lcd.print(" H:"); lcd.print(H,00); lcd.print(" %"); //tampilkan tekanan udara lcd.setCursor(00,1); lcd.print("P: ");lcd.print(P,1); lcd.print(" hPa"); }
[/sociallocker]
Hasil dari program Weather Station diatas, dapat dilihat di video dibawah ini
Semoga bermanfaat, salam nyebarilmu.com.
terimakasih!