1. Persiapan: Instal Library ArduinoJson
Untuk membaca data dari internet yang berformat JSON, Anda memerlukan library ArduinoJson.
- Buka Arduino IDE.
- Pergi ke Tools > Manage Libraries.
- Cari “ArduinoJson” (oleh Benoit Blanchon).
- Klik Install.
Tampilannya nampak seperti gambar ini

2. Kode ESP32: Mengambil Waktu Shalat
Kode ini akan menghubungi API, mengambil data waktu shalat untuk hari ini, dan menampilkannya di Serial Monitor.
#include <WiFi.h>
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
/* ================== KONFIGURASI ================== */
const char* ssid = "RANTISSIDANFATIH";
const char* password = "abahmamaktercinta";
// UmmahAPI – Jakarta
const char* url =
"https://www.ummahapi.com/api/prayer-times"
"?lat=-6.2088"
"&lng=106.8456"
"&method=MuslimWorldLeague"
"&madhab=Shafi";
/* ================================================= */
String konversiKeWIB(String waktuUTC);
void ambilJadwalShalat();
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("=================================");
Serial.println(" ESP32 JADWAL SHALAT (UmmahAPI) ");
Serial.println("=================================");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Menghubungkan WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Terhubung!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
ambilJadwalShalat();
}
void loop() {
// Kosong
}
void ambilJadwalShalat() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi terputus!");
return;
}
WiFiClientSecure client;
client.setInsecure();
client.setTimeout(10000);
HTTPClient http;
Serial.println("\n[HTTP] Menghubungi UmmahAPI...");
if (!http.begin(client, url)) {
Serial.println("[HTTP] Gagal begin()");
return;
}
http.useHTTP10(true);
int httpCode = http.GET();
Serial.printf("[HTTP] Status Code: %d\n", httpCode);
if (httpCode != HTTP_CODE_OK) {
Serial.println("[HTTP] Response bukan 200 OK");
http.end();
return;
}
String payload = http.getString();
http.end();
// DEBUG: Tampilkan raw JSON (opsional, bisa di-comment jika tidak perlu)
Serial.println("\n[DEBUG] Raw JSON Response:");
Serial.println(payload);
Serial.println();
Serial.println("[JSON] Parsing data...");
DynamicJsonDocument doc(4096);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("[JSON] Gagal parse: ");
Serial.println(error.c_str());
return;
}
// === PARSING SESUAI STRUKTUR UMMAHAPI ===
// Struktur: data.prayer_times.fajr
JsonObject data = doc["data"];
JsonObject prayer_times = data["prayer_times"];
String tanggal = data["date"] | "N/A";
String subuh = konversiKeWIB(prayer_times["fajr"] | "N/A");
String dzuhur = konversiKeWIB(prayer_times["dhuhr"] | "N/A");
String ashar = konversiKeWIB(prayer_times["asr"] | "N/A");
String maghrib = konversiKeWIB(prayer_times["maghrib"] | "N/A");
String isya = konversiKeWIB(prayer_times["isha"] | "N/A");
Serial.println("\n=================================");
Serial.println(" JADWAL SHALAT JAKARTA ");
Serial.println("=================================");
Serial.println("Tanggal : " + tanggal);
Serial.println("---------------------------------");
Serial.println("Subuh : " + subuh);
Serial.println("Dzuhur : " + dzuhur);
Serial.println("Ashar : " + ashar);
Serial.println("Maghrib : " + maghrib);
Serial.println("Isya : " + isya);
Serial.println("=================================\n");
}
String konversiKeWIB(String waktuUTC) {
if (waktuUTC == "N/A" || waktuUTC.length() < 5) {
return waktuUTC;
}
// Parse jam dan menit dari format "HH:MM"
int jam = waktuUTC.substring(0, 2).toInt();
int menit = waktuUTC.substring(3, 5).toInt();
// Tambah 7 jam untuk WIB (UTC+7)
jam += 7;
// Handle overflow hari
if (jam >= 24) {
jam -= 24;
}
// Format kembali ke "HH:MM"
String hasil = "";
if (jam < 10) hasil += "0";
hasil += String(jam);
hasil += ":";
if (menit < 10) hasil += "0";
hasil += String(menit);
return hasil;
}
Tampilannya jika berhasil akan nampak seperti pada gambar ini

Apa yang Terjadi di Kode Ini?
HTTPClient: Digunakan untuk membuat ESP32 bertindak seperti browser yang “mengunjungi” alamat API.http.GET(): Perintah untuk mengambil data dari server.ArduinoJson: Karena data dari internet biasanya berbentuk teks panjang yang rumit (JSON), library ini memecahnya agar kita bisa mengambil nilai tertentu saja (misalnya hanya mengambil jam “Maghrib”).
Ide Pengembangan Selanjutnya:
- Tampilkan di LCD/OLED: Jika Anda memiliki layar (seperti LCD 16×2 atau OLED I2C), Anda bisa menampilkan jam shalat tersebut di sana.
- Deep Sleep: ESP32 bisa diatur untuk “tidur” dan hanya bangun setiap beberapa jam sekali untuk memperbarui data guna menghemat baterai.
- Astronomi: Anda bisa mencoba API lain yang memberikan data Fase Bulan atau Posisi Matahari secara real-time.
