Di jagad maya banyak orang baik yang membagikan API secara gratis tapi sangat bermanfaat, salah satunya api.myquran.com yang menyediakan jadwal waktu sholat yang tentu saja ini sangat bermanfaat bagi kita selaku umat Muslim agar kita tidak tertinggal untuk sholat berjamaah di awal waktu. Di tutorial kali ini kita akan memanfaatkan API dari api.myquran.com untuk menampilkan jadwal waktu sholat di serial monitor Arduino IDE.
Langsung saja kita klik tombol Dokumentasinya.
API yang akan kita gunakan adalah jadwal sholat harian di kota atau kabupaten tempat tinggal kita. Dari dokumentasinya, format penulisan URL nya adalah sbb:
Pada saat penulisan tutorial ini, saya sedang berada di Kabupaten Bogor. Id untuk Kabupaten Bogor adalah 1204, bisa dilihat dari URL api.myquran.com berikut: api.myquran.com/v1/sholat/kota/semua
Jadi untuk mendapatkan informasi jadwal waktu sholat di Kabupaten Bogor pada tanggal 2 Desember 2021 adalah dengan menuliskan URL api.myquran.com/v1/sholat/jadwal/1204/2021/12/02 di address bar browser.
Selanjutnya saya akan menjelaskan cara agar board Wemos D1 R1 yang saya miliki bisa merequest jadwal waktu sholat ke api.myquran.com. Langkah-langkahnya adalah sebagai berikut:
1. Meng-copy SHA1 Fingerprint dari link HTTPS api.myquran.com
Untuk browser Mozilla Firefox yang saya gunakan di tutorial ini, cara untuk mengetahui SHA1 Fingerprint adalah dengan mengklik icon gembok yang ada di sisi kiri address bar Klik Connection secure Klik More information.
Setelah More information diklik maka akan tampil page info lalu klik tombol View Certificate
Setelah View Certificate diklik maka akan tampil halaman certificate di tab baru.
2. Koding di Arduino IDE
-
Inisialisasi
-
Setup
-
Loop
Berikut sketch lengkapnya:
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
/* Set these to your desired credentials. */
const char *ssid = "YOUR_WIFI_NETWORK_NAME"; //ENTER YOUR WIFI SETTINGS
const char *password = "YOUR_WIFI_PASSWORD";
//Web/Server address to read/write from
const char *host = "api.myquran.com";
const int httpsPort = 443; //HTTPS= 443 and HTTP = 80
//SHA1 finger print of certificate use web browser to view and copy
const char fingerprint[] PROGMEM = "95:3F:1A:FF:CB:5F:DA:AE:D0:B7:C8:C6:EF:80:81:8D:08:7D:05:24";
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_OFF); //Prevents reconnection issue (taking too long to connect)
delay(1000);
WiFi.mode(WIFI_STA); //Only Station No AP, This line hides the viewing of ESP as wifi hotspot
WiFi.begin(ssid, password); //Connect to your WiFi router
Serial.println("");
Serial.print("Connecting");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//If connection successful show IP address in serial monitor
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //IP address assigned to your ESP
}
void loop() {
WiFiClientSecure httpsClient; //Declare object of class WiFiClient
Serial.println(host);
Serial.printf("Using fingerprint '%s'\n", fingerprint);
httpsClient.setFingerprint(fingerprint);
httpsClient.setTimeout(15000); // 15 Seconds
delay(1000);
Serial.print("HTTPS Connecting");
int r=0; //retry counter
while((!httpsClient.connect(host, httpsPort)) && (r < 30)){
delay(100);
Serial.print(".");
r++;
}
if(r==30) {
Serial.println(". Connection failed");
}
else {
Serial.println(". Connected to web");
}
String Link;
//GET Data
Link = "/v1/sholat/jadwal/1204/2021/12/02"; //address from which we need to get the data inside the server.
Serial.print("requesting URL: ");
Serial.println(host+Link);
httpsClient.print(String("GET ") + Link + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
Serial.println("request sent");
while (httpsClient.connected()) {
String line = httpsClient.readStringUntil('\n');
if (line == "\r") {
Serial.println("headers received");
break;
}
}
Serial.println("reply was:");
Serial.println("==========");
String line;
while(httpsClient.available()){
line = httpsClient.readStringUntil('\n'); //Read Line by Line
Serial.println(line); //Print response
}
Serial.println("==========");
Serial.println("closing connection");
delay(7000); //GET Data at every 7 seconds
}
Klik Upload dan tunggu sampai Done Uploading.
Tampilan serial monitor: